BIND
Hier wird beschrieben, wie ein DNS (Domain Name System) Server so installiert wird, das er in einem Netzwerk Hostnames in IP-Adressen auflösen kann (und umgekehrt). Anfragen, die dieser DNS Server nicht beantworten kann sollen an einen anderen DNS Server weitergeleitet werden (z.B. an den im Heimrouter oder an einen vom ISP)
Situation des Beispielnetzwerkes
- 192.168.1.0/24 ist das Subnetz
- 192.168.1.20 ist der Nameserver auf dem Bind eingerichtet werden soll (Hostname namesrv)
- 192.168.1.1 HostA
- 192.168.1.2 HostB
- 192.168.1.3 HostC
- 192.168.1.4 HostD
- HostD hat einen Webserver, der unter www.home erreichbar sein soll
- Die Interne Domain lautet home
Installation
BIND ist als
bind
in extra
verfügbar, und kann von dort
mittels Pacman
installiert werden.
pacman -S bind
# Dieses Paket enthält dig, host, nslookup, usw.
pacman -S bind-tools
Konfiguration
Die Hauptkonfigurationsdatei liegt unter /etc/named.conf, dort ist auch schon ein mögliche Konfiguration zu sehen.
// // /etc/named.conf // options { directory "/etc/namedb"; //in var liegt das nicht so gut wegen Backup forwarders { [IP von anderem DNS Server]; [IP von anderem DNS Server]; }; forward first; //Macht sinn, wenn die meisten Anfragen sowieso nicht selber beantwortet werden können listen-on { 127.0.0.1; 192.168.1.20; }; pid-file "/var/run/named/named.pid"; datasize default; }; //Zonen //Forwärtsauflösen (Forward) (localhost -> 127.0.0.1) zone "localhost" IN { type master; file "localhost.zone"; allow-transfer { any; }; }; //Rückwärtsauflösung (Reverse) (127.0.0.1 -> localhost) // 0.0.127 stammt vom Netzwerk 127.0.0.0 zone "0.0.127.in-addr.arpa" IN { type master; file "127.0.0.zone"; allow-transfer { any; }; }; zone "." IN { type hint; file "root.hint"; }; //Forwärts auflösen zone "home" { type master; file "home.zone"; }; //Rückwärts auflösen, das hier verwendete Netzwerk ist 192.168.1.0/24 //bei 172.16.0.0/16 wäre die Zone 16.172.in-addr.arpa zone "1.168.192.in-addr.arpa" { type master; file "1.168.192.in-addr.arpa.zone"; }; //logging aus dem Beispiel übernommen logging { channel xfer-log { file "/var/log/named.log"; print-category yes; print-severity yes; print-time yes; severity info; }; category xfer-in { xfer-log; }; category xfer-out { xfer-log; }; category notify { xfer-log; }; };
Konfiguration der Zonen
# mkdir /etc/namedb # cp /var/named/* /etc/namedb # rm -r /var/named #den braucht man jetzt nicht mehr
Damit ist die Zone für localhost schon fertig. Jetzt kommt die Zone für das Netzwerk
$TTL 3600 ; Gueltigkeitsdauer (Sekunden) einer DNS Abfrage vom Client @ IN SOA namesrv.home. root.namesrv.home. ( 20101014 ; Serial (im Format JJJJMMTT) 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum ; Die Punkte am Ende des vollen Hostnames sind wichtig ; root.namesrv.home ist der Ansprechpartner für die Zone (root@namesrv.home) NS namesrv.home. ; Name der Nameservers. Immer die Punkte am Ende beachten namesrv A 192.168.1.20 HostA A 192.168.1.1 HostB A 192.168.1.2 HostC A 192.168.1.3 HostD A 192.168.1.4 www CNAME HostA
A Steht für eine Hosteintrag, CNAME ist ein Alias auf einen Canonicalname, also auf einen Hosteintrag. Es kann theoretisch auch ein Hostname auf mehrere IP Adressen zeigen. Das macht z.B. bei Laptos Sinn, die über Kabel und WLAN verbunden sind und die Benutzer das auch gerne mal wechseln.
$TTL 3600 ;Gueltigkeitsdauer einer DNS Anfrage vom Client (in Sekunden) @ IN SOA namesrv.home. root.namesrv.home. ( 20101014 ; Serial (im Format JJJJMMTT) 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum NS namesrv.home. ; Name der Nameservers. Immer die Punkte am Ende beachten 1 PTR HostA.home. 2 PTR HostB.home. 3 PTR HostC.home. 4 PTR HostD.home. 20 PTR namesrv.home.
In dieser Datei werden Pointer (PTR) hinterlegt, die vom Hostanteil der IP-Adresse auf einen Namen zeigen. Damit kann man dann aus IP Adressen wieder an die Name kommen. Bei Class B hat der Hostanteil dann einen Punkt, z.B. 1.2 von 172.16.1.2 (Das könnte bitte noch jemand bestätigen, dass das tatsächlich in der Reihenfolge muss)
Named Autostart
Dazu wird in der /etc/rc.conf named in das DEAMON Array eingetragen
DAEMONS=(... named ...)
Named starten
# /etc/rc.d/named start
Client-konfiguration
Nameserver dem System bekanntmachen, per DHCP muss im DHCP Server die IP Adresse des Nameservers (hier 192.168.1.20) eingetragen werden und eine Domain (hier home) manuell geht das über die /etc/resolv.conf
domain home nameserver 192.168.1.20
Test
Forward Lookup
# nslookup HostA
Server: 192.168.1.20 Address: 192.168.1.20#53 Name: namesrv.home Address: 192.168.1.1
Reverse Lookup
# nslookup 192.168.1.20
Server: 192.168.1.20 Address: 192.168.1.20#53 1.1.168.192.in-addr.arpa name = HostA.home.
Jetzt noch den Alias überprüfen
# nslookup www.home
Server: 192.168.1.20 Address: 192.168.1.20#53 www.home canonical name = HostA.home. Name: HostA.home Address: 192.168.1.1