DNS server

Podle tohoto návodu si můžeme nastavit hybridní Primary Master/Caching DNS server na místní síti.

Tento typ DNS serveru nejen že bude cachovat dotazované adresy, čímž zkrátí latenci. Ale můžeme jej také použít jako základ pro vlastní mail server a další služby vyžadující vlastní doménu.

Předpoklady:

Název vytvářené domény:

mydomain.com

Místní síť:

192.168.1.x

Brána/Router:

192.168.1.1

Připojovaná PC:

station1 - 192.168.1.102 - Windows

pip-pc - 192.168.1.103 - Windows

Vytvářený DNS server:

meridius-desktop - 192.168.1.101 - Ubuntu 10.04 Desktop Edition

DNS servery od ISP:

217.117.216.72

217.117.216.7

Použitý software:

bind9
dnsutils

Postup:

Nainstalovat DNS server SW.

$ sudo apt-get install bind9 dnsutils

Postupně upravit, nebo vytvořit potřebné konfigurační soubory.

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/zones/mydomain.com.db
  • /etc/bind/zones/rev.1.168.192.in-addr.arpa

Do souboru /etc/bind/named.conf.options zadáme DNS server(y) providera.

[..]
forwarders {
     217.117.216.72;
     217.117.216.7;
};
[..]

poznámka:

Pokud nyní server restartujeme (viz níže) a nebudeme již editovat další soubory, získáme cachovací server. Ten nám sice neposkytne vlastní doménu, ale poslouží k uchovávání zodpovězených DNS dotazů a sníží tak latenci.

Práci cachovacího serveru si můžeme ověřit zadáním:

$ dig -x 127.0.0.1
; <<>> DiG 9.7.0-P1 <<>> -x 127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65351
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.        IN    PTR
;; ANSWER SECTION:
1.0.0.127.in-addr.arpa.    604800    IN    PTR    localhost.
;; AUTHORITY SECTION:
127.in-addr.arpa.    604800    IN    NS    localhost.
;; ADDITIONAL SECTION:
localhost.        604800    IN    A    127.0.0.1
localhost.        604800    IN    AAAA    ::1
;; Query time: 1 msec
;; SERVER: 192.168.1.101#53(192.168.1.101)
;; WHEN: Mon May 17 22:38:32 2010
;; MSG SIZE  rcvd: 121

Provedeme tak reverzní (-x) dotaz na adresu 127.0.0.1, což je localhost.

Můžeme se také zeptat na doménu, např.:

$ dig google.com
; <<>> DiG 9.7.0-P1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53549
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;google.com.            IN    A
;; ANSWER SECTION:
google.com.        18    IN    A    74.125.87.147
google.com.        18    IN    A    74.125.87.99
google.com.        18    IN    A    74.125.87.103
google.com.        18    IN    A    74.125.87.104
google.com.        18    IN    A    74.125.87.105
google.com.        18    IN    A    74.125.87.106
;; AUTHORITY SECTION:
google.com.        62488    IN    NS    ns3.google.com.
google.com.        62488    IN    NS    ns4.google.com.
google.com.        62488    IN    NS    ns1.google.com.
google.com.        62488    IN    NS    ns2.google.com.
;; ADDITIONAL SECTION:
ns1.google.com.        306709    IN    A    216.239.32.10
ns2.google.com.        306709    IN    A    216.239.34.10
ns3.google.com.        306709    IN    A    216.239.36.10
ns4.google.com.        306709    IN    A    216.239.38.10
;; Query time: 12 msec
;; SERVER: 192.168.1.101#53(192.168.1.101)
;; WHEN: Mon May 17 22:43:35 2010
;; MSG SIZE  rcvd: 260

Zde nás zajímá položka Query time. Provedeme-li na ní alespoň dva dig dotazy, měla by se její hodnota dramaticky snížit.

V souboru /etc/bind/named.conf.local si pojmenujeme doménu, nastavíme adresy a příslušné soubory.

# Our domain zone
zone "mydomain.com" {
     type master;
     file "/etc/bind/zones/mydomain.com.db";
};
# For reverse DNS
zone "1.168.192.in-addr.arpa" {
     type master;
     notify = no;        // <--- proc?
     file "/etc/bind/zones/rev.1.168.192.in-addr.arpa";
};

Nyní nastavíme zóny. Vytvoříme složku /etc/bind/zones a do souboru /etc/bind/zones/mydomain.com.db zapíšeme požadované záznamy.

; BIND Zone file for mydomain.com
$TTL 86400        ; 1d
;                                 nazev serveru                     email spravce (misto @ je tecka)
@        IN        SOA            meridius-desktop.mydomain.com.    admin.mydomain.com. (
                   2010051701    ; identifikacni cislo zaznamu (YYYYMMDDnn) - nn je cislo revize od "0"
                   21600         ; 6h - obnovovaci frekvence
                   3600          ; 1h - opakovane pokusy
                   604800        ; 1w - expirace datovych tabulek na sekundarnim serveru, pokud nedojde k aktualizaci
                   86400 )       ; 1d - min doba, po ktere prohlasi sekundarni server pozadavek za nesplnitelny
; Nameserver
@                   IN    NS       meridius-desktop.mydomain.com.
; Mailserver
; @                 IN    MX     0 mail.mydomain.com.    ; <--- jak se zapisuje mail server na stejné IP jako DNS server?
; Hosts
@                   IN    A        192.168.1.101
meridius-desktop    IN    A        192.168.1.101
station1            IN    A        192.168.1.102
pip-pc              IN    A        192.168.1.103
gw                  IN    A        192.168.1.1
; Alias names
dns                 IN    CNAME    meridius-desktop
mail                IN    CNAME    meridius-desktop
pop3                IN    CNAME    meridius-desktop
smtp                IN    CNAME    meridius-desktop

vysvětlení:

TTL - Time-To-Live záznamu

@ - ????

IN - Inter/intra Net. Používá se vždy a všude. Další volby existují jen z historických důvodů.

SOA - Start of Authority

MX - Mail eXchange

A - Address record

CNAME - Canonical NAME

TTL a SOA čísla jsou doby ve vteřinách.

Identifikační číslo záznamu v souboru definice zóny i v reverzním se musí po každé změně před restartem démona inkrementovat.

Uvozující závorka "(" v SOA záznamu musí být za emailem správce.

Číslo před názvem mail serveru je jeho preference number. Pokud je v síti více mail serverů, DNS server se podle něj rozhoduje, jakému z nich se pokusí email předat dříve. Čím nižší má mail server toto číslo, tím spíše se pro něj DNS server rozhodne.

A do souboru /etc/bind/zones/rev.1.168.192.in-addr.arpa si zapíšeme tabulku pro reverse lookup.

; BIND Reverse Zone file for mydomain.com
$TTL 86400
@    IN    SOA    meridius-desktop.mydomain.com.    admin.mydomain.com. (
           2010051702
           21600
           3600
           604800
           86400 )
; Nameserver
@      IN    NS     meridius-desktop.
; Hosts
101    IN    PTR    meridius-desktop.mydomain.com.
102    IN    PTR    station1.mydomain.com.
103    IN    PTR    pip-pc.mydomain.com.
1      IN    PTR    gw.mydomain.com.

vysvětlení:

PTR - PoinTer Record

Pro každý A záznam v souboru definice zóny, musí být v reverzním souboru jeden PTR záznam.

Nakonec zbývá restartovat Bind.

$ sudo /etc/init.d/bind9 restart

A otestovat funkční doménu:

Můžeme použít buď ping na celou doménu, nebo na různé A, či CNAME záznamy.

Nebo příkaz dig.

$ dig 1.168.192.in-addr.arpa. AXFR
; <<>> DiG 9.7.0-P1 <<>> 1.168.192.in-addr.arpa. AXFR
;; global options: +cmd
1.168.192.in-addr.arpa.     86400    IN    SOA    meridius-desktop.mydomain.com. admin.mydomain.com. 2010051702 21600 3600 604800 86400
1.168.192.in-addr.arpa.     86400    IN    NS     meridius-desktop.
1.1.168.192.in-addr.arpa.   86400    IN    PTR    gw.mydomain.com.
101.1.168.192.in-addr.arpa. 86400    IN    PTR    meridius-desktop.mydomain.com.
102.1.168.192.in-addr.arpa. 86400    IN    PTR    station1.mydomain.com.
103.1.168.192.in-addr.arpa. 86400    IN    PTR    pip-pc.mydomain.com.
1.168.192.in-addr.arpa.     86400    IN    SOA    meridius-desktop.mydomain.com. admin.mydomain.com. 2010051702 21600 3600 604800 86400
;; Query time: 13 msec
;; SERVER: 192.168.1.101#53(192.168.1.101)
;; WHEN: Mon May 17 20:54:15 2010
;; XFR size: 7 records (messages 1, bytes 266)
$ dig mydomain.com. AXFR
; <<>> DiG 9.7.0-P1 <<>> mydomain.com. AXFR
;; global options: +cmd
mydomain.com.                   86400    IN    SOA     meridius-desktop.mydomain.com. admin.mydomain.com. 2010051701 21600 3600 604800 86400
mydomain.com.                   86400    IN    NS      meridius-desktop.mydomain.com.
mydomain.com.                   86400    IN    A       192.168.1.101
dns.mydomain.com.               86400    IN    CNAME   meridius-desktop.mydomain.com.
gw.mydomain.com.                86400    IN    A       192.168.1.1
mail.mydomain.com.              86400    IN    CNAME   meridius-desktop.mydomain.com.
meridius-desktop.mydomain.com.  86400    IN    A       192.168.1.101
pip-pc.mydomain.com.            86400    IN    A       192.168.1.103
pop3.mydomain.com.              86400    IN    CNAME   meridius-desktop.mydomain.com.
smtp.mydomain.com.              86400    IN    CNAME   meridius-desktop.mydomain.com.
station1.mydomain.com.          86400    IN    A       192.168.1.102
mydomain.com.                   86400    IN    SOA     meridius-desktop.mydomain.com. admin.mydomain.com. 2010051701 21600 3600 604800 86400
;; Query time: 2 msec
;; SERVER: 192.168.1.101#53(192.168.1.101)
;; WHEN: Mon May 17 21:03:46 2010
;; XFR size: 12 records (messages 1, bytes 313)

Hledání chyb

Pokud by dig výpis nevypadal obdobně, jako výše, chybu najdeme buď v konfiguračních souborech zóny:

$ named-checkzone mydomain.com /etc/bind/zones/mydomain.com.db
$ named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/rev.1.168.192.in-addr.arpa

nebo ve výpisu systémového logu

$ cat /var/log/syslog | grep -e named

Stalo se mi, že mi server zahlásil

$ sudo /etc/init.d/bind9 restart
* Stopping domain name service... bind9
rndc: connect failed: 127.0.0.1#953: connection refused
[ OK ]
* Starting domain name service... bind9
[ OK ]

ale asi po 5 minutách jsem jej restartoval znovu (nic jsem neměnil) a chyba se již neobjevila.

Nastavení klientů pro využívání serveru

Windows

Linux

editovat soubor /etc/hosts a přidat do něj

192.168.1.101 meridius-desktop.mydomain.com meridius-desktop

a nakonec ještě do souboru /etc/resolv.conf přidat IP adresu a jméno naší domény. Tečka za "com" je důležitá! - pokud by se nepoužila, adresa by se doplnila o název domény -> mydomain.com.mydomain.com

search mydomain.com.

nameserver 192.168.1.101
nameserver 217.117.216.72
nameserver 217.117.216.7

Zdroje:

http://ulyssesonline.com/2007/11/07/how-to-setup-a-dns-server-in-ubuntu/

https://help.ubuntu.com/community/BIND9ServerHowto

http://www.abclinuxu.cz/clanky/site/nastaveni-dns

http://www.abclinuxu.cz/clanky/site/soukroma-sit-ii

http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/ref-guide/s1-bind-configuration.html

http://www.debianhelp.co.uk/dnsrecords.htm