Analýza DNS programem dig

Z Milan Kerslager
Verze z 7. 1. 2009, 09:17, kterou vytvořil Milan.Kerslager (diskuse | příspěvky) (vslib => tul)
Přejít na: navigace, hledání

Program dig je nástroj pro ruční kladení otázek DNS serverům. Může dobře posloužit pro zjištění chyb, ale i k prostému nahlédnutí "pod pokličku" DNS. V distribuci Fedora a Red Hat Enterprise Linux ho najdete v balíčku bind-utils. Program dig je nástupcem programu nslookup (který není již dále vyvíjen a nejsou v něm ani opravovány známé chyby).

Tučně psaný text v příkladech vkládá uživatel, výzva systému (shell) je zde vidět jako znak dolar ($). Ostatní text je výstup programu tak, jak ho uživatel mohl vidět.

Převod jména na IP adresu

Při převodu jména na IP adresu zadáme požadované DNS jméno programu dig jako parametr:

$ dig ftp.pslib.cz

; <<>> DiG 9.2.1 <<>> ftp.pslib.cz
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18216
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 2

;; QUESTION SECTION:
;ftp.pslib.cz.                  IN      A

;; ANSWER SECTION:
ftp.pslib.cz.           86400   IN      CNAME   neptun.pslib.cz.
neptun.pslib.cz.        86400   IN      A       195.113.159.1

;; AUTHORITY SECTION:
pslib.cz.               86400   IN      NS      neptun.pslib.cz.
pslib.cz.               86400   IN      NS      semiramis.sslib.cz.
pslib.cz.               86400   IN      NS      ns.ces.net.

;; ADDITIONAL SECTION:
ns.ces.net.             82485   IN      A       195.113.144.233
semiramis.sslib.cz.     83745   IN      A       195.113.167.1

;; Query time: 2 msec
;; SERVER: 195.113.159.1#53(195.113.159.1)
;; WHEN: Thu Oct 10 14:43:16 2002
;; MSG SIZE  rcvd: 167

V příkladu je vidět, že odpověď byla autoritativní (tj. pochází od primárního nebo od sekundárního serveru domény, na kterou se ptáme). Autoritativní odpověď je indikována příznakem (flag) aa na 5. řádku výstupu. To znamená, že DNS server má danou informaci uvedenou v definici domény na svém pevném disku. Pokud bychom se ptali na jiné jméno, server by poskytl neautoritativní odpověď, protože informaci získá někde jinde. Neautoritativní odpovědi jsou uchovávány v cache (v paměti) DNS serveru, který odpověď získal. Informace je uložena v cache jen tak dlouho, jak to dovolí správce dané domény. Zbývající čas je pak uveden před klíčovým slovem IN (zde je z důvodu autoritativní odpovědi trvale hodnota 86400).

Dále výstup obsahuje sekci s odpovědí (ANSWER SECTION). Z výstupu je vidět, že ftp.pslib.cz není vlastní jméno počítače, ale že je to je přezdívka (CNAME). Tato přezdívka ukazuje na reálné jméno počítače (zde neptun.pslib.cz). Na dalším řádku je pak uveden A záznam pro tento počítač (tj. jeho IP adresa).

Sekce AUTHORITY SECTION ukazuje seznam DNS serverů, které jsou autoritativní pro tuto doménu (tj. jeden z nich bude zřejmě primární a ostatní budou sekundární). Sekundární i primární DNS servery poskytují rovnocenné odpovědi a z hlediska uživatele mezi nimi není rozdíl. Z hlediska jejich správce je primární server nositelem databáze (dělají se zde tedy změny v definici domény) a sekundární servery jsou záložní. Sekundární servery si kopírují definici domény z primárního DNS serveru automaticky pomocí příkazu AXFR (jak bude uvedeno dále).

Poslední sekcí výstupu je ADDITIONAL SECTION. Zde jsou uvedeny upřesňující informace, zde konkrétně IP adresy DNS serverů. Můžete si povšimnout, že zbývající doba trvanlivosti informace uložené v cache DNS serveru je nižší. Při opakování dotazu je pak vidět, jak dále klesá.

Převod IP adresy na jméno

Pro zpětný převod je potřeba použít parametr -x. Tento parametr zajistí automatický přepis IP adresy do reverzního zápisu v doméně in-addr.arpa. Všimněte si, že odpověď už není autoritativní (chybí příznak aa, který byl vidět v předchozím příkladu).

$ dig -x 147.230.16.8

; <<>> DiG 9.2.1 <<>> -x 147.230.16.8
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14640
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

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

;; ANSWER SECTION:
8.16.230.147.in-addr.arpa. 86400 IN     PTR     obelix.tul.cz.

;; AUTHORITY SECTION:
230.147.in-addr.arpa.   86400   IN      NS      ns.ces.net.
230.147.in-addr.arpa.   86400   IN      NS      bubo.tul.cz.

;; ADDITIONAL SECTION:
ns.ces.net.             79871   IN      A       195.113.144.233
bubo.tul.cz.            86229   IN      A       147.230.16.1

;; Query time: 5 msec
;; SERVER: 195.113.159.1#53(195.113.159.1)
;; WHEN: Thu Oct 10 15:26:50 2002
;; MSG SIZE  rcvd: 147

Zjištění MX záznamů

MX záznamy slouží pro směrování elektronické pošty. Obsahují číslo, které slouží k určení priority. Čím nižší, tím má příslušný záznam vyšší prioritu a naopak. Při doručování pošty je z elektronické adresy vzata část za zavináčem a nejprve se ji program doručující poštu (MTA - Mail Transfer Agent) pokusí přeložit na IP adresu (nejstarší varianta směrování pošty). Pokud to nelze nebo daná IP adresa není schopna poštu přijmout, zkouší se pošta doručit na MX záznamy nižší prioritou.

Následující výpis je zkrácen tak, aby obsahoval jen vlastní odpověď.

$ dig pslib.cz mx

...
;; ANSWER SECTION:
pslib.cz.               86400   IN      MX      20 neptun.pslib.cz.
pslib.cz.               86400   IN      MX      30 semiramis.xserver.cz.
pslib.cz.               86400   IN      MX      40 rs.cesnet.cz.
pslib.cz.               86400   IN      MX      10 opteron.pslib.cz.

Zjištění NS, SOA a případně dalších záznamů

Podobně jako u MX záznamů lze požádat i o další záznamy v DNS, například NS (seznam DNS serverů), SOA (Start Of Authority, resp. definiční část domény se sériovým číslem a předepsanými implicitními intervaly) a podobně:

$ dig pslib.cz ns

...
;; ANSWER SECTION:
pslib.cz.               86400   IN      NS      ns.ces.net.
pslib.cz.               86400   IN      NS      neptun.pslib.cz.
pslib.cz.               86400   IN      NS      semiramis.xserver.cz.
$ dig pslib.cz soa

...
;; ANSWER SECTION:
pslib.cz.               86400   IN      SOA     neptun.pslib.cz. hostmaster.pslib.cz. 2004081800 28800 7200 1814400 86400

SOA záznam obsahuje postupně tyto údaje:

  • jméno primárního NS serveru (nemá funkční význam, takže tam může být v podstatě cokoliv, zde neptun.pslib.cz)
  • elektronickou adresu správce domény, přičemž znak zavináč je nahrazen tečkou (zde hostmaster@pslib.cz)
  • serial - sériové číslo zónového souboru, podle kterého sekundární NS servery usuzují, zda je potřeba přenést novější zónový soubor z primárního NS serveru, obvykle je to datum plus sériové číslo, ale v podstatě musí být při každé změně číslo pouze zvětšeno (zde 2004081800)
  • refresh - doba, za kterou by sekundární server měl zkontrolovat, zda primár neobsahuje novější informace (zde 28800 vteřin, tj. 8 hodin)
  • retry - po jaké době by měl sekundární server opakovat pokus o stažení zóny v případě neúspěchu (zde 7200 vteřin, tj. 2 hodiny)
  • expire - po jakou dobu je oprávněn poskytovat sekundár autoritativní odpovědi bez toho, aby se mu podařilo spojit s primárním NS serverem (zde 1814400 vteřin, tj. 4 týdny)
  • minimum TTL - implicitní trvanlivost záznamů v cache, přičemž pro každý záznam je možné v zónovém souboru uvést specifickou hodnotu (zde 86400 vteřin, tj. 1 den)

Přenos zóny (AXFR)

Pokud je přenos zóny povolen, lze o něj požádat primární nebo sekundární DNS server domény. Z toho vyplývá, že nejprve zjistíme NS servery domény a pak se jich pokusíme zeptat. Z výpisu NS serverů nepoznáme, který server je primární a který sekundární, nicméně oba poskytují autoritativní odpovědi (označené flagem aa). S jistou rezervou lze brát jako nápovědu jméno serveru uvedené v SOA záznamu domény, protože na toto místo většinou administrátor domény píše právě název primárního NS serveru.

$ dig pslib.cz ns
$ dig @neptun.pslib.cz pslib.cz axfr

; <<>> DiG 9.2.2 <<>> @neptun.pslib.cz pslib.cz axfr
;; global options:  printcmd
pslib.cz.               86400   IN      SOA     neptun.pslib.cz. hostmaster.pslib.cz. 2004081800 28800 7200 1814400 86400
pslib.cz.               86400   IN      NS      ns.ces.net.
pslib.cz.               86400   IN      NS      neptun.pslib.cz.
pslib.cz.               86400   IN      NS      semiramis.xserver.cz.
pslib.cz.               86400   IN      MX      10 opteron.pslib.cz.
pslib.cz.               86400   IN      MX      20 neptun.pslib.cz.
pslib.cz.               86400   IN      MX      30 semiramis.xserver.cz.
pslib.cz.               86400   IN      MX      40 rs.cesnet.cz.
pslib.cz.               86400   IN      A       195.113.159.10
pluto.pslib.cz.         86400   IN      A       195.113.159.169
...

Kontrola správnosti NS záznamů

Domény jsou organizovány jako stromová struktura shora dolů. Zakládáme-li tedy doménu, musíme u nadřízené domény požádat o definici včetně příslušných NS serverů. Protože jsou NS servery uvedené i ve vlastním zónovém souboru domény (jak je vidět v předchozím výpisu), vzniká zde prostor pro nekonzistence. Ve správném případě by tedy měl být seznam NS serverů nadřízené domény shodný se seznamem NS serverů uvedeným v příslušné doméně. Pokud bychom chtěli provést kontrolu pro doménu pslib.cz, vypadal by postup zhruba takto:

$ dig cz ns

...
;; ANSWER SECTION:
cz.                     18000   IN      NS      ns.tld.cz.
cz.                     18000   IN      NS      ns.ripe.net.
cz.                     18000   IN      NS      ns2.nic.fr.
cz.                     18000   IN      NS      nss.tld.cz.
cz.                     18000   IN      NS      sunic.sunet.se.
cz.                     18000   IN      NS      ns-ext.vix.com.

$ dig @ns.tld.cz. pslib.cz ns

...
;; AUTHORITY SECTION:
pslib.cz.               18000   IN      NS      neptun.pslib.cz.
pslib.cz.               18000   IN      NS      semiramis.sslib.cz.
pslib.cz.               18000   IN      NS      ns.ces.net.

$ dig @neptun.pslib.cz. pslib.cz ns

...
;; ANSWER SECTION:
pslib.cz.               86400   IN      NS      semiramis.xserver.cz.
pslib.cz.               86400   IN      NS      ns.ces.net.
pslib.cz.               86400   IN      NS      neptun.pslib.cz.

Jak je vidět, záznamy jsou v pořádku. Současně bychom měli zkontrolovat, zda všechny uvedené NS servery poskytují autoritativní odpovědi (tj. jestli na nich jsou skutečně umístěny zónové soubory, resp. jestli jsou opravdu buď primárním nebo sekundárním serverem dané domény).