DNS

Jan Bortl, yanek (@) bofh (.) cz

Co je to DNS?

Domain Name Service (DNS) je sluzba provadejici vzajemny preklad mezi adresou IP a jmenem pocitace hiearchicky umistenem v domenach. Je vic jak 20 let stara. Hlavnim duvodem jejiho vzniku byla nesnadnost zapamatovat si mnoho ruznych adres pro mnoho sluzeb.

Jak funguje DNS?

Po celem Internetu je rozmisteno 13 tzv. root-serveru, coz jsou servery obstaravajici vyrizovani pozadavku na Top Level Domain urovni. Jejich jedinou funkci je sdelovani tazajicim klientum, jakych name-serveru se maji ptat dale pro zjisteni jejich pozadavku. Jsou tedy nastaveny jako non-recursive, tj. nereknou vam presne co po nich chcete, jen vas navedou jinam, kde vam toho reknou zase o trosku vic. Z tohoto duvodu je neni mozne pouzivat jako resolvery.

Komunikace probiha po portu 53/udp. Pokud by odpoved mela prekrocit rozumnou velikost (data se prenasi pouze pomoci jednoho paketu), pouzije se pro prenos dat portu 53/tcp.

Priklad odpovedi na konkretni dotaz:
[yanek@aimee]-[~]$ host -a www.fi.muni.cz A.ROOT-SERVERS.NET.
Trying "www.fi.muni.cz"
Using domain server:
Name: A.ROOT-SERVERS.NET.
Address: 198.41.0.4#53
Aliases: 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25355
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 7

;; QUESTION SECTION:
;www.fi.muni.cz.                        IN      ANY

;; AUTHORITY SECTION:
cz.                     172800  IN      NS      NS2.NIC.FR.
cz.                     172800  IN      NS      SUNIC.SUNET.SE.
cz.                     172800  IN      NS      NS-EXT.VIX.COM.
cz.                     172800  IN      NS      NS.TLD.cz.
cz.                     172800  IN      NS      NSS.TLD.cz.
cz.                     172800  IN      NS      NS-CZ.RIPE.NET.

;; ADDITIONAL SECTION:
NS2.NIC.FR.             172800  IN      A       192.93.0.4
SUNIC.SUNET.SE.         172800  IN      A       192.36.125.2
NS-EXT.VIX.COM.         172800  IN      A       204.152.184.64
NS.TLD.cz.              172800  IN      A       217.31.196.10
NSS.TLD.cz.             172800  IN      A       217.31.200.10
NS-CZ.RIPE.NET.         172800  IN      AAAA    2001:610:240:0:53:cc:12:60
NS-CZ.RIPE.NET.         172800  IN      A       193.0.12.60

Received 303 bytes from 198.41.0.4#53 in 190 ms
[yanek@aimee]-[~]$ 

Jak je vidno, odpoved se sklada pouze ze seznamu nameserveru a jejich IP adres. Aktualni seznam root-serveru je mozno ziskat z ftp://ftp.internic.net/ (toho casu na 192.0.34.27 :-).

Pro funkci prekladu pro bezne pocitace je nutno pouzit tzv. recursive name server, tj. server ktery je nastaveny tak, ze vam sezene presne odpoved na kterou se tazete. Pokud vi kde ji vzit.

Zkusime se tedy zeptat treba cesnetiho nameseveru co nam povi na stejny dotaz...

[yanek@aimee]-[~]$ host -a www.fi.muni.cz 195.113.144.194
Trying "www.fi.muni.cz"
Using domain server:
Name: 195.113.144.194
Address: 195.113.144.194#53
Aliases: 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12386
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 2

;; QUESTION SECTION:
;www.fi.muni.cz.                        IN      ANY

;; ANSWER SECTION:
www.fi.muni.cz.         40801   IN      CNAME   aisa.fi.muni.cz.

;; AUTHORITY SECTION:
fi.muni.cz.             68553   IN      NS      anxur.fi.muni.cz.
fi.muni.cz.             68553   IN      NS      ns.muni.cz.
fi.muni.cz.             68553   IN      NS      aisa.fi.muni.cz.

;; ADDITIONAL SECTION:
aisa.fi.muni.cz.        64867   IN      A       147.251.48.1
anxur.fi.muni.cz.       52417   IN      A       147.251.48.3

Received 134 bytes from 195.113.144.194#53 in 69 ms
[yanek@aimee]-[~]$ 
Jak je videt, tento nameserver nam rekl podstatne informace. V linuxovem prostredi se resolver, tj. cast starajici se o preklad nastavuje v konfiguracnim souboru /etc/resolv.conf, tento konfiguracni soubor vypada asi takto:
[yanek@aimee]-[~]$ cat /etc/resolv.conf 
search ya.bofh.cz
nameserver 10.136.0.1
nameserver 213.211.52.96
[yanek@aimee]-[~]$ 

Zde muzeme rovnez nastavit ktere domenove jmeno se "prilepi" k nami hledanemu retezci. Takze je mozne, pro usnadneni si zivota, v nekterych aplikacich pouzivat pouze prvni cast hledaneho zaznamu.


BIND 9

Berkeley Internet Name Domain (http://www.isc.org) v revizi 9 je nejpouzivanejsi software pro preklad domenovych jmen. Pouziva se pro beh jak autoritativnich name serveru, tak "proxy" serveru pro stredni a velke site.

Vzhledem k nemalym bezpecnostnim problemum v jeho historii je velmi vhodne jej behat v chroot-rezimu. Toho se da dosahnout vytvorenim spravne struktury treba uvnitr adresare /var/named/.

[root@aimee]-[/var/named]# tree
.
|-- dev
|   `-- random
|-- etc
|   `-- bind
|       `-- named.conf -> ../../var/named/named.conf
`-- var
    |-- named
    |   |-- master
    |   |   |-- 127.0.0
    |   |   |-- localhost
    |   |   `-- ya.bofh.cz
    |   |-- named.conf
    |   |-- named.root
    |   `-- slave
    |-- run
    |   `-- bind
    |       `-- run
    `-- tmp

11 directories, 7 files
[root@aimee]-[/var/named]# 

Velmi se mi zalibilo mit toho chroot prostredi schovane v systemu tak, ze vlastne ani nepoznate ze tam je. Coz se da snadno docilit tim ze proste nasymlinkujete do /etc/named adresar /var/named/var/named/.

Obsah konfiguracniho souboru vypada asi takto:

[root@aimee]-[/var/named/var/named]# cat named.conf 
options {
  directory "/var/named";
  notify yes;
};

zone "localhost" {
  type master;
  file "master/localhost";
  allow-transfer { any; };
};

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

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

zone "ya.bofh.cz" {
  type master;
  file "master/ya.bofh.cz";
  allow-transfer { 
    62.24.64.27;
    3ffe:80ee:108c::/48;
  };
  allow-query { any; };
  notify yes;
};

[root@aimee]-[/var/named/var/named]# 

Bind, tedy jeho proces named, spustime prikazem /usr/sbin/named -u bind -t /var/named/, cimz zajistime jak beh pod jinym uzivatelem, tak beh uvnitr chroot prostredi.

V uvedenem konfiguracnim souboru vidime obecne nastaveni, tj. kde ma hledat sva data (pozor na chroot!) a definice nekolika zon. Kazdy name-server by mel znat tyto lokalni domeny. U posledni zony je videt nastaveni allow-transfer, ktere povoluje AXFR prenos zony pouze pro vymezeny seznam IP adres (nemusi vsichni vedet co mame pekneho).

Rychlo howto pro debian

1) apt-get install bind9
2) do /etc/default/bind9 dopsat '-t /var/named'
3) mkdir /var/named
4) cd /var/named
5) mkdir -p var/named/slave/ \
           var/named/master/ \
           dev \
           etc/bind \
           var/run/bind/run \
           tmp 
6) vytvorit named.conf v /var/named/var/named/
7) nakopirovat named.root z /etc/bind/
8) nakopirovat lokalni domeny
9) chown -Rc bind /var/named/
10) schovat /etc/bind/
11) ln -s /var/named/var/named/ /etc/bind/
12) /etc/init.d/bind9 start
13) zkontrolovat logy (/var/log/daemon.log) a opravit pripadne chyby

Typy zaznamu

TypNazevFunkce
SOAStart Of AuthorityObecne platne nastaveni pro domenu
NSName ServerRika kdo ma byt jmenny server pro danou domenu
MXMail eXchangePostovni server, tento zaznam ma navic i prioritu dorucovani
Ahost Address (ipv4)Ukazuje na konkretni IPv4 adresu
AAAAhost Address (ipv6)Ukazuje na konkretni IPv6 adresu
CNAMECanonical NAMEAlias, pouziva se pro urceni stejne IP pro vice jmen
PTRPointerUkazuje na jmeno, pouziva se u reverzniho prekladu

Priklad skutecne zony

ns01# cat /etc/named/master/ya.bofh.cz
$ORIGIN .
$TTL 1h
ya.bofh.cz              IN SOA  ns01.ya.bofh.cz. hostmaster.ya.bofh.cz. (
                                2005100100 ; serial
                                3600       ; refresh (1 hour)
                                900        ; retry (15 minutes)
                                1209600    ; expire (2 weeks)
                                43200      ; minimum (12 hours)
                                )
                        NS      ns.cnl.tuke.sk.
                        NS      ns.cortex.cz.
                        NS      ns01.ya.bofh.cz.
                        NS      ns03.ya.bofh.cz.
                        NS      bravo.intrak.tuke.sk.

                        A       213.211.52.96

                        MX      5 atlantis.mitranet.cz.
                        MX      10 leeloo.ya.bofh.cz.
                        MX      20 osiris.flexible.cz.
                        AAAA    3ffe:80ee:108c:1::1
$ORIGIN ya.bofh.cz.
arabela                 A       213.211.52.110
atlantis                A       213.211.52.96
                        AAAA    3ffe:80ee:108c:1::1
enigma                  A       195.39.102.82
giza                    A       194.108.93.194
leeloo                  A       213.211.52.100
                        AAAA    3ffe:80ee:108c::1
naked                   AAAA    3ffe:80ee:108c:110:200:e8ff:fe68:19be
aimee                   A       212.96.181.100
ns01                    A       213.211.52.96
                        AAAA    3ffe:80ee:108c:1::1
ns03                    A       213.211.52.100
                        AAAA    3ffe:80ee:108c::1
test                    NS      rover.ya.bofh.cz.
                        NS      siberia
pixla                   A       212.96.181.101
                        AAAA    3ffe:80ee:108c:0:20e:a6ff:fe84:88c
rover                   A       62.24.64.27
siberia                 A       217.67.30.247
                        AAAA    3ffe:80ee:f29:3000::247
sms                     CNAME   leeloo

ns01#

Odkazy