DDNS, DHCP und Firewall (mit Beispiel)

Aus DebianforumWiki

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

Review.png Review: Dieser Artikel ist für das Review freigegeben.


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


Inhaltsverzeichnis

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:

  1. 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:

  1. 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

Meine Werkzeuge