BIND (Berkeley Internet Name Domain) ist der meistgenutzte DNS-Server weltweit. Er kann als autoritativer Server für eigene Domains oder als Caching-Resolver eingesetzt werden.
Installation
Debian/Ubuntu
apt install bind9 bind9utils bind9-doc dnsutilsCentOS/RHEL
dnf install bind bind-utilsService starten
systemctl enable named # CentOS
systemctl enable bind9 # Debian
systemctl start named # CentOS
systemctl start bind9 # DebianVerzeichnisstruktur
/etc/bind/ # Debian
/etc/named/ # CentOS
├── named.conf # Hauptkonfiguration
├── named.conf.options # Optionen
├── named.conf.local # Lokale Zonen
├── named.conf.default-zones # Standard-Zonen
└── zones/
├── db.example.de # Forward Zone
└── db.192.168.1 # Reverse ZoneGrundkonfiguration
named.conf.options
// /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// Anfragen nur von diesen Netzen
allow-query {
localhost;
192.168.1.0/24;
};
// Rekursion nur für lokale Netze
allow-recursion {
localhost;
192.168.1.0/24;
};
// Forwarders (für nicht-autoritative Anfragen)
forwarders {
8.8.8.8;
1.1.1.1;
};
// DNSSEC aktivieren
dnssec-validation auto;
// IPv6 deaktivieren (optional)
listen-on-v6 { none; };
// Auf allen Interfaces lauschen
listen-on { any; };
// Version verstecken
version "not disclosed";
};Autoritative Zone erstellen
Zone deklarieren
// /etc/bind/named.conf.local
zone "example.de" {
type master;
file "/etc/bind/zones/db.example.de";
allow-transfer { 192.168.1.11; }; // Slave-Server
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.1";
allow-transfer { 192.168.1.11; };
};Forward Zone
; /etc/bind/zones/db.example.de
$TTL 86400
@ IN SOA ns1.example.de. admin.example.de. (
2024012601 ; Serial (YYYYMMDDNN)
3600 ; Refresh (1 hour)
1800 ; Retry (30 min)
604800 ; Expire (1 week)
86400 ) ; Negative TTL (1 day)
; Nameserver
@ IN NS ns1.example.de.
@ IN NS ns2.example.de.
; A Records
@ IN A 203.0.113.10
ns1 IN A 203.0.113.10
ns2 IN A 203.0.113.11
www IN A 203.0.113.10
mail IN A 203.0.113.20
ftp IN A 203.0.113.30
; CNAME Records
webmail IN CNAME mail.example.de.
shop IN CNAME www.example.de.
; MX Records
@ IN MX 10 mail.example.de.
@ IN MX 20 mail2.example.de.
; TXT Records
@ IN TXT "v=spf1 mx a:mail.example.de -all"
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.de"
; AAAA Record (IPv6)
@ IN AAAA 2001:db8::1
www IN AAAA 2001:db8::1Reverse Zone
; /etc/bind/zones/db.192.168.1
$TTL 86400
@ IN SOA ns1.example.de. admin.example.de. (
2024012601 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Negative TTL
; Nameserver
@ IN NS ns1.example.de.
@ IN NS ns2.example.de.
; PTR Records
10 IN PTR ns1.example.de.
11 IN PTR ns2.example.de.
20 IN PTR mail.example.de.
100 IN PTR server1.example.de.Konfiguration prüfen
# Syntax prüfen
named-checkconf
# Zone prüfen
named-checkzone example.de /etc/bind/zones/db.example.de
named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1
# Service neu laden
systemctl reload bind9
rndc reloadDNS-Abfragen testen
# A-Record
dig @localhost example.de A
# MX-Record
dig @localhost example.de MX
# NS-Records
dig @localhost example.de NS
# Reverse Lookup
dig @localhost -x 192.168.1.10
# Alle Records
dig @localhost example.de ANY
# Kurze Ausgabe
dig +short @localhost www.example.deSlave-Server
Slave konfigurieren
// Auf Slave-Server: /etc/bind/named.conf.local
zone "example.de" {
type slave;
file "/var/cache/bind/db.example.de";
masters { 192.168.1.10; };
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "/var/cache/bind/db.192.168.1";
masters { 192.168.1.10; };
};Master konfigurieren
// Auf Master: Zone-Transfer erlauben
zone "example.de" {
type master;
file "/etc/bind/zones/db.example.de";
allow-transfer { 192.168.1.11; };
also-notify { 192.168.1.11; };
};Transfer erzwingen
# Auf Slave
rndc retransfer example.deDNSSEC
Keys generieren
cd /etc/bind/keys/
# Zone Signing Key (ZSK)
dnssec-keygen -a ECDSAP256SHA256 -n ZONE example.de
# Key Signing Key (KSK)
dnssec-keygen -a ECDSAP256SHA256 -f KSK -n ZONE example.deZone signieren
# Keys in Zone-Datei einbinden
cat Kexample.de.+*.key >> /etc/bind/zones/db.example.de
# Zone signieren
dnssec-signzone -o example.de -t /etc/bind/zones/db.example.denamed.conf anpassen
zone "example.de" {
type master;
file "/etc/bind/zones/db.example.de.signed";
// ...
};Caching-Resolver
Nur Forwarding
options {
directory "/var/cache/bind";
forwarders {
8.8.8.8;
8.8.4.4;
};
forward only; // Nur Forwarders nutzen
allow-query { localhost; 192.168.0.0/16; };
allow-recursion { localhost; 192.168.0.0/16; };
dnssec-validation auto;
};Views (Split DNS)
// Unterschiedliche Antworten je nach Quelle
acl "internal" {
192.168.0.0/16;
localhost;
};
acl "external" {
any;
};
view "internal" {
match-clients { internal; };
zone "example.de" {
type master;
file "/etc/bind/zones/internal/db.example.de";
};
};
view "external" {
match-clients { external; };
zone "example.de" {
type master;
file "/etc/bind/zones/external/db.example.de";
};
};Logging
// /etc/bind/named.conf.local
logging {
channel default_log {
file "/var/log/named/named.log" versions 3 size 5m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
channel query_log {
file "/var/log/named/query.log" versions 3 size 5m;
severity info;
print-time yes;
};
category default { default_log; };
category queries { query_log; };
};mkdir -p /var/log/named
chown bind:bind /var/log/namedSicherheit
Rate Limiting
options {
rate-limit {
responses-per-second 10;
window 5;
};
};Firewall
# Nur Port 53 TCP/UDP
ufw allow 53/tcp
ufw allow 53/udp
# Nur von bestimmten IPs
ufw allow from 192.168.1.0/24 to any port 53Troubleshooting
Logs prüfen
# Journal
journalctl -u bind9 -f
# Oder named
journalctl -u named -f
# Syslog
tail -f /var/log/syslog | grep namedHäufige Fehler
# "zone not loaded due to errors"
named-checkzone example.de /etc/bind/zones/db.example.de
# "permission denied"
chown -R bind:bind /etc/bind/zones/
chmod 640 /etc/bind/zones/*
# "refused"
# → allow-query/allow-recursion prüfenZusammenfassung
| Record-Typ | Beschreibung | |------------|--------------| | A | IPv4-Adresse | | AAAA | IPv6-Adresse | | CNAME | Alias | | MX | Mailserver | | NS | Nameserver | | TXT | Text | | PTR | Reverse Lookup | | SOA | Start of Authority |
| Befehl | Funktion | |--------|----------| | named-checkconf | Config prüfen | | named-checkzone | Zone prüfen | | rndc reload | Neu laden | | rndc status | Status | | dig | DNS-Abfrage |
| Datei | Funktion | |-------|----------| | named.conf | Hauptkonfiguration | | named.conf.options | Optionen | | named.conf.local | Lokale Zonen | | zones/db.* | Zone-Dateien |
Fazit
BIND ist der Referenz-DNS-Server für Linux. Die Konfiguration erfordert sorgfältige Planung der Zonen. Serial-Nummern müssen bei Änderungen erhöht werden. DNSSEC erhöht die Sicherheit, ist aber aufwändig. Für einfache Setups sind Alternativen wie PowerDNS oder dnsmasq oft einfacher.