Een eerste probeersel met DNS, erg bruikbaar voor inbelverbindingen
Een 'caching only' nameserver zoekt adressen bij andere nameservers. De volgende keer dat om het adres voor dezelfde machinenaam gevraagd wordt, heeft de nameserver het antwoord al in het geheugen staan. Dit betekent een behoorlijke tijdswinst, zeker op langzame verbindingen.
Eerst moet een bestand /etc/named.conf
aangemaakt worden. Dit
bestand wordt gelezen als de nameserver start. Voorlopig bevat dit bestand
alleen het volgende:
// Config file for caching only name server options { directory "/var/named"; // Uncommenting this might help if you have to go through a // firewall and things are not working out: // query-source port 53; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };
Named kan aan de directory
regel zien waar de configuratiebestanden
gezocht moeten worden. Elk bestand dat hierna in named.conf
voorkomt,
staat onder de directory die je opgeeft. In dit voorbeeld is pz
een
subdirectory van /var/named
, het is dus de directory
/var/named/pz
.
In het bovenstaande configuratiebestand wordt /var/named/root.hints
genoemd. /var/named/root.hints
moet het volgende bevatten:
; ; There might be opening comments here if you already have this file. ; If not don't worry. ; . 6D IN NS G.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. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.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 I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241
Dit bestand levert informatie over de root nameservers op deze wereld. Deze informatie kan mettertijd veranderen, en moet dus worden bijgehouden. Zie de sectie Onderhoud voor informatie over het bijhouden van dit bestand.
De volgende sectie van named.conf
is de laatste zone
. Het gebruik
hiervan wordt later uitgelegd. Voorlopig is het voldoende het volgende bestand
genaamd 127.0.0
in de subdirectory pz
te plaatsen:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.
Vervolgens heb je ook nog een /etc/resolv.conf
nodig, dat er
ongeveer uitziet als:
search subdomain.your-domain.edu your-domain.edu nameserver 127.0.0.1
De `search
' regel geeft aan welke domeinen afgezocht moeten worden
naar machinenamen die je zoekt. De nameserver
regel bevat het IP adres
van de DNS server die gebruikt moet worden. In dit geval is dat je eigen
machine. De lokale machine zit altijd op IP adres 127.0.0.1
. Als je
meerdere nameservers wilt gebruiken, geef dan een aparte nameserver
regel
op voor elke DNS server die je wilt gebruiken. Named leest dit bestand
overigens nooit in. Dit bestand wordt alleen gebruikt door applicaties die een
IP adres opzoeken.
Een uitleg van dit bestand: Als een programma de naam foo
opzoekt,
dan wordt eerst foo.subdomain.your-domain.edu
geprobeerd, daarna
foo.your-domain.edu
, en tenslotte foo
. Als een programma het
IP adres van www.linux.org
zoekt dan wordt eerst
www.linux.org.subdomain.your-domain.edu
geprobeerd, vervolgens
www.linux.org.your-domain.edu
, en tenslotte www.linux.org
.
Het is vreemd, maar zo werkt het nu eenmaal. Het opzoeken van elke naam kost
tijd. Je moet dus niet al te veel domeinen in de search
regel opnemen.
Dit voorbeeld gaat ervan uit dat het domein subdomain.your-domain.edu
bestaat. Je eigen machine heet dan waarschijnlijk
your-machine.subdomain.your-domain.edu
. De search
regel moet
nooit een TLD (Top Level Domain, edu
in dit geval) bevatten. Als je vaak
machines in een ander domein bezoekt, kan je de volgende regel opnemen:
search subdomain.your-domain.edu your-domain.edu other-domain.com
Natuurlijk moet je deze regel aan je eigen situatie aanpassen. Merk op dat aan het eind van deze domains geen punt staat. Dit is belangrijk!
Vervolgens zal je, afhankelijk van je libc versie,
/etc/nsswitch.conf
of /etc/host.conf
aan moeten passen. Als je een
/etc/nsswitch.conf
bestand hebt, dan passen we dat aan. Anders passen
we /etc/host.conf
aan.
/etc/nsswitch.conf
/etc/nsswitch.conf
is een lang bestand waarin beschreven wordt
waar data vandaan gehaald moet worden. Bovenin staat bruikbaar commentaar wat
je zou moeten lezen. Zoek daarna de regel die begint met hosts:
. Daar
moet staan:
hosts: files dns
Als er geen hosts:
regel in staat, voeg dan bovenstaande regel toe.
De regel zorgt ervoor dat programma's eerst in /etc/hosts
kijken, en
dan pas de nameserver om een IP adres vragen.
/etc/host.conf
Dit bestand bevat waarschijnlijk meerdere regels. Eén van die regels
moet beginnen met 'order
', en moet er ongeveer als volgt uitzien:
order hosts,bind
Als deze regel er niet staat, maak er dan één aan. De regel
zorgt ervoor dat eerst in /etc/hosts
gekeken wordt, en dan pas de
nameserver gebruikt wordt.
Nu is het tijd om named te starten. Als je een inbelverbinding gebruikt,
bel dan eerst in. Type 'ndc start
' en tik enter. Als dat niet werkt, tik
dan /usr/sbin/ndc start
. Als het dan nog niet werkt, raadpleeg dan de
QnA sectie. Als je het bestand /var/log/messages
bekijkt tijdens het opstarten van named (bijvoorbeeld met het commando
"tail -f /var/log/messages
"), dan zie je iets als:
(regels die eindigen op "\" lopen door op de volgende regel)
Feb 15 01:26:17 roke named[6091]: starting. named 8.1.1 Sat Feb 14 \
00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
(IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.
Als er een foutmelding verschijnt, geeft named aan in welk bestand de fout
zit (named.conf
of root.hints
hoop ik ;-). Stop named, en controleer
de bestanden.
Nu is het zaakje klaar om getest te worden. Start nslookup om de configuratie te testen.
$ nslookup
Default Server: localhost
Address: 127.0.0.1
>
Als dit op het scherm verschijnt, dan werkt het. Hopen we. Als het nog niet
werkt, controleer alles dan nog eens. Altijd als named.conf
veranderd
wordt, moet je named herstarten met ndc restart
.
Nu kan je proberen een IP adres op te zoeken. Gebruik een computer die
dicht in de buurt staat. In mijn geval is dat par.uio.no
, op de
Universiteit van Oslo:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Name: pat.uio.no
Address: 129.240.130.16
nslookup gaf aan named de opdracht par.uio.no
op te zoeken. Het
ondervraagt vervolgens één van de nameservers die in
root.hints
genoemd staan. Het kan even duren voordat je antwoord krijgt,
omdat eerst gezocht wordt in elk domein dat in /etc/resolv.conf
genoemd staat.
Als je nogmaals dezelfde machine opzoekt krijg je dit:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
Name: pat.uio.no
Address: 129.240.2.50
Let op de regel 'Non-authoritative answer
'. Dat betekent dat named dit
keer niet het netwerk op is gegaan om een antwoord te zoeken, maar dat het
antwoord uit de cache komt. Deze melding wordt gegeven zodat je er rekening mee
kan houden dat de informatie inmiddels incorrect kan zijn. Dat je dit antwoord
gekregen hebt betekent in elk geval dat je caching-only nameserver werkt.
nslookup kan je verlaten door het commando exit
te tikken.
In grote netwerken wordt vaak gebruik gemaakt van "forwarders". Deze
machines verzorgen het opzoeken van een adres voor een andere machine. Dit
vermindert de belasting op het interne en externe netwerk. Door gebruik te
maken van zo'n forwarder worden de DNS lookups sneller, en ze genereren minder
netwerkverkeer. Vooral als je een modemverbinding hebt kan dit behoorlijk wat
schelen. Voor het voorbeeld nemen we aan dat je provider 2 nameservers heeft,
met de IP nummers 10.0.0.1
en 10.1.0.1
. In het named.conf
bestand moet bij de eerste sectie, "options", worden toegevoegd:
forward first; forwarders { 10.0.0.1; 10.1.0.1; };
Herstart named en test het met nslookup. Dit zou zonder problemen moeten werken.
Nu weet je hoe je een caching nameserver opzet. Neem een biertje, een glas melk, of wat dan ook om het te vieren!