DNS servery jsou rozděleny přísně hierarchicky. Jestliže se tedy ptáme po tom nejhlavnějším serveru, bude to zřejmě ns.internic.net, ten uchovává záznamy o takzvaných ROOT-SERVERS kterých je 13 a jmenují se A.ROOT-SERVERS.NET až po M.ROOT-SERVERS.NET k poslední změně v této hlavní doméně došlo v 22.8.1997, takže je vidět jistá stálost. Soubor se jmény a adresami, je uložen na ftp://rs.internic.net/domain/named.root. Na těchto root serverech jsou uloženy informace, které nameservery spravují kořenové domény, tedy např. .cz, .tw, .com, .gov atd. Těmto doménám se říká domény I. stupně.
DNS servery však dělají také činnost přesně opačnou, překládají také čísla na jména, pro tento případ, je serverů podstatně více. soubor se jmény a adresami kořenových reverzních serverů je na ftp://rs.internic.net/domain/inaddr.zone.gz, ten ale narozdíl od předešlého potřebovat nebudeme. Uvádím ho jen pro zajímavost.
Jelikož chceme , aby byl bezpečný, nainstalujeme ho do takzvaného CHROOTového prostředí. Tím se myslí, že běžící program bude mít změněný adresář / . Pak i v případě, že nám někdo bind, díky nějaké jeho chybě, prolomí nedostane se do celého systému, ale jen do adresáře, kde je pouze bind. Já jsem si zvolil adresář /chroot/named/.
Zdrojové kódy jsou tedy na ftp://ftp.isc.org/isc/bind9/9.1.2/bind-9.1.2.tar.gz Protože bind potřebuje jen standardní ANSI/ISO knihovny a nějaký ANSI/ISO C překladač (např. gcc) tak ho jistě snadno přeložíte, jako já.
Existuje sice i novější verze bindu, ale ta má nějak špatně cesty a já se přiznám, že jsem se po 3 hodinách přemlouvání vzdal a přešel na starší, ale zato funkční 9.1.2.
Teď přiděláme ještě nějaké další soubory do /chrot/named, aby nám to fungovalo.
teď ještě
mknod /chroot/named/dev/null c 1 3
cp /etc/localtime /chroot/named/etc/
přidáme uživatele named do sytému, nepřidělíme mu shell a jako home adresář bude mít /chroot/named, také pro něj uděláme skupinu. Je dobré mít všechny data pohromadě a proto zajistíme, aby v syslogu bylo vidět, co nám náš DNS server píše. V /etc/rc.d/init.d/syslog nahradíme daemon syslogd -m 0 příkazem daemon syslogd -m 0 -a /chroot/named/dev/log. (Někteří pečliví lidé mají konfigurační volby pro syslog v /etc/sysconfig/syslog.)
Nyní ještě uděláme pořádek v /chroot.
No a teď skript pro startování namedu:
#!/bin/sh # # named This shell script takes care of starting and stopping # named (BIND DNS server). # # chkconfig: 345 55 45 # description: named (BIND) is a Domain Name Server (DNS) \ # that is used to resolve host names to IP addresses. # probe: true # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -f /usr/local/sbin/named ] || exit 0 [ -f /chroot/named/etc/named.conf ] || exit 0 # See how we were called. case "$1" in start) # Start daemons. echo -n "Starting named: " daemon /usr/local/sbin/named -u named -t /chroot/named -c /etc/named.conf echo touch /var/lock/subsys/named ;; stop) # Stop daemons. echo -n "Shutting down named: " killproc named rm -f /var/lock/subsys/named echo ;; status) status named exit $? ;; restart) $0 stop $0 start exit $? ;; reload) /usr/local/sbin/rndc reload exit $? ;; probe) # named knows how to reload intelligently; we don't want linuxconf # to offer to restart every time /usr/local/sbin/rndc reload >/dev/null 2>&1 || echo start exit 0 ;; *) echo "Usage: named {start|stop|status|restart|reload}" exit 1 esac exit 0
Soubor, který hlavně ovlivňuje konfiguraci, bude v /chroot/named/etc/named.conf. Jeden zde uvedu a pokusím se vhodně okomentovat.
options { directory "/etc/named"; // kde jsou umístěny soubory s nastavením domén pid-file "/var/run/named.pid"; statistics-file "/var/run/named.stats";
}; zone "." IN { type hint; file "named.ca"; //o tom, kde najít tento soubor a co obsahuje se již psalo }; zone "localhost" IN { //definujeme lokální smyčku type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { //reverzní záznam pro lokální smyčku type master; file "named.local"; allow-update { none; }; }; zone "officexxl.com" IN { //záznam o naší doméně type master; // typ dns serveru file "officexxl.com.dns"; //soubor se záznamy o doméně allow-update { none; }; //kdo může aktualizovat údaje allow-query { any; }; //kdo může klást dotazy allow-transfer { any;}; //kdo si může přečíst všechny informace o doméně //tedy celý soubor officexxl.com.dns //toto právo musí mít všechny sekundární servery }; view "internal" { // síť pro dotazy z místní sítě match-clients { 10.0.0.0/8; }; recursion yes; zone "example.com" { type master; file "internal.dns"; }; }; //tato zajímavá věc nám umožní rozlišovat odpoveďi podle toho, kdo se ptá //nemusí všichni vědet, jaké IP se používají v naší lokální síti view "external" { match-clients { any; }; // všichni ostatní recursion no; zone "example.com" { type master; file "external.dns }; }; //algoritmus klíčů umožnuje, aby například sekundární Ns přijímal jen správně podepsané //updaty svých záznamů. Primární i sekundární server mají shodné klíče a pak s nimi //kontrolují data, která si posílají. key "key" { algorithm hmac-md5; secret "dfDcSjmaDPwvmgVmqvWhzRJXglaveCOajmZTCkXtCmIaUtsGpTipNHIpQDfO"; };
Chtěl jsem zde popsat ještě jak vypadjí jednotlivé soubory s pospisem domén, ale vše bylo podrobně probíráno v předmětu p077. Přesto některé odkazy: