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