Wie richte ich einen DNS-Server mit BIND unter Ubuntu 22.04 ein
BIND oder Berkeley Internet Name Domain ist eine freie und quelloffene DNS-Server-Software. Sie ist eine der beliebtesten DNS-Server-Software, die von mehr als 70% der DNS im Internet genutzt wird. BIND gibt es bereits seit den 1980er Jahren und ist bekannt für seine Flexibilität, Leistung und Funktionen. BIND kann sowohl als autoritativer DNS als auch als Caching DNS verwendet werden, unterstützt Load Balancing, dynamische Updates, Split DNS, DNSSEC, IPv6 und vieles mehr.
Die BIND DNS-Software ist einer der zuverlässigsten DNS-Server für Unix-ähnliche Betriebssysteme. Sie ist auf den meisten Linux-Distributionen verfügbar und bietet zusätzliche Tools zur Diagnose und zum Testen des DNS-Servers.
In dieser Anleitung lernst du, wie du einen DNS-Server mit BIND auf einem Ubuntu 22.04 Server installierst. Diese Anleitung zeigt dir, wie du eine Master-Slave BIND DNS Server Installation mit zwei Ubuntu Servern einrichtest.
Voraussetzungen
Bevor du mit dieser Anleitung beginnst, solltest du die folgenden Voraussetzungen erfüllen:
- Zwei Ubuntu 22.04 Server.
- Ein Nicht-Root-Benutzer mit Root-/Administrator-Rechten.
Einrichten des FQDN (Fully Qualified Domain Name)
Bevor du mit der Installation der BIND-Pakete beginnst, musst du sicherstellen, dass der Hostname und der FQDN deines Servers korrekt sind. In dieser Demonstration werden wir zwei Ubuntu-Server mit den folgenden Angaben verwenden:
Hostname IP Address FQDN Used As --------------------------------------------------------- ns1 192.168.5.21 ns1.hwdomain.io BIND Master ns2 192.168.5.22 ns2.hwdomain.io BIND Slave
Melde dich bei jedem Server an und führe den folgenden Befehl aus, um den FQDN (Fully Qualified Domain Name) einzurichten.
Richte den FQDN auf dem Server„ns1“ ein.
sudo hostnamectl set-hostname ns1.hwdomain.io
Richte den FQDN auf dem„ns2„-Server ein.
sudo hostnamectl set-hostname ns2.hwdomain.io
Als nächstes bearbeitest du die Datei„/etc/hosts“ mit dem folgenden Befehl.
sudo nano /etc/hosts
Füge die folgende Konfiguration zu jedem Server hinzu.
192.168.5.21 ns1.hwdomain.io ns1 192.168.5.22 ns2.hwdomain.io ns2
Speichere und schließe die Datei, wenn du fertig bist.
Überprüfe abschließend den FQDN auf jedem Server mit dem folgenden Befehl. Auf dem„ns1„-Server erhältst du den FQDN als„ns1.hwdomain.io„, und auf dem„ns2„-Server erhältst du die Ausgabe„ns2.hwdomain.io„.
sudo hostname -f
Installation von BIND-Paketen
Bind-Pakete sind standardmäßig im Ubuntu Server Repository verfügbar. Jetzt kannst du Bind ganz einfach mit dem Befehl apt auf den Servern „ns1“ und „ns2“ installieren.
Führe den folgenden apt-Befehl aus, um die Ubuntu-Repositories zu aktualisieren und zu aktualisieren.
sudo apt update
Danach installierst du die Bind-Pakete mit dem folgenden Befehl. Gib Y ein, um die Installation zu bestätigen und drücke ENTER, um fortzufahren. Die Installation wird nun gestartet.
sudo apt install bind9 bind9utils bind9-doc dnsutils
Nachdem die Installation von Bind abgeschlossen ist, bearbeite die Konfiguration„/etc/default/named“ mit dem folgenden Befehl.
sudo nano /etc/default/named
In der Zeile„OPTIONS=“ kannst du bestimmte Optionen einstellen, wenn der BIND-Dienst ausgeführt wird. In dieser Demo wirst du Bind nur mit IPv4 laufen lassen, also musst du die„OPTIONS„-Zeile wie unten angegeben einfügen.
OPTIONS="-u bind -4"
Speichere und schließe die Datei, wenn du fertig bist.
Führe nun den folgenden Befehl aus, um den Bind-Dienst„named“ neu zu starten. Überprüfe anschließend den Status des BIND-Dienstes. Du solltest sehen, dass der Bind-Dienst„named“ auf beiden Servern läuft.
sudo systemctl restart named sudo systemctl status named
Einrichten des BIND-Masters
Nachdem du die BIND-Pakete auf den beiden Servern „ns1“ und „ns2“ installiert hast, richtest du den BIND-DNS-Server ein. du richtest den Server „ns1“ als Master des BIND-DNS-Servers ein. Du kannst BIND auf einem einzigen Server betreiben, aber es wird empfohlen, mehrere Server zu verwenden, um den hochverfügbaren DNS-Server einzurichten.
Gehe zurück in die Terminalsitzung des Servers„ns1„.
Führe den folgenden Befehl aus, um die Konfigurationsdatei„/etc/bind/named.conf.options“ zu bearbeiten.
sudo nano /etc/bind/named.conf.options
Füge die folgende Konfiguration in die Datei ein, und zwar ganz oben, vor der Zeile„options {….};„.
Mit dieser Konfiguration erstellst du eine ACL (Access Control List) mit dem Namen„trusted„, die alle vertrauenswürdigen IP-Adressen und Netzwerke in deiner Umgebung einschließt. Außerdem musst du die IP-Adresse des lokalen Servers„ns1“ und die IP-Adresse des sekundären DNS-Servers„ns2“ hinzufügen.
acl "trusted" { 192.168.5.21; # ns1 - or you can use localhost for ns1 192.168.5.22; # ns2 192.168.5.0/24; # trusted networks };
Ändere nun den Abschnitt„options {..};“ wie unten beschrieben.
Im folgenden Beispiel deaktivieren wir die Unterstützung für IPv6, indem wir die Option„listen-on-v6“ auskommentieren, die Rekursion aus der„trusted“ ACL aktivieren und zulassen und den BIND-Dienst auf der spezifischen„ns1“ IP-Adresse„192.168.5.21“ ausführen. Außerdem deaktivieren wir den standardmäßigen Zonentransfer und definieren die spezifischen Forwarder für den BIND DNS-Server auf Google Public DNS„8.8.8.8“ und„8.8.4.4„.
options {
directory „/var/cache/bind“;
//listen-on-v6 { any; }; # disable bind on IPv6
recursion yes; # enables resursive queries
allow-recursion { trusted; }; # allows recursive queries from „trusted“ – referred to ACL
listen-on { 192.168.5.21; }; # ns1 IP address
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
1.1.1.1;
};
};
Speichere und schließe die Datei, wenn du fertig bist.
Führe abschließend den folgenden Befehl aus, um die Konfigurationsdatei„/etc/bind/named.conf.options“ zu prüfen und zu verifizieren. Wenn es keine Ausgabemeldung gibt, ist deine Konfiguration korrekt.
sudo named-checkconf /etc/bind/named.conf.options
Einrichten von Zonen
Nachdem du die Grundkonfiguration des BIND-Masters eingerichtet hast, musst du nun die Zonen für deinen Domainnamen einrichten. Im folgenden Beispiel verwenden wir den Domainnamen„hwdomain.io“ mit den Nameservern„ns1.hwdomain.io“ und„ns2.hwdomain.io„.
Bearbeite die Konfigurationsdatei„/etc/bind/named.local“ mit dem folgenden Befehl.
sudo nano /etc/bind/named.conf.local
In dieser Konfiguration definierst du zwei Zonendateien, die Forward- und die Reverse-Zone für deinen Domainnamen. Die Forward-Zone enthält die Konfiguration, in der deine Domainnamen in die IP-Adresse aufgelöst werden, während die Reverse-Zone die IP-Adresse in den Domainnamen übersetzt.
Im folgenden Beispiel definieren wir die Vorwärtszone„/etc/bind/zones/db.hwdomain.io“ für die Domain„hwdomain.io“ und die Rückwärtszone „/etc/bind/zones/db.192.168.5“.
zone "hwdomain.io" { type master; file "/etc/bind/zones/db.hwdomain.io"; # zone file path allow-transfer { 192.168.5.22; }; # ns2 IP address - secondary DNS }; zone "5.168.192.in-addr.arpa" { type master; file "/etc/bind/zones/db.192.168.5"; # subnet 192.168.5.0/24 allow-transfer { 192.168.5.22; }; # ns2 private IP address - secondary DNS };
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes führst du den folgenden Befehl aus, um ein neues Verzeichnis„/etc/bind/zones“ zu erstellen, in dem du die Konfigurationsdateien für die Zonen speichern wirst.
sudo mkdir -p /etc/bind/zones/
Kopiere dann die Standardkonfiguration der Forward-Zone „/etc/bind/zones/db.hwdomain.io“ und bearbeite die Datei mit dem folgenden Befehl.
sudo cp /etc/bind/db.local /etc/bind/zones/db.hwdomain.io sudo nano /etc/bind/zones/db.hwdomain.io
Ändere den Standard-SOA-Eintrag mit deinem Domainnamen. Außerdem musst du die„Seriennummer“ in den SOA-Einträgen jedes Mal ändern, wenn du Änderungen an der Datei vornimmst, und diese „Seriennummer“ muss mit der des sekundären/untergeordneten DNS-Servers identisch sein.
Dann kannst du NS-Einträge und A-Einträge für deinen DNS-Server definieren. In diesem Beispiel lautet der Nameserver„ns1.hwdomain.io“ mit dem A-Eintrag IP-Adresse„192.168.5.21“ und„ns2.hwdomain.io“ mit dem A-Eintrag des sekundären DNS-Servers IP-Adresse„192.168.5.22„.
Schließlich kannst du weitere Domainnamen definieren. In diesem Beispiel werden wir einen MX-Eintrag (Mail-Handler) für die Domain„hwdomain.io“ definieren, der vom Mailserver„mail.hwdomain.io“ bearbeitet wird. Außerdem definieren wir den Domainnamen„hwdomain.io„, der auf den Server mit der IP-Adresse„192.168.5.100“ aufgelöst wird, und die Subdomain für den Mailserver „mail.hwdomain.io“ auf die Server-IP-Adresse„192.168.5.120„.
; ; BIND data file for the local loopback interface ; $TTL 604800 @ IN SOA ns1.hwdomain.io. admin.hwdomain.io. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ; NS records for name servers IN NS ns1.hwdomain.io. IN NS ns2.hwdomain.io. ; A records for name servers ns1.hwdomain.io. IN A 192.168.5.21 ns2.hwdomain.io. IN A 192.168.5.22 ; Mail handler or MX record for the domain hwdomain.io hwdomain.io. IN MX 10 mail.hwdomain.io. ; A records for domain names hwdomain.io. IN A 192.168.5.100 mail.hwdomain.io. IN A 192.168.5.120
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes kopierst du die Standardkonfigurationsdatei für die Reverse Zone nach„/etc/bind/zones/db.192.168.5“ und bearbeitest die neue Datei mit dem folgenden Befehl.
sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.5 sudo nano /etc/bind/zones/db.192.168.5
Ändere den Standard-SOA-Eintrag mit deinem Domainnamen. Vergiss auch nicht, die„Seriennummer“ im SOA-Eintrag zu ändern.
Lege NS-Einträge für deine DNS-Server fest. Dies sind die gleichen Nameserver, die du in der Forward-Zone verwendet hast.
Zuletzt definierst du die PTR-Einträge für deine Domänennamen. Die Nummer in den PTR-Einträgen ist die letzte Nummer der IP-Adresse. In diesem Beispiel wird der Nameserver„ns1.hwdomain.io“ zur IP-Adresse„192.168.5.21“ aufgelöst, also lautet der PTR-Eintrag„21“ und so weiter für andere Domänennamen.
; ; BIND reverse data file for the local loopback interface ; $TTL 604800 @ IN SOA ns1.hwdomain.io. admin.hwdomain.io. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ; name servers - NS records IN NS ns1.hwdomain.io. IN NS ns2.hwdomain.io. ; PTR Records 21 IN PTR ns1.hwdomain.io. ; 192.168.5.21 22 IN PTR ns2.hwdomain.io. ; 192.168.5.22 100 IN PTR hwdomain.io. ; 192.168.5.100 120 IN PTR mail.hwdomain.io. ; 192.168.5.120
Speichere und schließe die Datei, wenn du fertig bist.
Führe nun den folgenden Befehl aus, um die BIND-Konfigurationen zu überprüfen und stelle sicher, dass du keine Fehlermeldung erhältst.
sudo named-checkconf
Führe dann den folgenden Befehl aus, um die soeben erstellten Zonendateien, die Konfigurationsdatei für die Vorwärts- und die Rückwärtszone, zu prüfen und zu verifizieren. Wenn deine Zonendateien keine Fehler aufweisen, solltest du eine Meldung wie„OK“ sehen. Wenn kein Fehler vorliegt, zeigt dir der Befehl an, in welcher Zeile der Datei ein Fehler aufgetreten ist.
sudo named-checkzone hwdomain.io /etc/bind/zones/db.hwdomain.io sudo named-checkzone 5.168.192.in-addr.arpa /etc/bind/zones/db.192.168.5
Um die Konfiguration des BIND-Masters abzuschließen, führe den folgenden Befehl aus, um den BIND-Dienst neu zu starten und die neuen Änderungen an den Konfigurationen, die du vorgenommen hast, anzuwenden.
sudo systemctl restart named
BIND Slave einrichten
Jetzt hast du die Konfiguration des Master BIND DNS Servers abgeschlossen. Jetzt ist es an der Zeit, den „ns2“-Server als Sekundär- oder Slave-Server des BIND-DNS-Servers einzurichten.
Der Master-Server speichert Zonendateien, die die DNS-Konfiguration deiner Domain enthalten und rekursive oder iterative Abfragen bearbeiten. Der Sekundär-/Slave-DNS-Server speichert DNS-Einträge für eine gewisse Zeit vorübergehend, und diese DNS-Einträge werden automatisch vom Master-BIND-Server übertragen.
Wechsle nun zur Terminalsitzung„ns2“ und beginne mit der Konfiguration des„ns2„-Servers als Secondary/Slave des BIND DNS-Servers.
Führe den folgenden Befehl aus, um die Konfigurationsdatei„/etc/bind/named.conf.options“ zu bearbeiten
sudo nano /etc/bind/named.conf.options
Füge oben in der Zeile die folgende Konfiguration hinzu. Damit wird die gleiche ACL (Access Control List) wie auf dem Master-Server erstellt.
acl "trusted" { 192.168.5.21; # ns1 192.168.5.22; # ns2 - or you can use localhost for ns2 192.168.5.0/24; # trusted networks };
In der Zeile„options {…};“ kannst du die Konfiguration wie folgt ändern. Diese Konfiguration ist immer noch dieselbe wie auf dem Master-BIND-DNS-Server. Der einzige Unterschied ist die Option „listen-on„, die auf die IP-Adresse des Servers„ns2“ festgelegt ist.
options { directory "/var/cache/bind"; //listen-on-v6 { any; }; # disable bind on IPv6 recursion yes; # enables resursive queries allow-recursion { trusted; }; # allows recursive queries from "trusted" - referred to ACL listen-on { 192.168.5.22; }; # ns2 IP address allow-transfer { none; }; # disable zone transfers by default forwarders { 8.8.8.8; 1.1.1.1; }; };
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes bearbeitest du die Konfigurationsdatei„/etc/bind/named.conf.local“ mit dem folgenden Befehl, um den„ns2„-Server als sekundären/slave DNS-Server einzurichten.
sudo nano /etc/bind/named.conf.local
Füge die folgende Konfiguration in die Datei ein. Wie du siehst, definieren wir die Forward- und Reverse-Zonen, aber mit dem„Typ Slave“ und definieren den DNS Master Server„192.168.5.21„. Du brauchst die Zonendatei nicht zu erstellen, da die DNS-Einträge und Daten automatisch vom DNS-Masterserver übertragen und für eine gewisse Zeit auf dem sekundären/Slave-DNS-Server gespeichert werden.
zone "hwdomain.io" { type slave; file "/etc/bind/zones/db.hwdomain.io"; masters { 192.168.5.21; }; # ns1 IP address - master DNS }; zone "5.168.192.in-addr.arpa" { type slave; file "/etc/bind/zones/db.192.168.5"; masters { 192.168.5.21; }; # ns1 IP address - master DNS };
Speichere und schließe die Datei, wenn du fertig bist.
Führe nun den folgenden Befehl aus, um die BIND-Konfiguration zu überprüfen und sicherzustellen, dass alle Konfigurationen korrekt sind. Dann kannst du den BIND-Dienst „named“ auf dem„ns2„-Server neu starten, um die neuen Änderungen zu übernehmen. Damit hast du die Konfiguration auf dem„ns2„-Server als Sekundär-/Slave-Server des BIND DNS-Servers abgeschlossen.
sudo named-checkconf sudo systemctl restart named
Führe abschließend den folgenden Befehl aus, um den BIND-Dienst„named“ auf dem„ns2„-Server zu überprüfen und zu verifizieren. Vergewissere dich, dass der„named„-Dienst läuft.
sudo systemctl status named
Überprüfung des DNS-Servers vom Client-Rechner aus
Auf dem Client-Rechner gibt es mehrere Möglichkeiten, den DNS-Resolver einzurichten. Du kannst den DNS-Resolver über den NetworkManager oder über die Netzplan-Konfiguration einrichten. Am einfachsten ist es jedoch, den DNS-Resolver manuell in der Datei „/etc/resolv.conf“ einzurichten. Damit kannst du einen statischen DNS-Resolver für die Client-Rechner einrichten.
Führe den folgenden Befehl aus, um die Standard-Linkdatei„/etc/resolv.conf“ zu entfernen und erstelle eine neue Datei mit dem Editor nano.
sudo unlink /etc/resolv.conf sudo nano /etc/resolv.conf
Füge die folgende Konfiguration in die Datei ein. In der folgenden Konfiguration definieren wir drei verschiedene Resolver: den BIND DNS Master, den sekundären BIND DNS Server und den öffentlichen Google DNS Resolver. Wenn der Client-Rechner Informationen über den Domänennamen anfordert, werden die Informationen vom DNS-Resolver übernommen, von oben nach unten.
nameserver 192.168.5.21 nameserver 192.168.5.22 nameserver 8.8.8.8 search hwdomain.io
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes führst du den unten stehenden Befehl aus, um ein DNS-Dienstprogramm auf deinem Client-Rechner zu installieren. In diesem Beispiel ist der Client-Rechner ein Ubuntu-System, also installieren wir das DNS-Dienstprogramm mit dem Befehl apt wie unten beschrieben.
sudo apt install dnsutils bind9-utils
Nachdem du das DNS-Dienstprogramm auf deinem System installiert hast, kannst du damit beginnen, alle DNS-Einträge auf dem Client-Rechner zu überprüfen.
Führe den Befehl dig aus, um die Domänennamen„hwdomain.io“ und„mail.hwdomain.io“ zu überprüfen. Du solltest sehen, dass„hwdomain.io“ auf die Server-IP-Adresse„192.168.5.100“ aufgelöst wird, während die Sub-Domain„mail.hwdomain.io“ von der Server-IP-Adresse„192.168.5.120“ verwaltet wird.
dig hwdomain.io +short dig hwdomain.io
dig mail.hwdomain.io +short dig mail.hwdomain.io
Als Nächstes führst du den Befehl dig aus, um den Mail-Handler für den Domainnamen „hwdomain.io“ zu überprüfen. Du solltest die Ausgabe erhalten, dass„mail.hwdomain.io“ die Mails für die Hauptdomain„hwdomain.io“ bearbeitet.
dig hwdomain.io MX +short dig hwdomain.io MX
Jetzt kannst du auch die Konfiguration der Reverse Zone für deinen Domainnamen mit dem Befehl nslookup überprüfen.
Führe den unten stehenden nslookup-Befehl aus, um die Reverse-DNS für einige IP-Adressen zu überprüfen und zu verifizieren.
Jetzt solltest du sehen, dass die IP-Adresse„192.168.5.21“ auf den Nameserver„ns1.hwdomain.io“ umgepolt ist, die IP-Adresse„192.168.5.22“ auf den Nameserver„ns2.hwdomain.io„, die IP-Adresse„192.168.5.100“ auf den Hauptdomainnamen„hwdomain.io“ und schließlich die IP-Adresse„192.168.5.120“ auf die Subdomain„mail.hwdomain.io“ umgepolt.
nslookup 192.168.5.21 nslookup 192.168.5.22 nslookup 192.168.5.100 nslookup 192.168.5.120
Fazit
Herzlichen Glückwunsch! In diesem Tutorial hast du die Installation und Konfiguration des BIND DNS Servers auf Ubuntu 22.04 Servern gelernt. Du hast den Master-Slave BIND DNS Server erfolgreich auf zwei verschiedenen Ubuntu Servern konfiguriert. Außerdem hast du die grundlegenden Befehle Dig und Nslookup gelernt, mit denen du die DNS-Einträge und die Konfiguration prüfen und verifizieren kannst.