.. _`_bind9_mit_replikation`: *************************** Bind9 mit Replikation, DDNS *************************** Beide VMs sind mit Ubuntu 16.04 LTS ausgestattet und haben folgende wesentliche Eigenschaften: A. Master-Server - Hostname: uhu.dom1.site - IP-Adresse: 10.20.30.3 B. Slave-Server: - Hostname: uhu2.dom1.site - IP-Adresse: 10.20.30.4 HINWEIS: Hier wird man am besten erst einmal mit ``sudo -i`` dauerhaft *root*. .. _`_forwarders`: DNS-Server mit bind9 ==================== Forwarders ---------- Zur Erinnerung: Für die Weiterleitung ins Internet benötigen wir einen vorgeschalteten DNS-Server. Dies kann allgemein bei allen Servern geschehen. Dazu wurde die Direktive *forwarders { 10.20.30.100; 144.76.34.109; };* aktiviert und angepasst: :: options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. forwarders { 10.20.30.100; 144.76.34.109; }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; }; .. _`_master_konfiguration`: Master-Konfiguration -------------------- Hier ist besonders die Zeile *notify yes;* von Belang. Wir haben sie hinzugefügt, um den Slave bei Erhöhung der *serial*-Angabe informieren zu können, dass er sich die Daten replizieren muss: :: => cat /etc/bind/named.conf.local :: zone "dom1.site" { type master; notify yes; file "/etc/bind/db.dom1.site"; }; zone "30.20.10.in-addr.arpa" { type master; notify yes; file "/etc/bind/db.10.20.30"; }; .. AUFGABE: Bitte die Sicherheit mit *allow-transfer* verbesseren! Siehe dazu Seite 319. Im entsprechenden Zonenfile ist es wichtig, den zweiten Nameserver, der als Slave fungieren soll, auch als solchen mit aufzunehmen. Dies wird durch die Zeile *@ IN NS uhu2.dom1.site.* realisiert, die hinzugefügt werden muss. Vergisst man dies, kann sich zwar der Slave die Daten bei einem *systemctl restart bind9* selber ziehen, wird aber nicht vom Master mittels seiner *notify*-Nachrichten über Änderugen informiert: :: => cat /etc/bind/db.dom1.site :: ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA uhu.dom1.site. root.uhu.dom1.site. ( 90 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ; Dies ist der eigene, lokale Master-Nameserver: @ IN NS uhu.dom1.site. ; HINZUGEFÜGT: Dies ist der andere, entfernte Slave-Nameserver: @ IN NS uhu2.dom1.site. uhu IN A 10.20.30.3 uhu IN AAAA ::1 ; Weitere Einträge (ähnlich der /etc/hosts, allerdings ZUERST die Hostnamen, DANN die IPs!) uhu2 IN A 10.20.30.4 xphost IN A 10.20.30.126 xphost2 IN A 10.20.30.127 .. AUFGABE: Bitte auch die reversen Zonenfiles anpassen! .. _`_slave_konfiguration`: Slave-Konfiguration ------------------- Hier ist zuerst einmal wichtig, anzugeben, wer der Master ist, von dem dann die Daten kopiert werden sollen. Das legen wir mit der Anweisung *masters { 10.20.30.3; };* fest: ⇒ cat /etc/bind/named.conf.local :: zone "dom1.site" { type slave; masters { 10.20.30.3; }; file "/etc/bind/db.dom1.site"; }; zone "30.20.10.in-addr.arpa" { type slave; masters { 10.20.30.3; }; file "/etc/bind/db.10.20.30"; }; Dann brauchen wir auch wieder das Zonenfile. Anders als beim Master, wo wir den Slave mittels *NS*-Record eintragen mussten, sind für die Replikation keine besonderen Einstellungen erforderlich: :: => cat /etc/bind/db.dom1.site :: ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA uhu2.dom1.site. root.uhu2.dom1.site. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS uhu2.dom1.site. uhu2 IN A 10.20.30.4 uhu2 IN AAAA ::1 ; Weitere Einträge sind hier auf dem Slave nicht erforderlich, ; da er sich die Datensätze repliziert. .. _`_testing`: Testing ------- - Auf beiden Maschinen: ``tail -f /var/log/syslog`` - Auf dem Master - Datensatz hinzufügen - Seriennummer erhöhen - Config neu laden: ``rndc reload`` .. _`_sicherheit`: Sicherheit ---------- AUF DEM MASTER: Um nur dem Slave-Server mit der Adresse *10.20.30.4* Zonentransfers zu erlauben (AXFR = Asynchronous Full Transfer Zone oder Asynchronous Xfer Full Range), verwenden wir *allow-transfer*: :: zone "dom1.site" { type master; notify yes; allow-transfer { 10.20.30.4; }; file "/etc/bind/db.dom1.site"; }; zone "30.20.10.in-addr.arpa" { type master; notify yes; file "/etc/bind/db.10.20.30"; }; Weiterhin kann man das ganz normale Abfragen der Datenbank (*nslookup*) reglementieren, in der Zonendefinition verwenden wir dazu so etwas: :: allow-query { 127.0.0.1; 10.20.30.0/24; }; .. _`_dhcp_und_dns_verbinden`: DHCP und DNS verbinden (DDNS) ============================= **ZIEL** Einrichtung von dynamischen DNS (DDNS) unter Debian / Ubuntu Siehe auch - https://debian-administration.org/article/343/Configuring_Dynamic_DNS__DHCP_on_Debian_Stable - http://blogging.dragon.org.uk/dns-with-bind9-and-dhcp-on-ubuntu-14-04/ .. _`_vorbereitung`: Vorbereitung ------------ DHCP- und DNS-Server sollten jeweils eingerichtet sein: - DHCP-Server: Deklaration eines Subnets mit gültigem Range - DNS-Server: Bereitstellung einer eigenen Zone für die Domäne "dom1.site", gern auch mit gültigen "forwarders" - Der Servername lautet im Beispiel "uhu" HINWEIS: Die folgende Verzeichnisrecht-Anpassung von */etc/bind/* ist wegen *rndc freeze* und *rndc thaw* (siehe unten) unter Debian erforderlich, wenn der bind-Daemon seine Journaldateien in diesem Verzeichnis ablegen können soll: :: => chmod g+w /etc/bind Besser ist aber im Fall von DDNS, die Zonen unter */var/lib/bind* zu verwalten, zumal wir bei Ubuntu wegen AppArmor dazu gezwungen werden. Die Dateirechte sehen dort im übrigen so aus: :: => ls -ld /etc/bind :: drwxr-sr-x 2 root bind 4096 Okt 30 11:17 /etc/bind Wenn man also plant, die Zonendateien unter */var/lib/bind* abzulegen, ist hier kein Handlungsbedarf. .. _`_datei_etc_bind_named_conf`: Datei /etc/bind/named.conf -------------------------- Unterhalb von *include "/etc/bind/named.conf.options";* ist folgendes einzufügen: :: controls { inet 127.0.0.1 allow {localhost; } keys { "rndc-key"; }; }; .. _`_datei_etc_bind_named_conf_local`: Datei /etc/bind/named.conf.local -------------------------------- Wie eben erläutert, macht es Sinn, die Zonendateien an einen anderen Ort zu legen. In jedem Zonenblock müssen wir nun den Pfad zu den Zonendateien mit Hilfe der "file"-Anweisung auf */var/lib/bind* verbiegen, so dass diese Angaben dann z.B. so lauten könnten: :: ... file "/var/lib/bind/db.dom1.site"; ... file "/var/lib/bind/db.10.20.30"; ... Weiterhin sind in jeden Zonenblock nach der "file"-Anweisung diese Direktiven erforderlich: :: allow-update { key "rndc-key"; }; notify yes; Und schließlich muss am Ende der Datei noch folgendes angefügt werden: :: include "/etc/bind/rndc.key"; Falls die Zonendateien nicht bereits unter */var/lib/bind* erstellt wurden, verschieben wir sie jetzt an diesen Ort: :: => mv /etc/bind/db.dom1.site /etc/bind/db.10.20.30 /var/lib/bind/ .. _`_datei_etc_dhcp_dhcpd_conf`: Datei /etc/dhcp/dhcpd.conf -------------------------- Zuerst muss die Zeile *ddns-update-style none;* auskommentiert werden (Raute-Zeichen voranstellen): :: #ddns-update-style none; Danach fügt man gleich darunter folgendes ein, wobei *server-identifier* (= Servername) und *ddns-domainname* (= Domainname wie im DNS festgelegt) anzupassen sind: :: server-identifier uhu; ddns-updates on; ddns-update-style interim; ddns-domainname "dom1.site."; ddns-rev-domainname "in-addr.arpa."; ignore client-updates; # This is the key so that DHCP can authenticate it's self to BIND9 include "/etc/bind/rndc.key"; # This is the communication zone zone dom1.site. { primary 127.0.0.1; key rndc-key; } .. _`_bei_ubuntu_leserechte_für_rndc_key_via_apparmor_einräumen`: Bei Ubuntu: Leserechte für rndc.key via AppArmor einräumen ---------------------------------------------------------- Bei Ubuntu Server 16.04 LTS sind per Default die Sicherheitspolicies von AppArmor aktiv. Da sich */usr/sbin/named* im enforce-Modus befindet, wird damit auch der Zugriff auf die Datei *rndc.key* blockiert. Daher müssen wir AppArmors Konfigurationsdatei für den *dhcpd* ändern. Wie hier gezeigt, muss die Zeile */etc/dhcp/ddns-keys/\*\* r,* auskommentiert werden, danach ist eine neue Zeile hinzuzufügen, die der Datei */etc/bind/rndc.key* explizit Leserechte verleiht: :: => vi /etc/apparmor.d/usr.sbin.dhcpd :: #/etc/dhcp/ddns-keys/** r, /etc/bind/rndc.key r, Nun müssen nur noch die Dateirechte angepasst und die AppArmor-Policies neu eingelesen werden: :: => chown root:bind /etc/bind/rndc.key => chmod 640 /etc/bind/rndc.key => /etc/init.d/apparmor reload .. _`_testings`: Testings -------- .. _`_serverseitig`: Serverseitig ~~~~~~~~~~~~ Beide Server müssen sich nun ohne größere Fehlermeldungen neu starten lassen: :: => /etc/init.d/bind9 restart => /etc/init.d/isc-dhcp-server restart Existiert bereits ein manuell hinzugefügter Eintrag z.B. für "xpbox" in der Zonendatenbank, findet keine dynamische Erzeugung eines RRs statt, auch wenn dem Host eine neue IP-Adresse via DHCP zugewiesen wird. ACHTUNG: Wenn der Daemon im dynamischen Modus arbeitet (erkennbar am Vorhandensein der *\*.jnl*-Dateien im Verzeichnis */etc/bind*), darf der Zonenverwalter nicht einfach die Zonenfiles ändern!! Erst nach dem Ausführen von :: => rndc freeze kann er dies tun. Nach Beenden des Editierens und einem *rndc reload*, kann die dynamische Arbeitsweise wieder mit :: => rndc thaw gestartet werden, dabei entstehen wieder die Journaldateien. .. _`_clientseitig`: Clientseitig ~~~~~~~~~~~~ Bei Verwendung von TinyCore Linux als Testsystem für den DHCP-Client, kann man auf einfache Weise die IP-Adresse mit :: => udhcpc -R freigeben (release). Das Neubeziehen der IP-Informationen lässt sich problemlos mit der Option *-F * machen, wobei testweise ein anderer FQDN gesendet und in die Zonendatenbank geschrieben wird: :: => udhcpc -F myTinyLinuxHost .. _`_praktische_umsetzung_auf_dem_master_nameserver_ubuntu_16_04`: Praktische Umsetzung auf dem Master-Nameserver (Ubuntu 16.04) ------------------------------------------------------------- **HINWEIS:** Wir betrachten hier nur die für DDNS erforderlichen Einstellungen. Bei Replikation mit einem Slave-Server ist in der Zonendefinition zur Verbesserung der Sicherheit die Einschränkung der Zonentransfers empfehlenswert (Default: *allow-transfer { any; };*). .. _`_konfigurationsdateien_des_nameservers`: Konfigurationsdateien des Nameservers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: => grep -v '//' /etc/bind/named.conf :: include "/etc/bind/named.conf.options"; controls { inet 127.0.0.1 allow {localhost; } keys { "rndc-key"; }; }; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; :: => grep -v '//' /etc/bind/named.conf.options :: zone "dom1.site" { type master; notify yes; allow-update { key "rndc-key"; }; file "/var/lib/bind/db.dom1.site"; }; zone "30.20.10.in-addr.arpa" { type master; notify yes; allow-update { key "rndc-key"; }; file "/var/lib/bind/db.10.20.30"; }; include "/etc/bind/rndc.key"; :: => cat /var/lib/bind/db.dom1.site :: $TTL 604800 @ IN SOA uhu.dom1.site. root.uhu.dom1.site. ( 91 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS uhu.dom1.site. @ IN NS uhu2.dom1.site. uhu IN A 10.20.30.3 uhu IN AAAA ::1 ; Weitere Einträge (ähnlich der /etc/hosts, allerdings ZUERST die Hostnamen, DANN die IPs!) uhu2 IN A 10.20.30.4 xphost IN A 10.20.30.6 :: => cat /var/lib/bind/db.10.20.30 :: $TTL 604800 @ IN SOA uhu.dom1.site. root.uhu.dom1.site. ( 91 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS uhu.dom1.site. 3 IN PTR uhu.dom1.site. 4 IN PTR uhu2.dom1.site. ; Weitere... 4 IN PTR uhu2.dom1.site. 6 IN PTR xphost.dom1.site. .. _`_konfigurationsdateien_des_dhcp_servers`: Konfigurationsdateien des DHCP-Servers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Nach der Installation mittels ``apt-get install isc-dhcp-server`` legt man am besten gleich erst einmal das Listening-Interface fest: :: => tail -1 /etc/default/isc-dhcp-server :: INTERFACES="enp0s3" Dann ist die Hauptkonfigurationsdatei dran: :: => grep -v '^#' /etc/dhcp/dhcpd.conf :: ddns-update-style interim; server-identifier uhu; ddns-updates on; ddns-domainname "dom1.site."; ddns-rev-domainname "in-addr.arpa."; ignore client-updates; include "/etc/bind/rndc.key"; zone dom1.site. { primary 127.0.0.1; key rndc-key; } option domain-name "dom1.site"; option domain-name-servers 10.20.30.3, 10.20.30.4; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 10.20.30.0 netmask 255.255.255.0 { range 10.20.30.10 10.20.30.20; option routers 10.20.30.1; } .. _`_hyperlinks`: Hyperlinks ========== - https://help.ubuntu.com/community/BIND9ServerHowto - https://spin.atomicobject.com/2012/04/03/setting-up-bind9-and-dhcp3-on-ubuntu-with-dynamic-dns/