Dieses Tutorial zeigt Ihnen, wie Sie einen lokalen DNS-Resolver unter Ubuntu 20.04 mit der weit verbreiteten BIND9-DNS-Software einrichten. Ein DNS-Resolver ist unter vielen Namen bekannt, von denen einige unten aufgeführt sind. Sie beziehen sich alle auf dasselbe.
- vollständiger Resolver (im Gegensatz zum Stub-Resolver)
- DNS-Rekursor
- rekursiver DNS-Server
- rekursiver Resolver
Beachten Sie auch, dass ein DNS-Server auch als Nameserver bezeichnet werden kann. Beispiele für DNS-Resolver sind 8.8.8.8 (öffentlicher Google-DNS-Server) und 1.1.1.1 (öffentlicher Cloudflare-DNS-Server). Das Betriebssystem auf Ihrem Computer verfügt ebenfalls über einen Resolver, obwohl er aufgrund seiner begrenzten Fähigkeiten Stub-Resolver genannt wird. Ein Stub-Resolver ist ein kleiner DNS-Client auf dem Computer des Endbenutzers, der DNS-Anfragen von Anwendungen wie Firefox empfängt und Anfragen an einen rekursiven Resolver weiterleitet. Fast jeder Resolver kann DNS-Antworten zwischenspeichern, um die Leistung zu verbessern, daher werden sie auch als Cache-DNS-Server bezeichnet.
Warum einen eigenen lokalen DNS-Resolver ausführen
Normalerweise verwendet Ihr Computer oder Router den DNS-Resolver Ihres Internetdienstanbieters, um DNS-Namen abzufragen. Warum also einen lokalen DNS-Resolver ausführen?
- Es kann DNS-Lookups beschleunigen, da der lokale DNS-Resolver nur Ihre DNS-Anfragen abhört und nicht auf die DNS-Anfragen anderer Personen antwortet, sodass Sie eine viel höhere Chance haben, DNS-Antworten direkt aus dem Cache des Resolvers zu erhalten. Die Netzwerklatenz zwischen Ihrem Computer und dem DNS-Resolver wird eliminiert (nahezu null), sodass DNS-Abfragen schneller an Root-DNS-Server gesendet werden können.
- Wenn Sie einen Mailserver betreiben und DNS-Blacklists (DNSBL) verwenden, um Spam zu blockieren, sollten Sie Ihren eigenen DNS-Resolver ausführen, da einige DNS-Blacklists wie URIBL Anfragen von öffentlichen DNS-Resolvern ablehnen.
- Wenn Sie Ihren eigenen VPN-Server auf einem VPS (Virtual Private Server) betreiben, empfiehlt es sich auch, einen DNS-Resolver auf demselben VPS zu installieren.
- Möglicherweise möchten Sie auch Ihren eigenen DNS-Resolver ausführen, wenn Sie nicht möchten, dass Ihr Internet-Browserverlauf auf einem Drittanbieter-Server gespeichert wird.
Wenn Sie eine Website besitzen und möchten, dass Ihr eigener DNS-Server die Namensauflösung für Ihren Domainnamen übernimmt, anstatt den DNS-Server Ihres Domain-Registrars zu verwenden, müssen Sie einen autoritativen DNS-Server einrichten, der sich von einem DNS-Resolver unterscheidet. BIND kann gleichzeitig als autoritativer DNS-Server und als DNS-Resolver fungieren, aber es ist eine gute Praxis, die beiden Rollen auf verschiedenen Rechnern zu trennen .
Dieses Tutorial zeigt, wie Sie einen lokalen DNS-Resolver einrichten, und da er auf dem lokalen Host/lokalen Netzwerk verwendet wird, ist keine Verschlüsselung (DNS über TLS oder DNS über HTTPS) erforderlich. Das Einrichten eines DoT-Resolvers oder DoH-Resolvers wird in einem zukünftigen Artikel besprochen.
Hinweis :Local
bedeutet nicht Ihren Heimcomputer. Vielmehr bedeutet dies, dass der DNS-Resolver auf derselben Box wie der DNS-Client ausgeführt wird. Sie können den BIND DNS-Resolver auf Ihrem Heimcomputer installieren. Es ist lokal auf Ihrem Heimcomputer. Sie können den BIND DNS-Resolver auf einem Cloud-Server installieren und er ist lokal auf dem Cloud-Server.
Lokalen DNS-Resolver auf Ubuntu 20.04 mit BIND9 einrichten
BIND (Berkeley Internet Name Domain) ist eine Open-Source-DNS-Serversoftware, die aufgrund ihrer Stabilität und hohen Qualität unter Unix/Linux weit verbreitet ist. Es wurde ursprünglich von der UC Berkeley entwickelt und später im Jahr 1994 an das Internet Systems Consortium, Inc (ISC) übertragen.
Führen Sie den folgenden Befehl aus, um BIND 9 auf Ubuntu 20.04 aus dem Standard-Repository zu installieren. BIND 9 ist die aktuelle Version und BIND 10 ist ein totes Projekt.
sudo apt update sudo apt install bind9 bind9utils bind9-dnsutils bind9-doc bind9-host
Version prüfen.
named -v
Beispielausgabe:
BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>
Führen Sie
aus, um die Versionsnummer und die Build-Optionen zu überprüfennamed -V
Standardmäßig startet BIND automatisch nach der Installation. Sie überprüfen seinen Status mit:
systemctl status named
Wenn es nicht läuft, starten Sie es mit:
sudo systemctl start named
Und aktivieren Sie den automatischen Start beim Booten:
sudo systemctl enable named
Der BIND-Server wird als bind
ausgeführt Benutzer, der während der Installation erstellt wird und auf TCP- und UDP-Port 53 lauscht, wie Sie sehen können, wenn Sie den folgenden Befehl ausführen:
sudo netstat -lnptu | grep named
Normalerweise werden DNS-Anfragen an den UDP-Port 53 gesendet. Der TCP-Port 53 ist für Antwortgrößen größer als 512 Byte.
Der BIND-Daemon heißt named . (Ein Daemon ist eine Software, die im Hintergrund läuft.) Der named
Binary wird von bind9
installiert Paket und es gibt eine weitere wichtige Binärdatei:rndc
, der Remote-Name-Daemon-Controller, der von bind9utils
installiert wird Paket. Der rndc
Binary wird verwendet, um andere Aspekte des BIND-Daemons neu zu laden/zu stoppen und zu steuern. Die Kommunikation erfolgt über den TCP-Port 953.
Beispielsweise können wir den Status des BIND-Nameservers überprüfen.
sudo rndc status
Konfigurationen für einen lokalen DNS-Resolver
/etc/bind/
ist das Verzeichnis, das Konfigurationen für BIND enthält.
- named.conf :die primäre Konfigurationsdatei, die Konfigurationen von drei anderen Dateien enthält.
- db.127 :Localhost-IPv4-Reverse-Mapping-Zonendatei.
- db.local :localhost leitet IPv4- und IPv6-Mapping-Zonendatei weiter.
- db.leer :eine leere Zonendatei
Das bind9-Paket auf Ubuntu 20.04 wird nicht mit einem db.root
ausgeliefert -Datei verwendet es jetzt die Root-Hinweisdatei unter /usr/share/dns/root.hints
. Die Root-Hinweise Datei wird von DNS-Resolvern verwendet, um Root-DNS-Server abzufragen. Es gibt 13 Gruppen von Root-DNS-Servern, von a.root-servers.net
zu m.root-servers.net
.
Standardmäßig bietet der BIND9-Server auf Ubuntu rekursive Dienste nur für Localhost- und lokale Netzwerkclients. Anfragen von außen werden abgelehnt. Sie müssen also die Konfigurationsdateien nicht bearbeiten. Um Sie mit BIND 9-Konfigurationen vertraut zu machen, zeige ich Ihnen, wie Sie den Rekursionsdienst trotzdem aktivieren.
Die Haupt-BIND-Konfigurationsdatei /etc/bind/named.conf
bezieht die Einstellungen aus 3 anderen Dateien.
- /etc/bind/named.conf.options
- /etc/bind/named.conf.local
- /etc/bind/named.conf.default-zones
Um den Rekursionsdienst zu aktivieren, bearbeiten Sie die erste Datei.
sudo nano /etc/bind/named.conf.options
In den options
Klausel, fügen Sie die folgenden Zeilen hinzu. Ersetzen Sie IP-Adressen in allow-recursion
Anweisung mit Ihren eigenen lokalen Netzwerkadressen.
// hide version number from clients for security reasons. version "not currently available"; // optional - BIND default behavior is recursion recursion yes; // provide recursion service to trusted clients only allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; }; // enable the query log querylog yes;
Speichern und schließen Sie die Datei. Testen Sie dann die Syntax der Konfigurationsdatei.
sudo named-checkconf
Wenn der Test erfolgreich ist (angezeigt durch eine stille Ausgabe), starten Sie BIND9 neu.
sudo systemctl restart named
Wenn auf dem BIND-Server eine UFW-Firewall läuft, müssen Sie Port 53 öffnen, damit LAN-Clients DNS-Anfragen senden können.
sudo ufw allow in from 192.168.0.0/24 to any port 53
Dadurch werden TCP- und UDP-Port 53 zum privaten Netzwerk 192.168.0.0/24 geöffnet. Dann können wir von einem anderen Computer im selben LAN aus den folgenden Befehl ausführen, um den A-Eintrag von google.com abzufragen. Ersetzen Sie 192.168.0.102 durch die IP-Adresse Ihres BIND-Resolvers.
dig A google.com @192.168.0.102
Überprüfen Sie nun auf dem BIND-Resolver das Abfrageprotokoll mit dem folgenden Befehl.
sudo journalctl -eu named
Dies zeigt die neueste Protokollnachricht der bind9-Serviceeinheit. Ich habe die folgende Zeile im Protokoll gefunden, die darauf hinweist, dass eine DNS-Abfrage für den A-Eintrag von google.com von Port 57806 von 192.168.0.103 empfangen wurde.
named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)
Festlegen des Standard-DNS-Resolvers auf Ubuntu 20.04-Server
Systemd-resolved stellt den Stub-Resolver auf Ubuntu 20.04 bereit. Wie am Anfang dieses Artikels erwähnt, ist ein Stub-Resolver ein kleiner DNS-Client auf dem Computer des Endbenutzers, der DNS-Anfragen von Anwendungen wie Firefox empfängt und Anfragen an einen rekursiven Resolver weiterleitet.
Der standardmäßige rekursive Resolver kann mit diesem Befehl angezeigt werden.
systemd-resolve --status
Hinweis:Wenn der obige Befehl nicht sofort beendet wird, können Sie ihn durch Drücken der Q-Taste beenden.
Wie Sie sehen können, ist BIND nicht die Standardeinstellung. Wenn Sie den folgenden Befehl auf dem BIND-Server ausführen,
dig A facebook.com
Diese DNS-Abfrage kann nicht im BIND-Protokoll gefunden werden. Stattdessen müssen Sie dig explizit anweisen, BIND zu verwenden.
dig A facebook.com @127.0.0.1
Um BIND als Standard-Resolver festzulegen, öffnen Sie die systemd-aufgelöste Konfigurationsdatei.
sudo nano /etc/systemd/resolved.conf
Im [Resolve]
Abschnitt, fügen Sie die folgende Zeile hinzu. Dadurch wird ein globaler DNS-Server für Ihren Server eingerichtet.
DNS=127.0.0.1
Speichern und schließen Sie die Datei. Starten Sie dann den vom System aufgelösten Dienst neu.
sudo systemctl restart systemd-resolved
Führen Sie nun den folgenden Befehl aus, um den Standard-DNS-Resolver zu überprüfen.
systemd-resolve --status
Führen Sie nun eine DNS-Abfrage durch, ohne 127.0.0.1
anzugeben .
dig A facebook.com
Sie sehen die DNS-Abfrage im BIND-Protokoll, was bedeutet, dass BIND jetzt der standardmäßige rekursive Resolver ist. Wenn Sie im BIND-Protokoll keine Abfragen sehen, müssen Sie möglicherweise einen Per-Link-DNS-Server konfigurieren.
Per-Link-DNS-Server auf Ubuntu 20.04 konfigurieren
Sie können auch einen Per-Link-DNS-Server konfigurieren, der den globalen DNS-Server überschreibt. Es gibt zwei Möglichkeiten, Per-Link-DNS-Server zu konfigurieren:
- über systemd-resolved
- über Netzplan
systemd-aufgelöst
Dateien unter /etc/systemd/network/
auflisten Verzeichnis.
ls /etc/systemd/network/
Beispielausgabe:
05-eth0.network 99-default.link
Wie Sie sehen können, habe ich zwei Verbindungskonfigurationsdateien. Das 05-eth0.network
Datei ist für meine Hauptnetzwerkschnittstelle, also bearbeite ich diese Datei.
sudo nano /etc/systemd/network/05-eth0.network
Ihr Dateiname könnte anders sein. Wenn sich in diesem Verzeichnis keine Dateien befinden, wird Ihre Per-Link-DNS-Konfiguration nicht von systemd-resolved
gesteuert .
Kommentieren Sie den standardmäßigen DNS- und Domäneneintrag aus und fügen Sie Ihren eigenen DNS-Eintrag hinzu.
DNS=127.0.0.1
Speichern und schließen Sie die Datei. Starten Sie dann systemd-resolved
neu und systemd-networkd
Dienst.
sudo systemctl restart systemd-resolved systemd-networkd
Netzplan
Einige Ubuntu-Server verwenden möglicherweise netplan, um Per-Link-Networking zu konfigurieren. In diesem Fall müssen Sie den DNS-Server in .yaml
konfigurieren Datei unter /etc/netplan/
Verzeichnis. Dateien in diesem Verzeichnis auflisten.
ls /etc/netplan/
Beispielausgabe:
01-netcfg.yaml
Also bearbeite ich diese Datei.
sudo nano /etc/netplan/01-netcfg.yaml
Stellen Sie die DNS-Serveradresse in den nameservers
ein Abschnitt.
nameservers: search: [ invalid ] addresses: - 127.0.0.1
Sie können mehrere DNS-Resolver wie unten angeben, wodurch die Wahrscheinlichkeit eines DNS-Ausfalls verringert werden kann.
nameservers: search: [ invalid ] addresses: - 127.0.0.1 - 8.8.8.8 - 1.1.1.1
Speichern und schließen Sie die Datei. Wenden Sie dann die Änderung an.
sudo netplan apply
Hinweis: Wenn Sie die folgende Fehlermeldung sehen, kann netplan die Konfigurationsdatei nicht verarbeiten.
Invalid YAML at /etc/netplan/01-netcfg.yaml inconsistent indentation
Sie sollten die inkonsistente Einrückung beheben und sudo netplan apply
ausführen Befehl erneut.
Fehlerbehebung
Überprüfen Sie den Inhalt von /etc/resolv.conf
.
cat /etc/resolv.conf
Wie Sie sehen können, ist 127.0.0.1 (BIND) der Standard-DNS-Resolver. Wenn Sie einen anderen Wert sehen, bedeutet dies, dass BIND immer noch nicht Ihr Standard-DNS-Resolver ist. Sie können das Dienstprogramm resolveconf verwenden, um BIND als Standard-Resolver festzulegen.
Installieren Sie die resolvconf
Paket
sudo apt install resolvconf
Starten Sie dann die named-resolvconf
Dienst.
sudo systemctl start named-resolvconf.service
Autostart beim Booten aktivieren.
sudo systemctl enable named-resolvconf.service
Prüfen Sie nun die /etc/resolv.conf
Datei erneut. BIND sollte jetzt der Standard-DNS-Resolver auf Ihrem Ubuntu-Server sein.
cat /etc/resolv.conf
Beachten Sie, dass einige Hosting-Anbieter wie Linode möglicherweise einen Netzwerkhelfer verwenden, um die /etc/resolv.conf
automatisch zu generieren Datei. Um den Standard-DNS-Resolver zu ändern, müssen Sie diesen Netzwerkhelfer in der Hosting-Systemsteuerung deaktivieren.
Wenn diese Methode immer noch nicht funktioniert, liegt es vielleicht daran, dass die /etc/resolv.conf
Datei auf Ihrem Ubuntu-Server ist kein symbolischer Link zu /run/resolvconf/resolv.conf
. Sie müssen die /etc/resolv.conf
löschen Datei und erstellen Sie einen symbolischen Link.
sudo rm /etc/resolv.conf sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
Sie können diese Datei auch manuell erstellen und schreibgeschützt machen, um zu verhindern, dass sie von anderen Anwendungen auf demselben Server überschrieben wird.
sudo rm /etc/resolv.conf echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf sudo chmod 444 /etc/resolv.conf
systemd-resolved läuft nicht
Wenn Sie nach dem Ausführen von systemd-resolve --status
den folgenden Fehler sehen Befehl,
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.
Es könnte systemd-resolved
sein läuft nicht. Starten Sie es mit:
sudo systemctl status systemd-resolved
Autostart aktivieren.
sudo systemctl enable systemd-resolved
Festlegen des Standard-DNS-Resolvers auf Client-Computern
Auf dem Ubuntu-Desktop können Sie den obigen Anweisungen folgen, um den Standard-DNS-Resolver festzulegen, aber denken Sie daran, 127.0.0.1 durch die IP-Adresse des BIND-Servers zu ersetzen. Die Schritte zum Festlegen des Standard-DNS-Resolvers unter MacOS und Windows finden Sie im Internet.
Wie man IPv6 in BIND deaktiviert
Wenn Sie IPv6 nicht in Ihrem Netzwerk verwenden, dann ist es eine gute Idee, IPv6 in BIND auszuschalten, da es sonst viele Fehler zu IPv6 im BIND-Protokoll geben wird, wie unten gezeigt.
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
Um IPv6 in BIND auf Ubuntu zu deaktivieren, öffnen Sie einfach die Datei /etc/default/named Datei
sudo nano /etc/default/named
Fügen Sie -4
hinzu zu den OPTIONEN.
OPTIONS="-u bind -4"
Speichern und schließen Sie die Datei. Dann starten Sie BIND neu und Sie sind fertig.
sudo systemctl restart named
BIND SERVFAIL
Wenn Ihr BIND-Resolver keine DNS-Anfragen beantworten kann (SERVFAIL), und Sie die folgende Zeile im BIND-Protokoll sehen.
dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out
Es liegt wahrscheinlich daran, dass Ihr Server keine funktionierende IPv6-Konnektivität hat. Dies ist einem meiner Server passiert. Ich dachte, die IPv6-Konnektivität funktioniert wie gewohnt, aber sie ist plötzlich aus mir unbekannten Gründen unterbrochen. Nachdem ich IPv6 in BIND deaktiviert habe, funktioniert die DNS-Auflösung wieder.
Benannter automatischer Neustart
Wenn Ihr benannter Prozess aus irgendeinem Grund beendet wird, müssen Sie den folgenden Befehl ausführen, um ihn neu zu starten.
sudo systemctl restart named
Anstatt diesen Befehl manuell einzugeben, können wir Named automatisch neu starten lassen, indem wir named.service
bearbeiten Systemd-Diensteinheit. Um die standardmäßige systemd-Dienstkonfiguration zu überschreiben, erstellen wir ein separates Verzeichnis.
sudo mkdir -p /etc/systemd/system/named.service.d/
Erstellen Sie dann eine Datei in diesem Verzeichnis.
sudo nano /etc/systemd/system/named.service.d/restart.conf
Fügen Sie der Datei die folgenden Zeilen hinzu, wodurch Named 5 Sekunden nach Erkennung eines Fehlers automatisch neu gestartet wird.
[Service] Restart=always RestartSec=5s
Speichern und schließen Sie die Datei. Laden Sie dann systemd neu.
sudo systemctl daemon-reload
Um zu überprüfen, ob dies funktioniert, beenden Sie Named mit:
sudo pkill named
Überprüfen Sie dann den benannten Status. Named wird automatisch neu gestartet.
systemctl status named
BIND max-cache-size
BIND kann DNS-Ergebnisse auf dem Server zwischenspeichern, um die DNS-Suche für Clients zu beschleunigen. BIND geht davon aus, dass Sie einen dedizierten DNS-Resolver ausführen, d. h. keine anderen Webdienste auf demselben Host ausgeführt werden, sodass die Standard-Cache-Größe (definiert durch max-cache-size
) ist auf 90 % des gesamten Arbeitsspeichers eingestellt, um die beste Leistung zu erzielen. Sie können eine Zeile wie unten im BIND-Protokoll sehen (sudo journalctl -eu named
), wenn BIND startet.
none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)
Beachten Sie, dass BIND nicht sofort 90 % Ihres Arbeitsspeichers verwendet. Wenn es nur wenige DNS-Anfragen gibt, verwendet BIND nur wenig RAM, da nicht viele DNS-Ergebnisse zwischengespeichert werden müssen. Wenn es viele DNS-Anfragen gibt, wird viel RAM verwendet, um den DNS-Cache zu speichern.
Wenn Ihr Arbeitsspeicher begrenzt ist, möchten Sie möglicherweise nicht, dass BIND 90 % Ihres Arbeitsspeichers für den Cache verwendet. Bearbeiten Sie die BIND-Konfigurationsdatei /etc/bind/named.conf.options
.
sudo nano /etc/bind/named.conf.options
Fügen Sie die folgende Direktive in den options
hinzu Klausel. Ändern Sie 50 % in Ihren bevorzugten Wert.
max-cache-size 50%;
Starten Sie BIND neu, damit die Änderung wirksam wird.
sudo systemctl restart named
Hinweis :Wenn Sie BIND neu starten, wird sein gesamter Cache geleert.
Es konnten keine Server erreicht werden
Wenn Sie den folgenden Fehler sehen, wenn Sie den Befehl dig auf Client-Computern verwenden
;; connection timed out; no servers could be reached
Das könnte sein
- Ihre Firewall-Regel ist falsch. Überprüfen Sie Ihr Firewall-Protokoll.
- Der BIND-Resolver läuft nicht.
- BIND lauscht nicht auf einer Netzwerkschnittstelle.
- Können Sie den DNS-Resolver vom DNS-Client anpingen?
Schlussfolgerung
Ich hoffe, dieses Tutorial hat Ihnen geholfen, einen lokalen DNS-Resolver unter Ubuntu 20.04 mit BIND9 einzurichten. Wenn Sie diesen Beitrag nützlich fanden, abonnieren Sie wie immer unseren kostenlosen Newsletter, um weitere Tipps und Tricks zu erhalten. Pass auf dich auf 🙂