DNS (Domain Name System) ist ein System, in dem alle Domainnamen von Servern in einer bestimmten Hierarchie organisiert sind. Warum brauchen wir es? Stellen Sie sich vor, Sie müssten eine Verbindung zu einem Gerät mit der IP-Adresse 91.206.179.207 herstellen. Sie könnten diese Adresse zwar in der Kommandozeile eingeben, aber sich viele solcher Zahlenkombinationen zu merken, ist sehr schwierig. Deshalb wurden spezielle Server geschaffen, die Domainnamen in IP-Adressen umwandeln.
Wenn Sie zum Beispiel hostman.com in die Suchleiste Ihres Browsers eingeben, werden die Anfragedaten an einen DNS-Server gesendet. Dieser sucht in seiner Datenbank nach Übereinstimmungen und sendet anschließend die entsprechende IP-Adresse an Ihr Gerät. Erst danach greift der Browser direkt auf die Ressource zu.
Die Konfiguration eines eigenen DNS-Servers ermöglicht eine flexiblere und präzisere Systemkonfiguration und vermeidet die Abhängigkeit von Drittanbietern. In diesem Artikel betrachten wir, wie man DNS mit dem BIND-Namensserver unter Ubuntu einrichtet.
Zone
Ein Teil der DNS-Hierarchie, der auf einem DNS-Server gehostet wird. Er definiert die Grenzen, innerhalb derer ein bestimmter Server oder eine Servergruppe verantwortlich ist.
Root-Server
DNS-Server, die Informationen über Top-Level-Domains (.ru, .com usw.) enthalten.
Domain
Ein benannter Teil der DNS-Hierarchie, ein bestimmter Knoten, der weitere Knoten enthält. DNS-Adressen werden von rechts nach links gelesen und beginnen mit einem Punkt, wobei Domains ebenfalls durch Punkte getrennt sind.
Beispiel: Die Domain poddomen.domen.ru wird als .ru.domen.poddomen gelesen. Der abschließende Punkt wird in der Praxis meist weggelassen.
FQDN (Fully Qualified Domain Name)
Ein vollständiger Domainname, der alle übergeordneten Domainnamen enthält.
Resource Record (Ressourceneintrag)
Eine Informationseinheit, die einen Namen mit bestimmten Dienstinformationen verknüpft. Sie besteht aus:
Name (NAME) – Name oder IP-Adresse, der die Zone gehört
Time to Live (TTL) – Zeit, die ein Eintrag im DNS-Cache gespeichert wird
Class (CLASS) – Netztyp, üblicherweise IN (Internet)
Type (TYPE) – Zweck des Eintrags
Data (DATA) – Zusätzliche Informationen
A-Record
Ordnet einen Hostnamen einer IPv4-Adresse zu. Jede Netzwerkschnittstelle kann nur einen A-Record haben.
website.com. 520 IN A 91.206.179.207
AAAA-Record
Wie ein A-Record, jedoch für IPv6.
CNAME
Canonical Name Record – ein Alias für einen echten Namen zur Weiterleitung.
MX
Definiert Mailserver für eine Domain.
NAME enthält die Zieldomain, DATA die Priorität und den Host.
website.com. 17790 IN MX 10 mx.website.com.
website.com. 17790 IN MX 20 mx2.website.com.
NS
Verweist auf den DNS-Server, der für die Domain zuständig ist.
PTR
Ordnet einer IP-Adresse einen Domainnamen zu (Reverse DNS).
SOA
Beschreibt die grundlegenden Einstellungen einer Zone.
SRV
Enthält Serveradressen für interne Domain-Dienste (z. B. Jabber).
Um den Anweisungen in diesem Artikel zu folgen, benötigen Sie mindestens zwei Ubuntu-Server im selben Rechenzentrum. Diese können bei Hostman bestellt werden.
Wir verwenden zwei Ubuntu-20.04-Server als primären und sekundären DNS-Server (ns1 und ns2). Zusätzlich gibt es weitere Server, die diese DNS-Server nutzen.
Auf jedem Server sind Superuser-Rechte erforderlich.
Wir verwenden bind9 als DNS-Server. Installieren Sie das Paket aus den Linux-Repositories:
sudo apt update && sudo apt upgrade -y
sudo apt install bind9
Zusätzlich wird empfohlen, Netzwerk-Tools zu installieren:
sudo apt install dnsutils
Starten Sie anschließend den bind9-Dienst:
sudo service bind9 start
Die Hauptkonfigurationsdatei befindet sich unter:
/etc/bind/named.conf
Sie enthält die allgemeinen Einstellungen und bindet weitere Konfigurationsdateien ein.
Diese Datei enthält die allgemeinen Serverparameter.
options {
dnssec-validation auto;
auth-nxdomain no;
directory "/var/cache/bind";
recursion no;
listen-on {
172.16.0.0/16;
127.0.0.0/8;
};
forwarders {
172.16.0.1;
8.8.8.8;
};
};
Überprüfen Sie die Konfiguration mit:
sudo named-checkconf
Der primäre DNS-Server speichert die Hauptkopie der Zonendateien.
sudo mkdir /etc/bind/master-zones
sudo touch /etc/bind/master-zones/test.example.com.local.zone
Zonendatei-Inhalt:
$ttl 3600
$ORIGIN test.example.com.
test.example.com. IN SOA (
ns.test.example.com.
abuse.test.example.com.
2022041201
10800
1200
604800
3600 )
@ IN NS ns.test.example.com.
@ IN NS ns2.test.example.com.
@ IN A 172.16.101.3
ns IN A 172.16.0.5
ns2 IN A 172.16.0.6
Prüfen:
sudo named-checkzone test.example.com. /etc/bind/master-zones/test.example.com.local.zone
zone "test.example.com." {
type master;
file "/etc/bind/master-zones/test.example.com.local.zone";
};
Konfiguration prüfen und Dienst neu starten:
sudo named-checkconf
sudo named-checkconf -z
sudo service bind9 restart
acl "local" { 172.16.0.0/16; };
view "local" {
match-clients { local; };
include "/etc/bind/named.conf.local";
};
Installation wie beim primären Server.
Slave-Zone:
zone "test.example.com." {
type slave;
file "/etc/bind/slave/test.example.com.local.zone";
masters { 172.16.0.5; };
};
Zone-Transfer:
sudo rndc retransfer test.example.com
Seriennummer immer erhöhen, z. B. Datum + Zähler.
@ IN MX 10 mx.test.example.com.
@ IN MX 20 mx2.test.example.com.
SOA-Seriennummer aktualisieren und BIND neu laden:
sudo service bind9 reload
Zonendatei:
sudo nano /etc/bind/master-zones/16.172.in-addr.arpa.zone
PTR-Einträge hinzufügen und prüfen.
Externe IP in listen-on hinzufügen, separate Zone und View definieren, anschließend Transfer auf dem sekundären Server durchführen.
logging {
channel bind.log {
file "/var/lib/bind/bind.log" versions 10 size 20m;
severity debug;
print-category yes;
print-severity yes;
print-time yes;
};
category queries { bind.log; };
};
In dieser Anleitung haben wir DNS auf einem Ubuntu-Server mit bind9 konfiguriert. Die beiden DNS-Server können nun für die Namensauflösung im Netzwerk verwendet werden.
Andere Server sollten als DNS-Server 172.16.0.5 und 172.16.0.6 nutzen.
Diese Konfiguration kann als Grundlage für weitere Erweiterungen dienen, z. B. für die Einrichtung eines Mailservers.