DDNS, DHCP und Firewall (mit Beispiel)

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Wiki ‹ Internetrouter 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:

feld-server:~/bin# iptables -L -v -n
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 LOG        all  --  !lo    *       127.0.0.1            0.0.0.0/0           LOG flags 0 level 4 prefix `Loopback gespooft: '
    0     0 DROP       all  --  !lo    *       127.0.0.1            0.0.0.0/0
    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: '
    0     0 REJECT     tcp  --  !lo    *       0.0.0.0/0            0.0.0.0/0           tcp dpt:113 reject-with icmp-port-unreachable
   16  2499 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
 1428  123K states     all  --  ppp0   *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp spts:137:139
    0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp dpts:137:139
    0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp spts:137:139
    0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp dpts:137:139
    1    48 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 0
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 3
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 11
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 12
  490 66358 dsl-in     all  --  ppp0   *       0.0.0.0/0            0.0.0.0/0
69884   98M int-in     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `INPUT: '
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 LOG        all  --  !lo    *       127.0.0.1            0.0.0.0/0           LOG flags 0 level 4 prefix `Loopback gespooft: '
    0     0 DROP       all  --  !lo    *       127.0.0.1            0.0.0.0/0
21784   18M states     all  --  ppp0   *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp spts:137:139
    0     0 DROP       udp  --  *      *       188.96.76.70         0.0.0.0/0           udp dpts:137:139
    0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp spts:137:139
    0     0 DROP       tcp  --  *      *       188.96.76.70         0.0.0.0/0           tcp dpts:137:139
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 0
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 3
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 11
21784   18M ext-fw     all  --  ppp0   br0     0.0.0.0/0            0.0.0.0/0
18777 3854K int-fw     all  --  br0    ppp0    0.0.0.0/0            0.0.0.0/0
  229 31978 int-int-fw  all  --  br0    br0     0.0.0.0/0            0.0.0.0/0
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `FORWARD: '
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   16  2499 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
   20  8782 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
  496 37741 dsl-out    all  --  *      ppp0    0.0.0.0/0            0.0.0.0/0
36838 2937K int-out    all  --  *      br0     0.0.0.0/0            0.0.0.0/0
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `OUTPUT: '
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain dsl-in (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0              0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     udp  --  *      *       0.0.0.0              0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
  243 30959 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
  247 35399 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:21 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:20 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:443 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4666
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4666
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4662
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4662
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `DSLIN: '
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain dsl-out (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0             tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0             udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
  244 18252 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
  252 19489 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:21
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:20 flags:!0x17/0x02
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:443
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:6667:6668 dpts:6667:6668
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:4666 dpts:1024:65535
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `DSLOUT: '
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain ext-fw (1 references)
 pkts bytes target     prot opt in     out     source               destination
  207 15732 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0              0.0.0.0/0           tcp spt:53 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0              0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.114       0.0.0.0/0           tcp spt:53 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       195.50.140.114       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       195.50.140.252       0.0.0.0/0           tcp spt:53 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       195.50.140.252       0.0.0.0/0           udp spt:53 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:21 dpts:1024:65535 flags:!0x17/0x02
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:20 dpts:1024:65535
  779  165K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535 flags:!0x17/0x02
15753   14M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 dpts:1024:65535
 5045 3541K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:443 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:25 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:465 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:110 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:995 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:143 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:993 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:119 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:563 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:70 dpts:1024:65535
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:210 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4666
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4666
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:4662
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:4662
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:11235:11238 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:56158 dpt:56158
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:11239:11267 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:27732:27755 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:9963 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7808 dpt:7808
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7808 dpt:7808
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7117 dpt:7117
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7117 dpt:7117
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:1234 dpt:7808
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `EXTFW: '
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain int-fw (1 references)
 pkts bytes target     prot opt in     out     source               destination
  210 15960 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:123 dpt:123
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0             tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0             udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.114      tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.114      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            195.50.140.252      tcp spts:1024:65535 dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            195.50.140.252      udp spts:1024:65535 dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:21
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:20 flags:!0x17/0x02
  702  144K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpts:1024:65535
13744 2335K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:80
 4096 1358K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:443
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:25
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:465
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:110
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:995
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:143
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:993
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:119
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:563
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:70
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:210
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:6667:6668 dpts:6667:6668
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:50945
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:4666 dpts:1024:65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:11235:11238 dpt:22340
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:11235:11238
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:11239:11267
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:27732:27755
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:9960 dpt:9960
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:9963 dpt:9963
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:27960 dpt:27960
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:27960 dpt:27950
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:27960 dpt:27951
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:7777
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7808 dpt:7808
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7808 dpt:7808
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7117 dpt:7117
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7117 dpt:7117
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:7808 dpt:1234
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:7808 dpt:1234
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpt:33001
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:5120:5300 dpt:6121
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:1024:65535 dpts:5120:5300
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:13139 dpt:13139
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spts:5120:5300 dpts:5120:5300
   25  1400 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `INTFW: '
   25  1400 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain int-in (1 references)
 pkts bytes target     prot opt in     out     source               destination
69884   98M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain int-int-fw (1 references)
 pkts bytes target     prot opt in     out     source               destination
  229 31978 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain int-out (1 references)
 pkts bytes target     prot opt in     out     source               destination
36838 2937K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain states (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
  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: '
  938 56372 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID,NEW
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:

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:

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