!!! ACHTUNG - evtl. veraltet - ACHTUNG !!!

Diese Seite wurde zuletzt am 9. Juli 2014 um 10:57 Uhr geändert.

Der virtuelle Server, der DNS anbieten soll, soll einen DNS-Server auf einem eigenen loopback-Device und einen DNS-Cache auf der eigentlichen IP-Adresse beherbergen.

Die anderen virtuellen Server richten Ihre Anfragen dann an den DNS-Cache, welcher sowohl das interne Netz als auch das Internet cached.

in der Konfiguration (/etc/vservers/…) des Hosts folgende Dateien mit darunter stehendem Inhalt anlegen:

/apps/init/runlevel:

 3

/apps/init/style:

 plain

djbdns installieren:

 aptitude install djbdns
 adduser --system --ingroup nogroup --home /var/log/dns --no-create-home dnslog
 adduser --system --ingroup nogroup --home /etc/dnscache --no-create-home dnscache
 adduser --system --ingroup nogroup --home /etc/tinydns --no-create-home tinydns

tinydns konfigurieren:

 tinydns-conf tinydns dnslog /etc/tinydns 127.0.0.1
 cd /service/tinydns/root
 ./add-ns vserver.lan 127.0.0.1
 ./add-ns 10.in-addr.arpa 127.0.0.1
 ./add-mx vserver.lan 10.0.0.25
 ./add-host server.vserver.lan 10.0.0.10
 ./add-host php.vserver.lan 10.0.0.80
 ./add-alias www.vserver.lan 10.0.0.80
 [[...]]
 make
 ln -s /etc/tinydns /etc/service

und gleich weiter mit dem dnscache:

 dnscache-conf dnscache dnslog /etc/dnscache 10.0.0.53
 echo 127.0.0.1 > /etc/dnscache/root/servers/vserver.lan
 echo 127.0.0.1 > /etc/dnscache/root/servers/10.in-addr.arpa
 echo 1 > /etc/dnscache/env/FORWARDONLY
 touch /etc/dnscache/root/ip/10
 ln -s /etc/dnscache /etc/service

mit folgendem Befehl kann man gucken, wie lange die Dienste laufen (wenn sie immer nur ein paar Sekunden laufen, stimmt etwas nicht):

 svstat /service/tinydns

oder

 svstat /service/dnscache

wenn dann noch eine Auflösung erfolgreich ist:

 dnsip www.vserver.lan
 10.0.0.80
 dnsip www.heise.de
 193.99.144.85
 dnsip www
 www.vserver.lan 10.0.0.80
 dnsqr a php.vserver.lan
 1 php.vserver.lan:
 50 bytes, 1+1+0+0 records, response, noerror
 query: 1 php.vserver.lan
 answer: php.vserver.lan 86223 A 10.0.0.80

kann er in die Datei „/etc/resolv.conf“ der anderen virtuellen Server eingetragen werden:

 search vserver.lan
 nameserver 10.0.0.53

Möchte man zwei „primäre“ DNS-Server auf Basis von djbdns anbieten, könnte man sie wie folgt untereinander abgleichen…

Zusätzliche Pakete installieren:

 aptitude install incron openssh-server rsync
 echo "root" > /etc/incron.allow

… passwortfreies Login per Schlüssel als root nur vom anderen DNS-Server einrichten (ssh-keygen, ssh-coppy-id, /etc/hosts.deny, /etc/hosts.allow,…)…

/usr/local/sbin/tinydns-rsync-data:

 #!/bin/bash
 # dependencies:
 # - incron (/etc/tinydns/root IN_MOVED_TO,IN_CLOSE_WRITE /usr/local/sbin/tinydns-rsync-data $#)
 # - ip
 # - rsync
 # - ssh (as root, without password, only from the other nameserver!)
 # - make
 # simple configuration
 DIR="/etc/tinydns/root/"
 FILE="data"
 LOG="/var/log/dns/edit_rsync_make_data.log"
 # functions
 mylog() {
   [[|-n "$1" ]] && echo -e "$( date +"%Y %m %d %H %M %S" ) - $1" >> "$LOG"
 }
 # simple checks
 ## expect exactly one parameter!
 [[|$# -eq 1 ]] || {
   mylog "wrong call of $0... TERMINATING!\n- - - - - - - - - - - - - - - - - - - - - - - - -"
   exit 1
 }
 ## do nothing, if the the affected file ist not "data"!
 [[|"$1" = "data" ]] || exit 0
 mylog "/etc/tinydns/root/data was changed! starting roll out changes..."
 # identify ip of the other nameserver
 case "$( ip addr )" in
   *10.0.0.22* ) REMOTE_IP="10.0.0.23" ;;
   *10.0.0.23* ) REMOTE_IP="10.0.0.22" ;;
 esac
 mylog "the ip of my twin was set to $REMOTE_IP..."
 # rsyncing (the "reverse"-rsync has nothing to do and will not trigger this script!)
 rsync -aze ssh "$DIR$FILE" "$REMOTE_IP:$DIR$FILE"
 mylog "rsync with my twin done..."
 # aktivate changes on both nameservers
 cd "$DIR"
 make
 mylog "data.cdb was updated..."
 mylog "done!\n- - - - - - - - - - - - - - - - - - - - - - - - -"
 exit 0

Neue inotify-Regel per „incrontab -e“ hinzufügen

 /etc/tinydns/root IN_MOVED_TO,IN_CLOSE_WRITE /usr/local/sbin/tinydns-rsync-data $#

(/etc/tinydns/root/data direkt überwachen läuft ins Leere, weil Tools wie rsync, Editoren, /usr/bin/tinydns-edit erst in eine andere Datei schreiben, die alte löschen und die neue in die alte umbenennen, was zu dann zu einem einem „inotify-IGNORE“ führen würde!)

Einen der beiden DNS-Server wie gewohnt pflegen und glücklich sein!