Következő Előző Tartalom

3. A feloldó, gyorsítótáras névszerver

Az első ugrás a DNS beállításhoz. Nagyon hasznos betárcsázós, kábel-modemes, ADSL és hasonló felhasználók számára.

A Red Hat és a Red Hat-hoz kapcsolódó disztribúciók esetén ezen HOGYAN első fejezetéhez hasonló gyakorlati eredmény érhető el a bind, bind-utils és caching-nameserver csomagok telepítésével. Ha Debiant használsz, egyszerűen csak telepítsd a bind (vagy a bind9 csomagot, mivel jelenleg a BIND 9-est nem támogatja a Debian Stable (potato)) és a bind-doc csomagot. Persze csak ezen csomagok telepítésével nem tanulsz annyit, mint e HOGYAN olvasásával. Szóval telepítsd a csomagokat, azután olvass tovább, és ellenőrizd az általuk telepített állományokat.

A gyorsítótáras névszerver megtalálja a választ a névlekérdezésekre, és megjegyzi a választ a legközelebbi alkalomig, amikor szükséged lesz rá. Ez jelentősen le fogja rövidíteni a várakozási időt a következő alkalommal, különösen ha lassú a kapcsolatod.

Először szükséged lesz egy /etc/named.conf nevű állományra (Debianban: /etc/bind/named.conf). Ez betöltődik amikor a named elindul. Egyelőre csak ezt kell tartalmaznia:


// Konfigurációs állomány kizárólag gyorsítótáras névszerver számára
//
// A HOGYAN ezen változata tartalmazhat a sor elején szóközöket
// tartalmazó sorokat ebben és más állományokban. El kell távolítanod
// a szóközöket, hogy bizonyos dolgok működjenek.
//
// Figyelem, az állománynevek és a könyvtárak nevei különbözhetnek, ám
// a lényegi tartalmuknak hasonlónak kell lenniük.

options {
        directory "/var/named";
        // E sor engedélyezése segíthet, ha tűzfalon keresztül kell
        // átmenned, és a dolog nem működik. De valószínűleg beszélned
        // kell a tűzfal adminisztrátorával.
        // query-source port 53;
};

controls {
        inet 127.0.0.1 allow { localhost; } keys { rndc_key; };
};

key "rndc_key" {
        algorithm hmac-md5;
        secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};

zone "." {
        type hint;
        file "root.hints";
};

zone "0.0.127.in-addr.arpa" {
        type master;
        file "pz/127.0.0";
};

A Linux disztribúciós csomagok eltérő állományneveket használhatnak minden egyes, itt említett állománytípusra; azonban közel ugyanazt fogják tartalmazni.

A "directory" sor megmondja a named programnak, hol keresse az állományokat. Minden ezután megnevezett állomány ehhez lesz viszonyítva. Tehát a pz egy könyvtár a /var/named alatt, azaz megegyezik a /var/named/pz könyvtárral. A /var/named a helyes könyvtár, a Linux Fájlrendszer Szabvány alapján.

A /var/named/root.hints állomány is megemlítődik benne. A /var/named/root.hints állománynak ezt kell tartalmaznia:



;
; Nyitó megjegyzések lehetnek itt, ha már megvan ez az állományod.
; Ha nem, ne aggódj.
;
; A kezdő szóközökről a sorok elején: távolítsd el őket!
; A sornak egy ;-vel, .-tal vagy betűvel kell kezdődniük, nem szóközzel.
;
.                       6D  IN      NS      A.ROOT-SERVERS.NET.
.                       6D  IN      NS      B.ROOT-SERVERS.NET.
.                       6D  IN      NS      C.ROOT-SERVERS.NET.
.                       6D  IN      NS      D.ROOT-SERVERS.NET.
.                       6D  IN      NS      E.ROOT-SERVERS.NET.
.                       6D  IN      NS      F.ROOT-SERVERS.NET.
.                       6D  IN      NS      G.ROOT-SERVERS.NET.
.                       6D  IN      NS      H.ROOT-SERVERS.NET.
.                       6D  IN      NS      I.ROOT-SERVERS.NET.
.                       6D  IN      NS      J.ROOT-SERVERS.NET.
.                       6D  IN      NS      K.ROOT-SERVERS.NET.
.                       6D  IN      NS      L.ROOT-SERVERS.NET.
.                       6D  IN      NS      M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     6D  IN      A       128.9.0.107
C.ROOT-SERVERS.NET.     6D  IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     6D  IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     6D  IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     6D  IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     6D  IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     6D  IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     6D  IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.10
K.ROOT-SERVERS.NET.     6D  IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     6D  IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     6D  IN      A       202.12.27.33

Ez az állomány írja le a fő névszervereket a világban. A szerverek időről időre változnak, és frissíteni kell őket most és később is. A Karbantartás fejezetben olvashatsz ezek naprakészen tartásáról.

A következő rész a named.conf állományban a zone (zóna). Használatát egy későbbi fejezetben fogom elmagyarázni; most csak nevezzük el ezt az állományt 127.0.0-nak a pz alkönyvtárban. (Újfent, kérlek távolítsd el a sor eleji szóközöket, ha kivágod és beilleszted ezt.)



$TTL 3D
@               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                                1       ; Serial
                                8H      ; Refresh
                                2H      ; Retry
                                4W      ; Expire
                                1D)     ; Minimum TTL
                        NS      ns.linux.bogus.
1                       PTR     localhost.

A key és a control részek azt határozzák meg, hogy a named programod távolról irányítható az rndc programmal ha egy helyi állomásról kapcsolódik, ekkor egy kódolt titkos kulccsal azonosítja magát. Ez a kulcs olyan, mint egy jelszó. Az rndc működéséhez az /etc/rndc.conf állománynak meg kell egyeznie ezzel:


key rndc_key {
    algorithm "hmac-md5";
    secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};

options {
    default-server localhost;
    default-key    rndc_key;
};

Amint látod, a secret bejegyzések megegyeznek. Ha az rndc programot egy másik gépről szeretnéd használni, a két gép egymáshoz viszonyított rendszeridejének 5 percen belül kell lennie. Ehhez ajánlom az ntp (xntpd és ntpdate) szoftvert.

És most, szükséged lesz egy ehhez hasonló /etc/resolv.conf állományra: (Újfent: Távolítsd el a szóközöket!)


search altartomány.a-te-tartományod.edu a-te-tartományod.edu
nameserver 127.0.0.1

A "search" sor határozza meg, milyen tartományban történjen a keresés az állomások után, amelyekhez kapcsolódni akarsz. A "nameserver" sor határozza meg a névszervered címét, ebben az esetben a saját gépedet, mert ez az, ahol a named programod fut (a 127.0.0.1 cím helyes, nem számít, ha a gépednek van egy másik címe is). Ha több névszervert akarsz felsorolni, rakd mindegyiket egy-egy "nameserver" sorba. (Megjegyzés: A named soha nem olvassa el ezt az állományt, a named programot használó feloldó teszi ezt. Megjegyzés 2: Néhány resolv.conf állományban a "domain" sort találod. Ez helyes, de ne használd a "search" és a "domain" kulcsszót is egyszerre, csak az egyikük fog működni.)

Annak bemutatására, hogy ez az állomány mit csinál: Ha az ügyfél megpróbálja kikeresni a foo-t, akkor a foo.altartomány.a-te-tartományod.edu-t próbálja először, majd a foo.a-te-tartományod.edu-t, és végül a foo-t. Ne akarj túl sok tartományt rakni a keresősorba, mivel mindet végigkeresni időt vesz igénybe.

A példa feltételezi, hogy az altartomány.a-te-tartományod.edu tartományba tartozol. A keresősornak nem szabad tartalmaznia a legfelső tartományodat (TLD - Top Level Domain), ebben az esetben az "edu"-t. Ha gyakran kell kapcsolódnod másik tartományban levő állomásokhoz, hozzáadhatod azt a tartományt a keresősorhoz, így: (Ne felejtsd el eltávolítani a szóközöket a sor elején, ha vannak)


search altartomány.a-te-tartományod.edu a-te-tartományod.edu másik-tartomány.com

és így tovább. Nyilvánvalóan valódi tartományneveket kell helyettük beraknod. Kérlek figyeld meg a tartománynevek végén a pontok hiányát. Ez fontos!

3.1 A named indítása

Mindezek után itt az idő a named indítására. Ha betárcsázós kapcsolatot használsz, először csatlakozz. Most indítsd a named-et, vagy a boot szkript futtatásával: /etc/init.d/named start, vagy a named-et közvetlenül: /usr/sbin/named. Ha kipróbáltad a BIND előző verzióit, valószínűleg az ndc-t használtad. A BIND 9-ben ezt az rndc program váltotta fel, ami távolról vezérelheti a named-et, de már nem tudja a named-et indítani. Ha megnézed a rendszerüzenetek naplóállományát (általában /var/log/messages, a Debianban /var/log/daemon, meg lehet még keresni a /var/log egy másik állományában is), mialatt indítod a named-et (ezt a tail -f /var/log/messages-el teheted meg), valami ilyesmit kell látnod:

(a \-el végződő sorok a következő sorban folytatódnak)

Dec 23 02:21:12 lookfar named[11031]: starting BIND 9.1.3
Dec 23 02:21:12 lookfar named[11031]: using 1 CPU
Dec 23 02:21:12 lookfar named[11034]: loading configuration from \
    '/etc/named.conf'
Dec 23 02:21:12 lookfar named[11034]: the default for the \
    'auth-nxdomain' option is now 'no'
Dec 23 02:21:12 lookfar named[11034]: no IPv6 interfaces found
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface lo, \
    127.0.0.1#53
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface eth0, \
    10.0.0.129#53
Dec 23 02:21:12 lookfar named[11034]: command channel listening on \
    127.0.0.1#953
Dec 23 02:21:13 lookfar named[11034]: running

Ha bármilyen hibaüzenet megjelenik, akkor ott hiba van. A named megnevezi az állományt, amit épp olvas. Menj vissza, és ellenőrizd le az állományt. Indítsd újból a named-et, ha megjavítottad.

Most letesztelheted a beállításodat. Hagyományosan az nslookup használatos erre. Napjainkban azonban már a dig ajánlott:

$ dig -x 127.0.0.1
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26669
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 259200  IN      PTR     localhost.

;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.   259200  IN      NS      ns.linux.bogus.

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:26:17 2001
;; MSG SIZE  rcvd: 91

Ha ilyen üzeneteket kaptál, akkor működik. Reméljük. Ha bármi teljesen eltérőt kapsz, menj vissza, és ellenőrizz le mindent. Minden alkalommal, amikor megváltoztatsz egy állományt, futtasd az rndc reload parancsot.

Most már beadhatsz egy lekérdezést. Próbálj meg valami hozzád közeli gépet. A pat.uio.no közel van hozzám, az Oslói Egyetemen:

$ dig pat.uio.no
; <<>> DiG 9.1.3 <<>> pat.uio.no
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15574
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0

;; QUESTION SECTION:
;pat.uio.no.                    IN      A

;; ANSWER SECTION:
pat.uio.no.             86400   IN      A       129.240.130.16

;; AUTHORITY SECTION:
uio.no.                 86400   IN      NS      nissen.uio.no.
uio.no.                 86400   IN      NS      nn.uninett.no.
uio.no.                 86400   IN      NS      ifi.uio.no.

;; Query time: 651 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:28:35 2001
;; MSG SIZE  rcvd: 108

Ezúttal a dig megkérte a named-et, hogy keresse meg a pat.uio.no gépet. Az pedig kapcsolódott a root.hints állományodban levő egyik névszerver géphez, és lekérdezte az útvonalát onnan. Eltarthat egy röpke pillanatig, míg megkapod az eredményt, mivel végig kell keresnie az összes tartományt, amit a /etc/resolv.conf-ban megneveztél.

Ha még egyszer lekérdezed ugyanazt, ezt kapod:

$ dig pat.uio.no

; <<>> DiG 8.2 <<>> pat.uio.no
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUERY SECTION:
;;      pat.uio.no, type = A, class = IN

;; ANSWER SECTION:
pat.uio.no.             23h59m58s IN A  129.240.130.16

;; AUTHORITY SECTION:
UIO.NO.                 23h59m58s IN NS  nissen.UIO.NO.
UIO.NO.                 23h59m58s IN NS  ifi.UIO.NO.
UIO.NO.                 23h59m58s IN NS  nn.uninett.NO.

;; ADDITIONAL SECTION:
nissen.UIO.NO.          23h59m58s IN A  129.240.2.3
ifi.UIO.NO.             1d23h59m58s IN A  129.240.64.2
nn.uninett.NO.          1d23h59m58s IN A  158.38.0.181

;; Total query time: 4 msec
;; FROM: lookfar to SERVER: default -- 127.0.0.1
;; WHEN: Sat Dec 16 00:23:09 2000
;; MSG SIZE  sent: 28  rcvd: 162

Ahogy azt nyilvánvalóan láthatod, ezúttal ez sokkal gyorsabb volt, 4 ms a korábbi több, mint fél másodperccel ellentétben. A válasz benne volt a gyorsítótárban. A gyorsítótárban lévő eredményeknél esély van arra, hogy már elavult, de az eredeti szerverek befolyásolhatják azt az időt, amíg a letárolt válaszok érvényesként lesznek nyilvántartva. Végül is nagy a valószínűség arra, hogy a kapott válasz érvényes.

3.2 Névfeloldás

Minden operációs rendszer, ami a C API szabványt alkalmazza, rendelkezik a gethostbyname és a gethostbyaddr hívásokkal. Ezek különböző forrásokból szerezhetik be az információt. Hogy melyik forrásból szerzik ezt be, az Linux (és egyes Unix) rendszereken az /etc/nsswitch.conf állományban van beállítva. Ez egy hosszú állomány, amely megadja mely állományokból vagy adatbázisokból szerezhetők be különböző adattípusok. Általában hasznos megjegyzéseket tartalmaz a fejlécében, melyeket körültekintően olvass el. Ezután keresd meg a "hosts:" kulcsszóval kezdődő sort; így kell kinéznie:


hosts:      files dns

(Emlékszel még a szóközökre a sor elején? Nem akarom újra megemlíteni.)

Ha nincs "hosts:" kulcsszóval kezdődő sor, szúrd be a fentieket. Ezek a sorok azt jelentik, hogy a programoknak először a /etc/hosts állományban kell keresniük, majd leellenőrzik a DNS-t a resolv.conf állomány alapján.

3.3 Gratulálok

Most már tudod, hogyan kell beállítani a gyorsítótáras named-et. Bonts egy sört, tejet, vagy bármit, amivel ünnepelni szeretsz.


Következő Előző Tartalom