DDNS, DHCP und Firewall (mit Beispiel)

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiInternetrouter und Proxies ‹ DDNS, DHCP und Firewall (mit Beispiel)


Hinweis.png Hinweis: Bitte überprüfen, ob auch alles vom alten Beitrag übernommen wurde. Hier der Link zum alten Beitrag


Hinweis.png Hinweis: Es sind noch alte Links in diesem Wiki enthalten, bitte korrigieren


Hinweis.png Hinweis: Lizensen prüfen und festlegen



Wann wird Bind benötigt?

Grundsätzlich ist das schwer zu beantworten. Hier ein paar herausstechende Features und Punkte:

  • Man verwaltet ein Netzwerk mit mehreren Subnet's oder/und Domänen
  • Das Netzwerk soll einen Backup-Namens-Server erhalten auch Slave genannt
  • Es wird rekursive Namensauflösung benötigt
  • DNSSEC, Verschlüsselung der Zonen
  • TSIG Verschlüsselung von Kommunikation zwischen Slave- und Master-Namens-Servern
  • Du bist Bastler und willst Dich damit einfach beschäftigen

Meine Netzwerkbeschreibung

Mein lokales Netzwerk beinhaltet einen Debian-Lenny-Client feld-bert und einen Windows-XP-Client feld-drizzt, ab und zu sind auch noch Gäste bei uns zu Hause, vorwiegend Windows Rechner. Also Router/Gateway/Server nutze ich einen ausrangierten Rechner mit Debian Lenny. Das Interface meines Servers zum lokalen Netzwerk heißt br0 und meine Schnittstelle zum Internet heißt ppp0.

Auf der linken Seite meine beiden PC's bei mir zu Hause. In der Mitte mein Server mit der Firewall der mit dem auf der rechten Seite gezeigten Modem verbunden ist. Die Bilder zeigen nicht alle Details eines Netzwerks. Hervorgehoben wurde nur das interne Interface l0 des Servers.

Der dns-sec key

Damit dhcp und bind miteinander sprechen können, muss ein Schlüssel erzeugt werden. Dieser Schlüssel wird auch für das Programm nsupdate verwendet. Für rndc (Verwaltungs-Programm für Bind) kann ein eigener Schlüssel oder der gleiche Schlüssel wie für Bind/DHCP oder eben kein Schlüssel verwendet werden. Der Name der Datei die unseren Schlüssel enthält soll also nur den Domänen-Namen enthalten und nicht den Rechner-Namen, also in meinem Fall nur feldland.lan., somit ist es für Admins mit mehreren Domänen einfacher diese zuzuordnen.

cd /etc/bind
# Der DNS SEC Key für bind und dhcpd wird erzeugt
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST $(hostname -d)
# Falls der Schlüssel in einer Variablen weiterverarbeitet werden muss:
export DNSKEY=$(awk '/^Key/ {print $2}' K$(hostname -d).+157+*private) /etc/bind
\# Der DNS SEC Key für bind und dhcpd wird erzeugt
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST $(hostname -d)
\# Falls der Schlüssel in einer Variablen weiterverarbeitet werden muss:
export DNSKEY=$(awk '/^Key/ {print $2}' K$(hostname -d).+157+*private)

Falls es mal länger dauern sollte, mit der Erstellung des Schlüssels, dann liegt es daran das auf dem PC nicht genügend Zufallszahlen produziert werde, die für die Generierung des Schlüssels verwendet werden. In diesem Falle ändern wir den Befehl wie folgt um.


dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 128 -n HOST $(hostname -d)

Dafür wird aber vorrausgesetzt, dass das Device /dev/urandom vorhanden ist. Wir haben nun einen 128 Bit Schlüssel erzeugt, es wäre aber auch möglich gewesen einen 512 Bit Schlüssel zu erzeugen, was sicherer gewesen wäre. Der Inhalt der Datei Kfeldland.lan.+157+34326.key sieht so aus:

feldland.lan. IN KEY 512 3 157 SNCrjhQV8NiY6bsA5GMIJg==

Und Kfeldland.lan.+157+34326.private sieht so aus:

Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: SNCrjhQV8NiY6bsA5GMIJg==
Bits: AAA=

Fehlersuche

Standardmäßig kommt Bind mit eingeschränkten Berechtigungen für das Verzeichnis /etc/bind/ daher.

stat --printf="%a %A %U %G \n" /etc/bind/
2755 drwxr-sr-x root bind

Damit Zonen-Updates durchgeführt werden können müssen diese erst angepasst werden. Der Benutzer bind oder die Gruppe bind sollte Schreibrechte haben wie folgt:

chmod g+w /etc/bind/
stat --printf="%a %A %U %G\n" /etc/bind/
2775 drwxrwsr-x root bind

Und für die Dateien in /etc/bind/ habe ich folgende Berechtigungen eingestellt:

-rw-r--r-- 1 root root  237 20. Dez 21:21 db.0
-rw-r--r-- 1 root root  271 20. Dez 21:21 db.127
-rw-r--r-- 1 bind bind  494 31. Mär 22:29 db.192.168.0
-rw-r--r-- 1 bind bind 4092 31. Mär 22:15 db.192.168.0.jnl
-rw-r--r-- 1 root root  237 20. Dez 21:21 db.255
-rw-r--r-- 1 root root  353 20. Dez 21:21 db.empty
-rw-r--r-- 1 bind bind  538 31. Mär 22:27 db.feldland.lan
-rw-r--r-- 1 bind bind 6717 31. Mär 22:15 db.feldland.lan.jnl
-rw-r--r-- 1 root root  270 20. Dez 21:21 db.local
-rw-r--r-- 1 root root 2878 20. Dez 21:21 db.root
-rw-r----- 1 root bind   68 26. Mär 00:18 Kfeldland.lan.+157+34326.key
-rw-r----- 1 root bind   92 26. Mär 00:18 Kfeldland.lan.+157+34326.private
-rw-r--r-- 1 root bind  567 31. Mär 23:02 named.conf
-rw-r--r-- 1 root bind  350 31. Mär 23:02 named.conf.local
-rw-r--r-- 1 root bind  282 31. Mär 18:35 named.conf.options
-rw-r----- 1 bind root  282 31. Mär 17:29 rndc.key
-rw-r--r-- 1 root root 1317 20. Dez 21:21 zones.rfc1918

Wichtig ist halt das der daemon bind, der ja als User bind und Gruppe bind läuft auf die wichtigsten Zonen Schreib- und Lese-Zugriff hat, alles andere kann aus Sicherheitsgründen nur Lesend bleiben.

Zum Verwalten von Bind wird das rndc Programm empfohlen, welches in meinem Fall einen Schlüssel benötigt. ich habe für das programm rndc den gleichen Schlüssel den auch DHCP nutzt verwendet, was nicht unbedingt nötig gewesen wäre, aber da ich faul bin und gerne Riskant lebe ....Beispiel zu rndc:

rndc -s localhost -k /etc/bind/rndc.key reload

Um ein Zonen-Update manuell auszuführen wechsel ich diesmal ins Bind-Verzeichnis und führe dann das Programm nsupdate mit dem Schlüssel Kfeldland.lan.+157+34326.key aus, der als Datei im Bind-Verzeichnis liegen muss.

cd /etc/bind/
nsupdate -k Kfeldland.lan.+157+34326.key
> server feld-server
> update add feld-test.feldland.lan 86400 A 192.168.0.150
> send

In diesem Fall haben wir nsupdate von einem Client ausgeführt. Auf dem Server hätte man feld-server durch localhost ersetzt. Wenn wir dann in /var/log/daemon.log reinschauen sollte etwas ähnliches stehen wie:

Mar 31 18:47:46 feld - server named [2994]: client 192.168.0.186 # 54151: signer " feld - server . feldland . lan " approved
Mar 31 18:47:46 feld - server named [2994]: client 192.168.0.186 # 54151: updating zone ’ feldland . lan / IN ’: adding an RR at ’ feld - test . feldland . lan ’ A

Beenden tut man die interaktive Sitzung mit CTRL+D. Wichtig ist auch das der Bind-server auf der lokalen IP-Adresse horcht, also mindestens auf der Adresse 127.0.0.1. Wo der Bind horchen soll kann mit dem listen Statement eingestellt werden. Soll und Ist sind aber meistens verschiedene Geschichten, daher sollte mit dem folgenden Befehl überprüft werden worauf er wirklich horcht:

lsof -ni:53
> COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
> named   2979 bind   20u  IPv4   6816       TCP 127.0.0.1:domain (LISTEN)
> named   2979 bind   21u  IPv4   6818       TCP 192.168.0.186:domain (LISTEN)
> named   2979 bind  512u  IPv4   6815       UDP 127.0.0.1:domain
> named   2979 bind  513u  IPv4   6817       UDP 192.168.0.186:domain

Dort sollte zumindest 127.0.0.1 aufgeführt werden, sonst kann der DHCP den DNS-Server nicht mal über das interne Netzwerk ansprechen.

Vom Client kann man auch den ping Befehl zum testen nutzen. Sowohl mit oder FQDN sollte folgendes auf der Konsole erscheinen:

markus@feld-bert:~$ ping -c 1 feld-bert
PING feld-bert.feldland.lan (192.168.0.196) 56(84) bytes of data.
64 bytes from feld-bert.feldland.lan (192.168.0.196): icmp_seq=1 ttl=64 time=0.074 ms

markus@feld-bert:~$ ping -c 1 feld-bert.feldland.lan
PING feld-bert.feldland.lan (192.168.0.196) 56(84) bytes of data.
64 bytes from feld-bert.feldland.lan (192.168.0.196): icmp_seq=1 ttl=64 time=0.060 ms

Auf der Client Seite habe ich für den hostnamen nur feld-bert eingestellt, also nicht den FQDN. Und der DHCP-Client sollte den hostnamen zum DHCP-Server senden. Auf dem Server steht dann in der /var/lib/dhcp3/dhcpd.leases

. . .
lease 192.168.0.196 {
  starts 3 2010/03/31 20:15:11;
  ends 4 2010/04/01 00:15:11;
  cltt 3 2010/03/31 20:15:11;
  binding state active;
  next binding state free;
  hardware ethernet 00:1d:92:ab:35:9f;
  uid "\000\035\222\2535\237";
  set ddns-rev-name = "196.0.168.192.in-addr.arpa.";
  set ddns-txt = "3115fa25750bc8e429a401b9bcd1959433";
  set ddns-fwd-name = "feld-bert.feldland.lan";
  client-hostname "feld-bert";
. . .
}

Die Zeilen die mit set beginnen machen deutlich das was gesetzt wurde und zwar in diesem Fall Einträge in meine Forward- und Reverse-Zonen meines lokalen Netzwerks. Bei einem Fehler, also wenn es kein Zonen-Update gab, sieht es wie folgt aus:

lease 192.168.0.188 {
  starts 3 2010/03/31 20:58:41;
  ends 4 2010/04/01 00:58:41;
  cltt 3 2010/03/31 20:58:41;
  binding state active;
  next binding state free;
  hardware ethernet 00:1e:8c:6d:00:6c;
  uid "\001\000\036\214m\000l";
  client-hostname "feld-drizzt";
}

Fehlersuche welche Namensserver werden wirklich befragt?

Um sicher zu gehen das auch wirklich die Namensanfragen an den DNS-Server geschickt werden, können Paket-Sniffer eingesetzt werden, sowohl auf dem Client als auch auf dem Server. Als Tools wären da zu empfehlen wireshark und tcpdump.

Fehlersuche Firewall

Ich habe lange überlegt, ob ich eine Fehlersuche zu meiner Firewall mit reinstellen sollte. Einige würden mich dafür am liebsten töten. :-) Ich tue es trotzdem, da die Firewall bei mir ein großes Problem war in Hinsicht auf die Ansprechbarkeit meines DHCP- und DNS/DDNS-Servers. Es ist wichtig das man seine Firewall nochmal mit dem Befehl iptables -L -v -n durchgeht, um zu sehen, ob es überhaupt möglich ist den Server zu kontaktieren. So sieht es zur Zeit bei mir aus:

  1 feld-server:~/bin# iptables -L -v -n
  2 Chain INPUT (policy DROP 0 packets, 0 bytes)
  3  pkts bytes target     prot opt in     out     source               destination
  4     0     0 LOG        all  --  !lo    *       127.0.0.1            0.0.0.0/0           LOG flags 0 level 4 prefix `Loopback gespooft: '
  5     0     0 DROP       all  --  !lo    *       127.0.0.1            0.0.0.0/0
  6     0     0 LOG        tcp  --  !lo    *       0.0.0.0/0            0.0.0.0/0           tcp dpt:113 LOG flags 0 level 6 prefix `IDENT Anfrage: '
  7     0     0 REJECT     tcp  --  !lo    *       0.0.0.0/0            0.0.0.0/0           tcp dpt:113 reject-with icmp-port-unreachable
  8    16  2499 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
  9  1428  123K states     all  --  ppp0   *       0.0.0.0/0            0.0.0.0/0
 10     0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp spts:137:139
 11     0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp dpts:137:139
 12     0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp spts:137:139
 13     0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp dpts:137:139
 14     1    48 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 0
 15     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 3
 16     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
 17     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 11
 18     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 12
 19   490 66358 dsl-in     all  --  ppp0   *       0.0.0.0/0            0.0.0.0/0
 20 69884   98M int-in     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
 21     0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `INPUT: '
 22     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
 23 
 24 Chain FORWARD (policy DROP 0 packets, 0 bytes)
 25  pkts bytes target     prot opt in     out     source               destination
 26     0     0 LOG        all  --  !lo    *       127.0.0.1            0.0.0.0/0           LOG flags 0 level 4 prefix `Loopback gespooft: '
 27     0     0 DROP       all  --  !lo    *       127.0.0.1            0.0.0.0/0
 28 21784   18M states     all  --  ppp0   *       0.0.0.0/0            0.0.0.0/0
 29     0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp spts:137:139
 30     0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp dpts:137:139
 31     0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp spts:137:139
 32     0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp dpts:137:139
 33     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 0
 34     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 3
 35     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
 36     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 11
 37 21784   18M ext-fw     all  --  ppp0   br0     0.0.0.0/0            0.0.0.0/0
 38 18777 3854K int-fw     all  --  br0    ppp0    0.0.0.0/0            0.0.0.0/0
 39   229 31978 int-int-fw  all  --  br0    br0     0.0.0.0/0            0.0.0.0/0
 40     0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `FORWARD: '
 41     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
 42 
 43 Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 44  pkts bytes target     prot opt in     out     source               destination
 45    16  2499 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
 46    20  8782 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
 47   496 37741 dsl-out    all  --  *      ppp0    0.0.0.0/0            0.0.0.0/0
 48 36838 2937K int-out    all  --  *      br0     0.0.0.0/0            0.0.0.0/0
 49     0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `OUTPUT: '
 50     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
 51 
 52 Chain dsl-in (1 references)
 53  pkts bytes target     prot opt in     out     source               destination
 54     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
 55     0     0 ACCEPT     tcp  --  *      *       0.0.0.0              0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
 56     0     0 ACCEPT     udp  --  *      *       0.0.0.0              0.0.0.0/0           udp spt:53 dpts:1024:65535
 57     0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
 58   243 30959 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
 59     0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
 60   247 35399 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
 61     0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
 62     0     0 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
 63     0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
 64     0     0 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
 65     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:21 dpts:1024:65535 flags:!0x17/0x02
 66     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:20 dpts:1024:65535
 67     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535 flags:!0x17/0x02
 68     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 dpts:1024:65535 flags:!0x17/0x02
 69     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:443 dpts:1024:65535 flags:!0x17/0x02
 70     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4666
 71     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4666
 72     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4662
 73     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4662
 74     0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `DSLIN: '
 75     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
 76 
 77 Chain dsl-out (1 references)
 78  pkts bytes target     prot opt in     out     source               destination
 79     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
 80     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0             tcp spts:1024:65535 dpt:53
 81     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0             udp spts:1024:65535 dpt:53
 82     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
 83   244 18252 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
 84     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
 85   252 19489 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
 86     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
 87     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
 88     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
 89     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
 90     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:21
 91     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:20 flags:!0x17/0x02
 92     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535
 93     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:80
 94     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:443
 95     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:6667:6668 dpts:6667:6668
 96     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:4666 dpts:1024:65535
 97     0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `DSLOUT: '
 98     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
 99 
100 Chain ext-fw (1 references)
101  pkts bytes target     prot opt in     out     source               destination
102   207 15732 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
103     0     0 ACCEPT     tcp  --  *      *       0.0.0.0              0.0.0.0/0           tcp spt:53 dpts:1024:65535
104     0     0 ACCEPT     udp  --  *      *       0.0.0.0              0.0.0.0/0           udp spt:53 dpts:1024:65535
105     0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535
106     0     0 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
107     0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535
108     0     0 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
109     0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535
110     0     0 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
111     0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535
112     0     0 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
113     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:21 dpts:1024:65535 flags:!0x17/0x02
114     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:20 dpts:1024:65535
115   779  165K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535 flags:!0x17/0x02
116 15753   14M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 dpts:1024:65535
117  5045 3541K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:443 dpts:1024:65535
118     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:25 dpts:1024:65535
119     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:465 dpts:1024:65535
120     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:110 dpts:1024:65535
121     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:995 dpts:1024:65535
122     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:143 dpts:1024:65535
123     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:993 dpts:1024:65535
124     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:119 dpts:1024:65535
125     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:563 dpts:1024:65535
126     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:70 dpts:1024:65535
127     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:210 dpts:1024:65535
128     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4666
129     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4666
130     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4662
131     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4662
132     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:11235:11238 dpts:1024:65535
133     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:56158 dpt:56158
134     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:11239:11267 dpts:1024:65535
135     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:27732:27755 dpts:1024:65535
136     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:9963 dpts:1024:65535
137     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7808 dpt:7808
138     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7808 dpt:7808
139     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7117 dpt:7117
140     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7117 dpt:7117
141     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:1234 dpt:7808
142     0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `EXTFW: '
143     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
144 
145 Chain int-fw (1 references)
146  pkts bytes target     prot opt in     out     source               destination
147   210 15960 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
148     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0             tcp spts:1024:65535 dpt:53
149     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0             udp spts:1024:65535 dpt:53
150     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
151     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
152     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
153     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
154     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
155     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
156     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
157     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
158     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:21
159     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:20 flags:!0x17/0x02
160   702  144K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535
161 13744 2335K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:80
162  4096 1358K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:443
163     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:25
164     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:465
165     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:110
166     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:995
167     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:143
168     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:993
169     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:119
170     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:563
171     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:70
172     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:210
173     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:6667:6668 dpts:6667:6668
174     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:50945
175     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:4666 dpts:1024:65535
176     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:11235:11238 dpt:22340
177     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:11235:11238
178     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:11239:11267
179     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:27732:27755
180     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:9960 dpt:9960
181     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:9963 dpt:9963
182     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:27960 dpt:27960
183     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:27960 dpt:27950
184     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:27960 dpt:27951
185     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:7777
186     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7808 dpt:7808
187     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7808 dpt:7808
188     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7117 dpt:7117
189     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7117 dpt:7117
190     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7808 dpt:1234
191     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7808 dpt:1234
192     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:33001
193     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:5120:5300 dpt:6121
194     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:5120:5300
195     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:13139 dpt:13139
196     0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:5120:5300 dpts:5120:5300
197    25  1400 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `INTFW: '
198    25  1400 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
199 
200 Chain int-in (1 references)
201  pkts bytes target     prot opt in     out     source               destination
202 69884   98M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
203     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
204 
205 Chain int-int-fw (1 references)
206  pkts bytes target     prot opt in     out     source               destination
207   229 31978 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
208 
209 Chain int-out (1 references)
210  pkts bytes target     prot opt in     out     source               destination
211 36838 2937K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
212     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
213 
214 Chain states (2 references)
215  pkts bytes target     prot opt in     out     source               destination
216     0     0 RETURN     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
217   938 56372 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID,NEW LOG flags 0 level 4 prefix `Unerwuenschte Verbindung: '
218   938 56372 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID,NEW
219 22274   18M RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Es gibt 3 Chains, die die Kette der Firewall repräsentieren, INPUT, FORWARD und OUTPUT. Alle Datenpackete die nur in meine Server rein aber nicht weiter gehen sollen kommen in die INPUT-Chain. Alles was von meinem Server nach draußen geht, egal ob Internet oder lokales Netzwerk, kommt in die OUTPUT-Chain. Und alle Datenpackete die mur meinen Server passieren gelangen in die FORWARD-Chain. Nun habe ich noch eigene Chains definiert um eine feinere Filterung vornehmen zu können.

Beispiel 1: feld-bert sendet eine Namensauflösungs-Anfrage an feld-server (Port 53). Das heißt das Datenpacket geht nur in meinen Server rein und nicht weiter, also kommt es in die INPUT-Chain. In der obigen Ausgabe sind mehrere Spalten zu erkennen unter anderem in und out, was mir Auskunft gibt über die Interfaces welches das Datenpacket passieren muss, damit diese Regel greift. Weitere Kriterien sind die genaue Quell- und Ziel-IP-Adresse, sowie die Port Nummer, die der letzten Spalte rechts entnommen werden kann und natürlich auch das verwendete Protokoll z.b. tcp, udp oder icmp.

Unser Packet durchläuft die regeln von oben nach unten und wird aber erst bei folgender Regel weiter verarbeitet:

20 69884   98M int-in     all  --  br0    *       0.0.0.0/0            0.0.0.0/0

Unser Packet ist über das Interface br0 rein gekommen und will dann zum DNS-Damonen direkt hin, was auch durch das Sternchen abgedeckt wird. Als Quell- und Ziel-IP-Adresse kann auch jede angegeben werden. Alles passt. Die Regeln darüber hatten immer irgendwo nicht gepasst, aber jetzt passt es. Nun wird dieses Packet an die selbst definierte Chain int-in weitergeleitet, die wiederum Regeln enthält. Wenn keine der Regeln der int-in-Chain greifen sollte, also das Paket am Ende der Chain angelangt ist, so wird die default Policy angewendet, in meinem Fall ist die default Policy auf DROP gestellt, daher würde das Paket verworfen werden. Daher habe ich am Ende meiner Chains immer LOG-Regeln die Pakete protokollieren, wenn das Paket auf keines der Regeln passt. Somit weiß ich immer wo der Schuh drückt, wenn mal irgendein Dienst nicht funktioniert und natürlich dient das Loggen zur Überprüfung von Hackern. Das bedeutet das die Reihenfolge der Regeln absolut wichtig sind. Können mehrere Regeln greifen, dann zählt immer die erste Regel die greift. Ein häufig nicht beachteter Punkt.

Da mein Packet nun in die int-in-Chain gelangt ist und die erste Regel dort besagt, das ALLES was hier rein kommt Akzeptiert wird, kann das Packet nun endgültig zum DNS-Daemonen gesendet werden. Für den Fall der Fälle baue ich immer eine DROP-Regel ein, falls ich einen Fehler bei meiner Firewall gemacht habe. Außerdem besagt dies auch gleich, dass Packete die hier rein kommen hier auch enden und nicht wieder in die INPUT-Chain gelangen. Wichtig !!!

Beispiel2: Mein DNS-Server hat das Packet empfangen und will nun drauf antworten. Also schickt er ein Packet and feld-bert zurück. Das Packet soll also aus den Server rauß, daher kommt dieses in die OUTPUT-Chain. Folgende Regel greift in diesem Fall:

48 36838 2937K int-out    all  --  *      br0     0.0.0.0/0            0.0.0.0/0

Das Packet kommt vom lokalen Process/DNS-Daemonen was durch das Sternchen bei der Spalte in abgedeckt wird und will über das Interface br0 wieder rauß. An Protokollen, Quell- und Ziel-IP-Adressen sind alle zugelassen. Somit passt alles mal wieder. Als Target/Aktion wurde eine Weiterleitung an die eigene Chain int-out angegeben. Die int-out regel ist bei läßt alle Packete zu (ACCEPT), falls nicht wird es sofort in der nächsten Regel dieser eigenen Chain verworfen (DROP).

Man kann also zusammengefasst sagen, dass ich meinen lokalen Netzwerkverkehr nicht großartig blockiere, sondern alles zu lasse. Nur was den Verkehr ins Internet oder vom Internet ins lokale Netz betrifft, habe ich strenge Regeln.

Hier noch eine grafische Abbildung meines Netzwerks aus Sicht der Firewall.

Links mein lokales Netzwerk, die hierfür zuständigen Ketten (iptable-Chains) heißen <int-in> und <int-out>. In der Mitte mein Server. Auf der rechten Seite das Internet, die hierfür zuständigen Ketten heißen <ext-in> und <ext-out>. Der Datenweg der direkt durch meinen Server geht, also nur weitergeleitet wird, wird durch die Ketten <ext-fw> und <int-fw> repräsentiert. Eine weitere Besonderheit ist die Kette <int-in-fw>, diese enthält den Datenstrom von meinen PC's zueinander, schließlich sollen sich die Rechner sich ja auch gegenseitig sehen können ohne das meinServer hier mitwirken soll.

DNS Server - BIND 9

/etc/bind/named.conf

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

/etc/bind/named.conf.options

key "rndc-key" {
        algorithm hmac-md5;
        secret Aei1JRlz9M7RhNqEYYsGdg==; };

controls {inet 127.0.0.1 port 953 allow { localhost; } keys { "rndc-key"; }; };

options {
        directory "/var/cache/bind";

        forwarders {
                195.50.140.114;
                195.50.140.252;
        };

        listen-on { 127.0.0.1; 192.168/16; };

        allow-query { 127.0.0.1/32; 192.168.0/24; 192.168.1/24; };
};

Das controls Statement gibt uns Auskunft wie wir Bind über das Administrations-Programm rndc anzusprechen haben. rndc muss also also auf der Konsole des Servers ausgeführt werden, zudem muss Bind über den Port 953 angesprochen werden und zu guter Letzt müssen wir auch noch einen Key angeben. Hier ein Beispiel:

feld-server:~# cd /etc/bind
feld-server:/etc/bind# rndc -s localhost -k rndc.key reload
server reload successful

Eigentlich ist meine Firewall gut genug und wenn man dann noch berücksichtigt, dass mein rndc sowieso nur auf dem Server selber ausgeführt werden kann, dann wäre zu überlegen ob ich auf einen extra Schlüssel für rndc verzichte. Ohne Schlüssel für rndc sehe unser controls-Statement wie folgt aus:

controls {inet 127.0.0.1 allow { localhost; } keys { }; };

Das ausdrückliche Angeben des Ports habe ich auch mal weggelassen, da dieser sowieso Standard ist. Empfohlen wird es nicht den Schlüssel weg zu lassen! Sicher ist sicher, wie meine Freundin sagen würde, aber die macht auch 3 Knoten in ihre Schuhe. :-)

Der Inhalt der Datei rndc.key sieht jedenfalls wie folgt aus:

key "rndc-key" {
        algorithm hmac-md5;
        secret Aei1JRlz9M7RhNqEYYsGdg==; };

Ich nutze also zur Zeit 2 Schlüssel. Einen den nsupdate,DHCP und das Programm BIND für Zonen-Updates nutzt und der zweite für das Administrations-Programm rndc. Den Schlüssel für rndc habe ich wie folgt erstellt:

feld-server:/etc/bind/test# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST $(hostname -d)
Kfeldland.lan.+157+46834

Die Dateien die dabei erzeugt werden, werden später nicht mehr benötigt, nachdem man das Passwort Aei1JRlz9M7RhNqEYYsGdg== in die Datei rndc.key und in die Key-Anweisung in der Datei named.conf.options eingetragen hat.

Noch was zur AllowQuery-Anweisung, hier sollten sowohl die IP-Bereiche des lokalen Netzes, als auch die loopback Adresse eingetragen sein, sonst kann man nur von Client zu Server oder von Server zu Client pingen. Mit unserem obigen Statement können die Clients den Server über seine FQDN anpingen und erhalten eine IP-Adresse zurück und vom Server kann man auch die Client's über ihre FQDN anpingen (FQDN = die Full Qualified Domain Name) und erhält die IP-Adresse des Servers. Ansonsten geht es nur Einseitig.

/etc/bind/named.conf.local

key feldland.lan. {
        algorithm HMAC-MD5.SIG-ALG.REG.INT;
        secret  SNCrjhQV8NiY6bsA5GMIJg==;
};

zone "feldland.lan" {
        type master;
        file "/etc/bind/db.feldland.lan";
        notify yes;
        allow-update { key feldland.lan.; };
        forwarders  {};
};

zone "0.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168.0";
        notify yes;
        allow-update { key feldland.lan.; };
        forwarders {};
};

/etc/bind/db.192.168.0

$ORIGIN .
$TTL 86400      ; 1 day
0.168.192.in-addr.arpa  IN SOA  feld-server.feldland.lan. feldmann_markus.gmx.de. (
                                15         ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      feld-server.feldland.lan.
$ORIGIN 0.168.192.in-addr.arpa.
186                     PTR     feld-server.feldland.lan.
187                     PTR     feld-drizzt.feldland.lan.
188                     PTR     nbb.feldland.lan.
$TTL 7200       ; 2 hours
196                     PTR     feld-bert.feldland.lan.

/etc/bind/db.feldland.lan

$ORIGIN .
$TTL 86400      ; 1 day
feldland.lan            IN SOA  feld-server.feldland.lan. feldmann_markus.gmx.de. (
                                25         ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      feld-server.feldland.lan.
$ORIGIN feldland.lan.
$TTL 7200       ; 2 hours
feld-bert               A       192.168.0.196
                        TXT     "3115fa25750bc8e429a401b9bcd1959433"
$TTL 86400      ; 1 day
feld-drizzt             A       192.168.0.187
feld-server             A       192.168.0.186
feld-test               A       192.168.0.150
nbb                     A       192.168.0.188

/etc/bind/rndc.key

key "rndc-key" {
        algorithm hmac-md5;
        secret Aei1JRlz9M7RhNqEYYsGdg==; };

Hinweis

Unter /etc/bind gibt es jetzt für jede dynamische Zonendatei eine Datei, die auf jnl (=journaling) endet. Diese legt der bind an, um die dynamischen Updates zwischenzuspeichern. Sobald der bind gestoppt wird, schreibt er die Änderungen zurück in die Zonendatei. Um hier Inkonsistenzen zu vermeiden, solltest du niemals bei laufendem Bind das Zonenfile von Hand ändern. Nimm lieber nsupdate dafür.


Einen Host von Hand hinzufügen/löschen

nsupdate -k Kfeldland.lan.+157+34326.private
> update add sql.feldland.lan 86400 IN A 192.168.0.42
> server feld-server
> send
> update add 42.0.168.192.in-addr.arpa 86400 IN PTR sql.feldland.lan
> send
> quit

nsupdate -k Kfeldland.lan.+157+34326.private
> update delete sql.feldland.lan
> server feld-server
> send
> update delete 42.0.168.192.in-addr.arpa
> send
> quit

Das Kommando server feld-server wird dabei in meinem Fall vom Client ausgeführt. Wenn man nsupdate auf dem Server selber ausführen will, gibt man server localhost an, ansonsten könnte ein Fehler erscheinen, dass keine Kommunikation zum Server aufgebaut werden konnte.

DHCP 3 - Server

/etc/dhcp/dhcpd.conf

ddns-update-style interim;
ddns-updates on;
ddns-domainname "feldland.lan";
ddns-rev-domainname "in-addr.arpa.";
update-static-leases true;
deny client-updates;


#Unknown Clients sollen IP bekommen. Bin zu faul hosts zu definieren.
allow unknown-clients;

default-lease-time 14400;
max-lease-time 86400;
authoritative;

key feldland.lan. {
        algorithm HMAC-MD5.SIG-ALG.REG.INT;
        secret SNCrihQV8NjY6bzA5GMJIg==;
};

zone feldland.lan. {
primary 127.0.0.1;
key feldland.lan.;
}

zone 0.168.192.in-addr.arpa. {
primary 127.0.0.1;
key feldland.lan.;
}

subnet 192.168.0.0 netmask 255.255.255.0 {
    allow unknown-clients;
    range 192.168.0.100 192.168.0.200;
    option subnet-mask 255.255.255.0;
    option routers 192.168.0.186;
    option domain-name-servers 192.168.0.186;
    option domain-name "feldland.lan";
}
Hinweis.png Hinweis: In Debian Squeeze liegt die Konfiguration unter /etc/dhcp/ wobei sie bei älteren Versionen noch in einem ähnlich lautendem Verzeichnis liegen kann.


Das Argument des Befehls option routers kann sowohl die IP-Adresse als auch den vollen Domänen-Namen des Servers enthalten. Die Angabe der IP-Adresse hat bei mir fehlerfrei funktioniert im Gegensatz zum Domänen-Namen, hängt aber wahrscheinlich davon ab wie gut die Namensauflösung konfiguriert ist.

Netzwerk allgemein des Servers

/etc/hostname

feld-server

/etc/resolv.conf

domain feldland.lan
nameserver 0.0.0.0
nameserver 195.50.140.114
nameserver 195.50.140.252

Client Einstellungen auf feld-bert

/etc/dhcp/dhclient.conf

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name "feld-bert";
send dhcp-client-identifier 00:1d:92:ab:35:9f;

request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes;

timeout 10;
Hinweis.png Hinweis: In Debian Squeeze liegt die Konfiguration unter /etc/dhcp/ wobei sie bei älteren Versionen noch in einem ähnlich lautendem Verzeichnis liegen kann.


/etc/hostname

feld-bert

/etc/resolv.conf

domain feldland.lan
search feldland.lan
nameserver 192.168.0.186

/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# Client sitzt hinter Router
allow-hotplug eth0
iface eth0 inet dhcp

#Client waehlt sich selber ins DSL-Modem ein
iface dsl-provider inet ppp
    pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf
    provider dsl-provider

Meine Client Konfiguration sieht ein wenig verwirrend aus, aber nicht so verwirrend wie die von meinem Server. Da mein Client-Rechner feld-bert sich bei Problemen/Ausfall meines Servers selber ins Internet einwählen muss, ist es sinnig hierfür vorzusorgen. Hierfür nutze ich die Software NetworkManager die nach Anmeldung des Benutzers alle Schnittstellen aktiviert die mit allow-hotplug gekennzeichnet sind. Wenn also mein Server läuft dann versucht das Programm Networkmanager die Schnittstelle eth0 zu aktivieren, diese fragt bei meinem DHCP-Server nach einer dynamischen IP-Adresse.

Hilfreiche Links

Bind9 Logging