GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Richten Sie einen lokalen DNS-Resolver auf Ubuntu 18.04, 16.04 mit BIND9 ein

Dieses Tutorial zeigt Ihnen, wie Sie einen lokalen DNS-Resolver unter Ubuntu 18.04, 16.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 PC 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 eigenen 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. Außerdem wird die Netzwerklatenz zwischen Ihrem Computer und dem DNS-Resolver 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-Servers 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.

Einen lokalen DNS-Resolver auf Ubuntu 18.04, 16.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 18.04, 16.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-doc bind9-host dnsutils

Version prüfen.

named -v

Beispielausgabe:

BIND 9.11.3-1ubuntu1.3-Ubuntu (Extended Support Version) <id:a375815>

Führen Sie

aus, um die Versionsnummer und die Build-Optionen zu überprüfen
named -V

Standardmäßig startet BIND automatisch nach der Installation. Sie überprüfen seinen Status mit:

systemctl status bind9

Wenn es nicht läuft, starten Sie es mit:

sudo systemctl start bind9

Und aktivieren Sie den automatischen Start beim Booten:

sudo systemctl enable bind9

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.root :die Stammhinweise Datei, die von DNS-Resolvern verwendet wird, um Root-DNS-Server abzufragen. Es gibt 13 Gruppen von Root-DNS-Servern, von a.root-servers.net zu m.root-servers.net .
  • db.127 :Localhost-IPv4-Reverse-Mapping-Zonendatei.
  • db.local :localhost leitet IPv4- und IPv6-Mapping-Zonendatei weiter.
  • db.leer :eine leere Zonendatei

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 bind9

Wenn auf dem BIND-Server eine 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 bind9

Dies zeigt die neueste Protokollnachricht der bind9-Serviceeinheit. Ich kann die folgende Zeile im Protokoll finden, 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 18.04-Server

Systemd-resolved stellt den Stub-Resolver auf Ubuntu 18.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

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.

DNS-Server pro Link auf Ubuntu 18.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

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.

Festlegen des Standard-DNS-Resolvers auf Ubuntu 16.04-Server

Ubuntu 16.04 verwendet die resolvconf Programm zum Verwalten von DNS-Resolvern in /etc/resolv.conf Datei. Installieren Sie die resolvconf Paket.

sudo apt install resolvconf

Um BIND als Standard-Resolver auf dem Ubuntu 16.04-Server festzulegen, müssen Sie /etc/resolvconf/resolv.conf.d/head bearbeiten Datei und fügen Sie „nameserver 127.0.0.1 hinzu ” in diese Datei, was durch Ausführen des folgenden Befehls erfolgen kann:

echo "nameserver 127.0.0.1" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Der in dieser Datei definierte Resolver ist immer der erste DNS-Resolver, egal was passiert. Starten Sie nun resolvconf neu Dienst.

sudo systemctl restart resolvconf

Sie können nun den Inhalt von /etc/resolv.conf überprüfen .

cat /etc/resolv.conf

Wie Sie sehen können, ist 127.0.0.1 der Standard-DNS-Resolver.

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.

Aktualisieren :Später bemerkte ich, dass das BIND-Paket auf Ubuntu 16.04 mit einer Systemd-Diensteinheit bind9-resolvconf.service geliefert wird , was uns hilft, den Standard-DNS-Resolver auf dem Ubuntu-Server festzulegen, sodass Sie dies nicht wie oben manuell tun müssen. Standardmäßig ist dieser Dienst deaktiviert, wir müssen ihn starten und den automatischen Start beim Booten aktivieren.

sudo systemctl start bind9-resolvconf

sudo systemctl enable bind9-resolvconf

Stellen Sie sicher, dass die resolvconf Paket installiert ist. Nur zwei Befehlszeilen und BIND wird als Standard-DNS-Resolver auf Ihrem Ubuntu 16.04-Server festgelegt.

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, ist es eine gute Idee, IPv6 in BIND auszuschalten, da sonst im BIND-Protokoll viele Fehler zu IPv6 angezeigt werden, 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 /etc/default/bind9 Datei

sudo nano /etc/default/bind9

Fügen Sie „-4“ zu den OPTIONEN hinzu.

OPTIONS="-u bind -4"

Speichern und schließen Sie die Datei. Dann starten Sie BIND neu und Sie sind fertig.

sudo systemctl restart bind9

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.

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 bind9 ), 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 bind9

Schlussfolgerung

Ich hoffe, dieses Tutorial hat Ihnen geholfen, einen lokalen DNS-Resolver unter Ubuntu 18.04, 16.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 🙂


Ubuntu
  1. So richten Sie eine Firewall mit UFW unter Ubuntu 18.04 ein

  2. So richten Sie den lokalen DNS-Resolver mit Dnsmasq unter Ubuntu 20.04 ein

  3. Scannen Sie das lokale Netzwerk mit arp-scan auf Ubuntu

  4. So richten Sie eine Firewall mit UFW unter Ubuntu 16.04 ein

  5. So richten Sie einen ungebundenen DNS-Resolver unter Ubuntu 20.04 ein

Richten Sie den autoritativen BIND-DNS-Server unter Ubuntu 18.04, 16.04 ein

Richten Sie DNS über HTTPS (DoH) Resolver auf Ubuntu mit DNSdist ein

So richten Sie mit Nginx unter Ubuntu einfach einen DNS über TLS-Resolver ein

Richten Sie den lokalen DNS-Resolver unter Ubuntu 20.04 mit BIND9 ein

Richten Sie den ungebundenen DNS-Resolver auf dem Ubuntu 20.04-Server ein

Ubuntu-Server mit EHCP einrichten (LAMP, DNS, FTP, Mail)