Bind


Mi is az a bind?

A bind szerepe a név feloldásban van, azaz ha valaki egy URL-re hivatkozik név alapján akkor annak kellene tudni az IP számát. Ezt az IP szamot a name szerverek tudják. Egy ilyen megvalósítás a bind.

| Eleje |

A megvalósítás, installálás

Fell kell telepítenünk a bind-ot:
 proba# apt-get install bind dnsutil
A bind maga a névszerver a dnsutil az pedig egy két segédprogram amire szükségünk lehet.

| Eleje |

Konfigurálás


Egy intranet rendszer példája alapján:
Konfiguráljunk egy olyan rendszert amikor van egy intranet rendszerünk ami az Internetre kapcsolódik
Tehát adva van 2 gép, rendre 192.168.1.1 és 192.168.1.2. Az 1-es gép lesz a központi gép, ezen a gépen telepítettük a bind programot.
Ha jól csináltuk akkor lehet megírni a zone file-okat, illetve először a

/etc/bind/named.conf
file-t editáljuk így:
 
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind/README.Debian for information on the
// structure of BIND configuration files in Debian for BIND versions 8.2.1
// and later, *BEFORE* you customize this configuration file.
options {
        directory "/var/cache/bind";
};
// reduce log verbosity on issues outside our control
logging {
        category lame-servers { null; };
        category cname { null; };
};
// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};
 

// add entries for other zones below here
zone "sajatnet.hu" {
        type master;
        file "/etc/bind/db.sajatnet";
};
zone "168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.168.192";
};

Leegyszerűsítve, ha megfigyeljük, tulajdonképpen csak a végére írtam be két bejegyzést. Két master típusú zónát definiáltam amit majd ismerni fog a bind-unk.
Az első zóna a "sajatnet.hu", ebből látszik most az intranetunk domain neve "sajatnet.hu" lett. Ez egy master típusú zóna ami a /etc/bind/db.sajatnet file-ban lesz tárolva.
Nézzük mit is kell írni ebbe a file-ba. Elősször hozzuk létre:
proba# touch /etc/bind/db.sajatnet
Azután editáljuk:
proba# mcedit /etc/bind/db.sajatnet
(persze ki-ki a szívének legkedvesebb editorát használhatja;)
Tehát a file tartalma:
 
;
; BIND data file for sajatnet.hu domain
;
$TTL    86400
@       IN      SOA     proba.sajatnet.hu. root.proba.sajatnet.hu. (
            2000092101         ; Serial
                 28800         ; Refresh
                  7200         ; Retry
                604800         ; Expire
                 86400 )       ; Negative Cache TTL
;
@       IN      NS      proba.sajatnet.hu.
;-------------------------------------------------------;
proba      IN      A       192.168.1.1                  ;
@       IN      MX      10      proba.sajatnet.hu.      ;
ns      IN      CNAME   proba                           ;
www     IN      CNAME   proba                           ;
ftp     IN      CNAME   proba                           ;
mail    IN      CNAME   proba                           ;
proxy   IN      CNAME   proba                           ;
proba   IN      HINFO   iDX4-100        Linux/Debian2.2 ;
;-------------------------------------------------------;
; addolagos serveri ip cimek
;-------------------------------------------------------;
munka     IN      A       192.168.1.2                   ; munkaállomás
;-------------------------------------------------------;
; vege.
 Na ugye nem is sok? Azért kell egy kis magyarazat. Mint például minden domain-nek kell legyen SOA rekordja. Ez nekünk @-tel kezdődik, mert lusták vagyunk kiírni, hogy sjatnet.hu. , hiszen ezt tudni fogja a bind, mert a zónát ezen a néven definiáltuk. A SOA rekordban definiáljuk a serial értékét. Ez nagyon fontos, hiszen ha szerkesztjük ezt a file-t és a name server-t nem indítjuk újra hanem csak újratöltjük (reload) akkor nem fogja beolvasni a megválltozott file-t.

NE FELEDJÜK!
Szokjuk meg, hogy a zone file szerkesztését mindig a serial növelésével kezdjük!
Ez a beidegződött stereotípia, később sok bosszúságtól óvhat meg minket. A többi érték nem érdekes jelenleg számunkra, én ezeket az értékeket az általánosan elfogadott értékek közül választottam ki, azaz kipuskáztam a "nagyok" name szervereiből!;-) Tehát elfogadjuk ezeket a lejárati, frissítési és ismétlési értékeket. A következő rekord szintén @-os, hiszen az egész domain name serverét definiáljuk. Itt nem illik megadni CNAME bejegyzésű hostnevet. Ah, mi is az a CNAME? Mindjárt visszatérünk rá.

FIGYELJÜK MEG!
Figyeljük meg, hogy a
@       IN      NS      proba.sajatnet.hu.
sorban a proba.sajatnet.hu után is áll egy pont! Ez lényeges, ugyanis ha nem teszünk pontot, akkor a bind kiegészíti azt a @ értékével azaz akkor a host név így alakulna:
proba.sajatnet.hu.sajatnet.hu
Én azt a gyakorlatot követem, hogy inkább kiírom a teljes domain nevet és nem felejtrem el az utolsó pontot. Ha te is így teszel talán kevesebbet bosszankodsz majd;-)

Végre! Definiáljuk az első hostot a domain-ünkben. Ez nem más mint a proba nevű gép a címe 192.168.1.1  .

proba      IN      A       192.168.1.1

Tehát, [gépnév,IN,A,IPcím]! Ugyanígy definiáljuk a zóna többi hostját is. Rögtön ezután definiáljuk az MX rekordot is:

@       IN      MX      10      proba.sajatnet.hu.

azaz,a @ domainnek (sajatnet.hu) a 10-es prioritású levelező gépe a proba.sajatnet.hu! (ponttal a végén:)
Megadhatunk több levelezőgépet is, a kisebb prioritás értékű a nagyobb prioritású a sorban.
Ezekután még definiálunk néhány nevet, hogy úgy is elérhessük a proba nevű gépet, mint például ftp, www, proxy, etc...
A HINFO rekord manapság nem szokásos, lévén mindenki bizalmatlan, ezért esetleges kíváncsiskodók miatt nem szokták megadni. Mi azért megadhatjuk. (Intel DX-4/100MHz-es gép és Debian GNU/Linux OS fut a gépen.)

Ezekután definiálhatjuk a tobbi hostot, mi most csak egyet adunk meg ez a munka nevű gép lesz, aminek az IP-je 192.168.1.2.
Mentés és máris nézzük a reverse DNS file tartalmát. Miénk az egész 192.168.x.x IP tartomány ezért így járunk el:

proba# touch /etc/bind/db.168.192


A file tartalma az alábbi:

; BIND data file for 192.168.x.x reverse DNS
;
$TTL    86400
@       IN      SOA     proba.sajatnet.hu. root.proba.sajatnet.hu. (
            2000092101         ; Serial
                 28800         ; Refresh
                  7200         ; Retry
                604800         ; Expire
                 86400 )       ; Negative Cache TTL
;
@       IN      NS      proba.sajatnet.hu.
;
1.1     IN      PTR     proba.sajatnet.hu.
2.1     IN      PTR     munka.sajatnet.hu.
;vege
Mentés és ezzel kész is vagyunk. A reverse DNS visszafelé működik, azaz ha valaki megkérdi mi a neve a 192.168.1.1 gépnek akkor a db.168.192 zone file alapján kiegészíti azt az 1.1-gyel és ennek a PTR rekordnak az értékét adja vissza, azaz proba.sajatnet.hu. Már csak újraindítjuk, illetve betöltetjük a serverrel a változásokat.
proba# /etc/init.d/bind reload
Ha minden jol megy akkor az alábbiakat látjuk a /var/log/syslog -ban amit pl. a
proba# tail -f /var/log/syslog
paranccsal nézegethetünk folyamatosan. kb. ezt látjuk:
Sep 25 13:29:49 proba named[153]: reloading nameserver
Sep 25 13:29:49 proba named[153]: master zone "sajatnet.hu" (IN) loaded (serial 2000092201)
Sep 25 13:29:49 proba named[153]: master zone "168.192.in-addr.arpa" (IN) loaded (serial 2000092201)
Sep 25 13:29:49 proba named[153]: Forwarding source address is [0.0.0.0].1237
Sep 25 13:29:49 proba named[153]: Ready to answer queries.
Ellenőrzés

Nincs más hátra mint hogy ellenőrizzük a jól beállított name server-ünket:

proba# nslookup
Default Server:  localhost
Address:  127.0.0.1

>

Ha nem ezt látjuk akkor rossz default nameserver beállítás a /etc/resolv.conf file-ban, korrigáljuk:
proba# cat /etc/resolv.conf
nameserver 127.0.0.1
search sajatnet.hu
Tehát látható, hogy a hostunk a 127.0.0.1-es "gépen" lévő name server-t kérdezgeti és a sajatnet.hu domainba tartozik.
Nakérem! Ha jó az nslookup -ban a Default Server akkor jó gha nem magunk is átállíthaTjuk a server 127.0.0.1 paranccsal.
Első dolgunk beállítani a listázás típusát any-ra azaz bármit listázzon az nslookup:
Default Server:  localhost
Address:  127.0.0.1

> set type=any
>

ezután lekérdezhetjük, hogy ismeri-e a domain-ünket a name server:
> sajatnet.hu
Server:  localhost
Address:  127.0.0.1

sajatnet.hu       nameserver = proba.sajatnet.hu
sajatnet.hu
        origin = proba.sajatnet.hu
        mail addr = root.proba.sajatnet.hu
        serial = 2000092201
        refresh = 28800 (8H)
        retry   = 7200 (2H)
        expire  = 604800 (1W)
        minimum ttl = 86400 (1D)
sajatnet.hu       preference = 10, mail exchanger = proba.sajatnet.hu
sajatnet.hu       nameserver = proba.sajatnet.hu
proba.sajatnet.hu internet address = 192.168.1.1
>

Szuper! Ezekután különbözőképp faggatózhatunk:
> set type=PTR
> 192.168.1.1
Server:  localhost
Address:  127.0.0.1

1.1.168.192.in-addr.arpa        name = proba.sajatnet.hu
168.192.in-addr.arpa    nameserver = proba.sajatnet.hu
proba.sajatnet.hu internet address = 192.168.1.1
> set type=MX
> sajatnet.hu
Server:  localhost
Address:  127.0.0.1

sajatnet.hu       preference = 10, mail exchanger = proba.sajatnet.hu
sajatnet.hu       nameserver = proba.sajatnet.hu
proba.sajatnet.hu internet address = 192.168.1.1
> set type=HINFO
> proba
Server:  localhost
Address:  127.0.0.1

proba.sajatnet.hu CPU = iDX4-100  OS = Linux/Debian2.2
sajatnet.hu       nameserver = proba.sajatnet.hu
proba.sajatnet.hu internet address = 192.168.1.1
> www
Server:  localhost
Address:  127.0.0.1

www.sajatnet.hu   canonical name = proba.sajatnet.hu
proba.sajatnet.hu CPU = iDX4-100  OS = Linux/Debian2.2
sajatnet.hu       nameserver = proba.sajatnet.hu
proba.sajatnet.hu internet address = 192.168.1.1
>
.
.
.
stb.


Tehát működik.
Jelen esetben a name server-ünk saját maga kérdezgeti a root servereket. Ha szeretnénk kihasználni, hogy a szolgáltatónk name server-ét kérdezgesse, hiszen az közelebb van és cache-el egy csomó kérést, tehát nagy valószínűséggel hamarabb kapunk onnan választ, akkor a /etc/bind/named.conf  file-t ki kell egészítenünk egy forwarders-szel:

options {
        directory "/var/cache/bind";
        forwarders {
                idejon.az.isp.nameservere.elsodleges.ipcime;
                idejon.az.isp.nameservere.masodlagos.ipcime;
        #    195.70.32.131;   ezek interware-es name serverek ha valaki éppen interware-es
        #    193.225.12.33;   ezek interware-es name serverek ha valaki éppen interware-es
        };
        listen-on port 53 {
            127.0.0.1;
            192.168.1.1;
        };
};
Ahha, és mi az a listen-on ? Ezzel azokat az interface IP-ket adhatjuk meg, ahol figyel a bind. Jó ezt megadni, mert így biztosítható, hogy ha esetleg be is talál egy kérés az Internetre csatlakozó interface-re, akkorsem valaszol a name server-ünk.


Egy intranet rendszer példája alapján, de az intranet masquerade mögött van:

Ez akkor jelent problémát ha az Internetre nem közvetlenül az intranetes name server-ünkről jutunk ki:
 
 

+--------+                                 +---------+
|        |192.168.1.2         192.168.1.254|         | ppp->
|  munka +--------------HUB----------------+  gate   +------
|        |               |                 |         |
+--------+               |192.168.1.1      +---------+
                    +----+----+
                    |         |
                    |  proba  |
                    |         |
                    +---------+
Tehát kibővítettük hálózatunkat egy gate nevű géppel ami az internetre csatlakozik és ez a gép az egész hálót masquerade-eli.
Így:
gate# ipchains -A forward -j m -s 192.168.1.0/24 -d 0/0
Nincs is ebben semmi rossz, csakhogy a bind ilyenkor nem kapja meg a valaszt. Ezt legkönnyebben úgy tudjuk áthidalni, hogy a gate gepre telepítünk egy bind-ot ami csak forwardol.
Feltelepítjük a szokásos módon, majd a /etc/bind/named.conf tartalma így nézzen ki:
options {
        directory "/var/cache/bind";
        forward only;
        forwarders {
            193.226.220.1;
            193.225.12.62;
        };
        listen-on port 53 {
                127.0.0.1;
                192.168.1.254;
        };
};

// reduce log verbosity on issues outside our control
logging {
        category lame-servers { null; };
        category cname { null; };
};
// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};
// add entries for other zones below here

Ennyi. Természetesen mindenki a saját ISP-je name szervereit írja a forwarders részbe!
Illetve a gate gépen ennyi, mert értelemszerűen a proba gépen az intranetes name server-nek meg kell valtoztatni a forwarders-ét:
forwarders {
    192.168.1.254;
};
Ne felejtsük újraindítani, vagy reload-olni a name servereket!

Körülbelül ennyi a történet. Nekem működik ;-) remélem ezekután már Te is megtudod csinálni.

| Eleje |



Budapest, 2000.09.25. Endrész Attila