Existují i informativní RFC zabývající se problémy DNS. Např. častým chybám DNS se věnuje RFC-1537 a prostředkům na ladění DNS se věnuje RFC-1713.
Při kontrole konfigurace můžeme postupovat dvěma způsoby.
Programem nslookup posíláme DNS dotazy na DNS server a kontrolujeme, zda DNS server odpovídá správně. Pomocí programu nslookup můžeme vystupovat v roli resolveru a požadovat po name serveru konečnou odpověď na náš dotaz. Nebo můžeme pomocí programu nslookup simulovat chování name serveru, který komunikuje s jiným name serverem (tj. požadovat jen částečné odpovědi). Záleží na tom, co chceme pomocí programu nslookup testovat.
Program nslookup posílá DNS dotazy implicitně na name server, který je na systému nastavený jako resolver. V OS Unix tedy posílá dotazy na name server uvedený v souboru /etc/resolv.conf.
Program nslookup spustíme v interaktivním režimu příkazem nslookup, výsledkem spuštění programu je např. prompt:
Default Server: cbu.pvtnet.cz
Address: 194.149.105.18
>
Odpdověď nám oznamuje, že server cbu.pvtnet.cz je na našem cvičném systému definován v konfiguraci resolveru jako implicitní name server. Tento name server má IP adresu 194.149.105.18. Na výzvu (prompt) > zadáme svůj dotaz. Ptát se můžeme např. na IP adresu nebo jméno nějakého uzlu.
Zadám-li na prompt jméno
uzlu např. www.pvt.cz, pokusí se name server cbu.pvtnet.cz zjistit IP adresu
tohoto uzlu.
Zadám-li na prompt IP adresu např. 194.149.104.206, pokusí se default server zjistit doménové jméno uzlu s touto IP adresou.
Dotaz:Jak je zřejmé z uvedených příkladů program nslookup implicitně hledá v DNS odpovídající větu A nebo větu PTR. Programem nslookup se však můžeme zeptat name serveru na libovolnou větu RR. Typ věty, který nás zajímá definujeme v programu nslookup pomocí příkazu
set querytype=typ_věty, který je možné zkrátit na set q=typ_věty.
Použití si opět ukážeme na příkladu. Tentokrát nás bude zajímat seznam serverů, na které je směrována pošta pro doménu pvt.cz. Již víme, že směrování pošty je definováno větami MX v zónovém souboru příslušné domény. Zajímají nás tedy všechny vět typu MX. Nastavíme tedy požadovaný typ vět MX takto:
Dotaz:Pro doménu pvt.cz je pošta směrována na uzel fw.pvt.cz a na dva záložní uzly info.pvt.net a mh.pvt.cz.
Všimněte si, že program nslookup vypisuje nejen vlastní odpověd ale i ostatní informace z DNS paketu, který od serveru obdržel. Kromě vlastní odpovědi navíc vidíme i autoritativní servery pro doménu pvt.cz a IP adresy všech serverů v odpovědi. Tyto doplňkové informace nebudu v dalších příkladech z důvodu přehlednosti uvádět.
Další případ, kdy se nslookup často používá, je zjištění autoritativních serverů pro doménu, Zajímají nás tentokrát jména name serverů, které se o danou doménu starají. Požadovanou informaci jednoduše získáme, když nastavíme typ věty na NS:
Dotaz:Doména pvt.cz je delegována na 5 autoritativních name serverů.
Cvičení: Zjistěte autoritativní name servery pro doménu fj.
Cvičení: Zjistěte root name servery Internetu (tj. autoritativní name servery pro tečku).
Pokud např. nevíme, zda je doménové jméno kanonickým jménem nebo aliasem, můžeme využít nastavení set q=any a zjistit tak všechny věty vztahující se k danému doménovému jménu.
Dotaz:Odpověď:
info.pvt.net CPU = AlphaServer
100 OS = OSF/1
info.pvt.net text = "e-mail:
dostalek@pvt.net"
info.pvt.net internet address
= 194.149.104.203
V našem případě je doménové jméno info.pvt.net definováno ve 3 větách, ve větě typu A, typu TXT a ve větě typu HINFO.
Nastavení ladící úrovně debug:
> set debug
Vezmete-li si k ruce kapitolu 11 (Protokol DNS), pak je výstup ladícího režimu docela dobře čitelný. Ve výpisu jsou jednotlivé sekce uvozeny nadpisem. Do výpisu je pro lepší orientaci autorem doplněn český komentář.
Použití si ukážeme na příkladu.
Zajímá nás IP adresa uzlu test100.pvt.net.
QUESTIONS: Sekce obsahující dotaz
test100.pvt.net.pvt.cz, type = A, class = IN
AUTHORITY RECORDS: Sekce o autoritativních serverech
-> pvt.cz
ttl = 129600 (1 day 12 hours)
origin = mh.pvt.cz
mail addr = hostmaster.pvt.cz
serial = 1996020802
refresh = 10800 (3 hours)
retry = 3600 (1 hour)
expire = 360000 (4 days 4 hours)
minimum ttl = 129600 (1 day 12 hours)
------------
Druhý paket pak již v našem případě obsahuje odpověď:
------------
Got answer:
HEADER:
opcode = QUERY, id = 2, rcode
= NOERROR
header flags: response, want
recursion, recursion avail.
questions = 1, answers =
1, authority records = 4, additional = 4
QUESTIONS:
test100.pvt.net, type = A,
class = IN
ANSWERS:
-> test100.pvt.net
internet address = 194.149.100.1
ttl = 129175 (1 day 11 hours
52 mins 55 secs)
AUTHORITY RECORDS:
-> pvt.NET
nameserver = NS0.PIPEX.net
ttl = 122697 (1 day 10 hours
4 mins 57 secs)
-> pvt.NET
nameserver = NS1.PIPEX.net
ttl = 122697 (1 day 10 hours
4 mins 57 secs)
-> pvt.NET
nameserver = ns.pvt.net
ttl = 122697 (1 day 10 hours
4 mins 57 secs)
-> pvt.NET
nameserver = NS1.PVT.net
ttl = 122697 (1 day 10 hours
4 mins 57 secs)
ADDITIONAL RECORDS:
-> NS0.PIPEX.net
internet address = 158.43.128.8
ttl = 143625 (1 day 15 hours
53 mins 45 secs)
-> NS1.PIPEX.net
internet address = 158.43.192.7
ttl = 143625 (1 day 15 hours
53 mins 45 secs)
-> ns.pvt.net
internet address = 194.149.105.18
ttl = 129175 (1 day 11 hours
52 mins 55 secs)
-> NS1.PVT.net
internet address = 194.149.103.201
ttl = 129175 (1 day 11 hours
52 mins 55 secs)
------------
Non-authoritative answer:
Name: test100.pvt.net
Address: 194.149.100.1
Resolver odeslal na name server dva dotazy a jako odpověď obdržel dva pakety. Proč se jedná o dva dotazy by nám již mělo být jasné z kapitoly o resolveru. Pokud tomu tak není napovím, pozorně se podívejte na doménové jméno, na které se v dotazu resolver ptá.
Použití si ukážeme na příkladu
stejném jako u ladící úrovně debug. Můžete porovnat odpovědi.
QUESTIONS:
test100.pvt.net.pvt.cz, type
= A, class = IN
------------
------------
Got answer (96 bytes):
HEADER:
opcode = QUERY, id = 3, rcode
= NXDOMAIN
header flags: response, auth.
answer, want recursion, recursion avail.
questions = 1, answers =
0, authority records = 1, additional = 0
QUESTIONS:
test100.pvt.net.pvt.cz, type
= A, class = IN
AUTHORITY RECORDS:
-> pvt.cz
type = SOA, class = IN, dlen
= 38
ttl = 129600 (1 day 12 hours)
origin = mh.pvt.cz
mail addr = hostmaster.pvt.cz
serial = 1996020802
refresh = 10800 (3 hours)
retry = 3600 (1 hour)
expire = 360000 (4 days 4
hours)
minimum ttl = 129600 (1 day
12 hours)
------------
------------
SendRequest(), len 33
HEADER:
opcode = QUERY, id = 4, rcode
= NOERROR
header flags: query, want
recursion
questions = 1, answers =
0, authority records = 0, additional = 0
QUESTIONS:
test100.pvt.net, type = A, class = IN
------------
------------
Got answer (208 bytes):
HEADER:
opcode = QUERY, id = 4, rcode
= NOERROR
header flags: response, want
recursion, recursion avail.
questions = 1, answers =
1, authority records = 4, additional = 4
QUESTIONS:
test100.pvt.net, type = A,
class = IN
ANSWERS:
-> test100.pvt.net
type = A, class = IN, dlen
= 4
internet address = 194.149.100.1
ttl = 129025 (1 day 11 hours
50 mins 25 secs)
AUTHORITY RECORDS:
-> pvt.NET
type = NS, class = IN, dlen
= 15
nameserver = NS0.PIPEX.net
ttl = 122547 (1 day 10 hours
2 mins 27 secs)
-> pvt.NET
type = NS, class = IN, dlen
= 6
nameserver = NS1.PIPEX.net
ttl = 122547 (1 day 10 hours
2 mins 27 secs)
-> pvt.NET
type = NS, class = IN, dlen
= 9
nameserver = ns.pvt.net
ttl = 122547 (1 day 10 hours
2 mins 27 secs)
-> pvt.NET
type = NS, class = IN, dlen
= 10
nameserver = NS1.PVT.net
ttl = 122547 (1 day 10 hours
2 mins 27 secs)
ADDITIONAL RECORDS:
-> NS0.PIPEX.net
type = A, class = IN, dlen
= 4
internet address = 158.43.128.8
ttl = 143475 (1 day 15 hours
51 mins 15 secs)
-> NS1.PIPEX.net
type = A, class = IN, dlen
= 4
internet address = 158.43.192.7
ttl = 143475 (1 day 15 hours
51 mins 15 secs)
-> ns.pvt.net
type = A, class = IN, dlen
= 4
internet address = 194.149.105.18
ttl = 129025 (1 day 11 hours
50 mins 25 secs)
-> NS1.PVT.net
type = A, class = IN, dlen
= 4
internet address = 194.149.103.201
ttl = 129025 (1 day 11 hours
50 mins 25 secs)
------------
Non-authoritative answer:
Name: test100.pvt.net
Address: 194.149.100.1
>
> server ns.internic.net
Po použití tohoto příkazu bude všechny následně zadané DNS dotazy řešit nově nastavený server tedy v našem případě server ns.internic.net.
Toto nastavení je velice praktické, protože většinou se nám náš místní name server z naší LAN jeví jako korektně pracující. Takže jistotu získáme, až si náš name server ověříme z pohledu jiného name serveru.
>server ns.pvt.net
>ls -d pvt.cz
Příkaz ls –d
simuluje zone transfér z name serveru, proto se často používá při konfiguraci
sekundárního name serveru. Pomocí příkazu ls –d je možné snadno ověřit,
zda primární name server poskytuje data dané zoony a zda je tedy poskytne
sekundárnímu name serveru pro zoonu. Pokud se nám nepodaří získat tímto
příkazem od primárného serveru odpověď, můžeme si být jisti, že se to s
největší pravděpodobností nepodaří ani sekundárnému name serveru.
Program nslookup implicitně používá searchlist, tedy podobně jako resolver přidává implicitní doménu za doménové jméno, které není ukončeno tečkou. Toto chování zakážeme příkazem:
> set nosearch
Nslookup implicitně požaduje po name serveru rekurzivní, tedy konečnou odpověď. Víme,že name servery mezi sebou si posílají nerekurzivní odpovědi a proto opět toto chování musíme potlačit, tentokrát příkazem:
> set norecurseNejznámějším programem pro ladění DNS je program dnswalk. Dnswalk je skript napsaný v jazyce Perl. Program dnswalk “zná” pravidla pro konfiguraci DNS a podle těchto pravidel kontroluje konfiguraci dané domény. Program dnswalk provede zone transfér z autoritativního name serveru a zkontroluje správnost konfigurace domény z mnoha pohledů. Program umí kontrolovat přímé domény i reverzní domény. Jméno kontrolované domény se programu předává jako parametr, jméno musí být ukončeno tečkou. Opět je nejlépe spouštět dnswalk z cizího počítače, proto v Internetu existují web-servery nabízející formuláře na otestování cizích domén. Tyto web-servery spouští dnswalk jako cgi-skript. Následující příklad ilustruje použití programu dnswalk pro kontrolu zóny pvt.net. (tečka na konci je povinná):$ perl dnswalk pvt.net.
Při kontrole Dnswalk odhalil hned tři chyby:
V doméně pvt.net jsou uvedeny dvě věty typu A, ke kterým neexistuje odpovídající věta PTR. Ve jméně pipex-gw.pvt.net nám chybí tečka ne konci a CNAME tedy ukazuje na neexitující uzel.
Dnswalk může být spouštěn s různými parametry. Uveďme alespoň parametry pro nejčastěji používané kontroly:
Parametr Význam
-f Dnswalk zkouší provést zone transfér z autoritativního name serveru
-l Kontrola na lame delegaci
-r Rekurzivní kontrola subdomén domény
-a Kontrola výskytu duplicitních vět typu A
-F Kontrola vět A oproti větám PTR
Nejčastější volání programu dnswalk pro kontrolu domény je tedy:
dnswalk -Fralf domena.cz.
Dnswalk je dostupný na: ftp://ftp.math.psu.edu/pub/barr
Nejčastěji používaná syntaxe:
dig @server domena query-type
Za znakem @ uvedeme jméno serveru, kterého se chceme dotazovat. Druhý parametr je jméno domény, kterou chceme kontrolovat, query-type je požadovaný typy věty. Na místo řetězce query-type můžeme uvést libovolný typ věty RR nebo řetězec axfr, kterým požadujeme zone transfér nebo řetězec any, který je požadavkem na libovolný typ věty.
Příklad použití programu dig:
V příkladu požadujeme kontrolu vět typu mx pro doménu pvt.net. Informace chceme od serveru ns.pvt.net.
dig @ns.pvt.net pvt.net mx
; <<>> DiG 2.1 <<>> @ns.pvt.net pvt.net
mx
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR,
id: 10
;; flags: qr aa rd ra; Ques: 1, Ans: 2, Auth: 5, Addit:
15
;; QUESTIONS:
;; pvt.net, type = MX, class = IN
;; ANSWERS:
pvt.net. 86400 MX 20 mail.uu.net.
pvt.net. 86400 MX 10 cbu.pvtnet.cz.
;; AUTHORITY RECORDS:
pvt.net. 86400 NS ns.pvt.net.
pvt.net. 86400 NS ns1.pvt.net.
pvt.net. 86400 NS snmp0.pvt.net.
pvt.net. 86400 NS ns0.pipex.net.
pvt.net. 86400 NS ns1.pipex.net.
;; ADDITIONAL RECORDS:
mail.uu.net. 74570 A 192.48.96.15
mail.uu.net. 74570 A 192.48.96.16
mail.uu.net. 74570 A 192.48.96.17
mail.uu.net. 74570 A 192.48.96.5
mail.uu.net. 74570 A 192.48.96.7
mail.uu.net. 74570 A 192.48.96.8
mail.uu.net. 74570 A 192.48.96.14
cbu.pvtnet.cz. 86400 A 194.149.105.18
ns.pvt.net. 86400 A 194.149.105.18
ns1.pvt.net. 86400 A 194.149.103.201
snmp0.pvt.net. 86400 A 194.149.103.34
ns0.pipex.net. 16958 A 158.43.128.103
ns0.pipex.net. 16958 A 158.43.128.8
ns1.pipex.net. 16970 A 158.43.192.7
ns1.pipex.net. 16970 A 158.43.192.40
;; Total query time: 7 msec
;; FROM: info.pvt.net to SERVER: ns.pvt.net 194.149.105.18
;; WHEN: Tue Aug 18 11:15:20 1998
;; MSG SIZE sent: 25 rcvd: 418
Místo jména serveru můžeme při volání programu dig uvést IP adresu dotazovaného server.