Debian: bind9 DNS Konfiguration für direkte Root-Server Abfrage

3

Eine korrekte DNS Konfiguration ist wichtig. Doch immer wieder stößt man auf Probleme bei DNS Anfragen.

So hat postfix auf meine Server extreme Problem mit der reject_invalid_hostname wenn ich die DNS Server meines Providers verwende. Teilweise sind hostname garnicht auflösbar so das die eMails komplett geblockt werden.

Nach einigen Gespräche mit anderen Admins zeichnete sich so langsam ab, das die sicherste Variante immer noch eine direkte Abfrage der DNS Root Server ist. Um nun bind9 für die Abfrage der Root Server zu konfigurieren sind folgende Schritte notwendig:

bind9 als DNS Cache Server

  • öffnen Sie die Datei /etc/bind/named.conf.options. Ergänzen bzw. verändern Sie folgende Zeilen (auf einem vServer kann es notwendig sein, dass die anstelle der localhost Adresse die öffentliche IP Ihres Servers verwenden):
...
allow-query {127.0.0.1;};
allow-recursion {127.0.0.1;};
...
  • stellen Sie nun sicher, dass in der /etc/bind/named.conf folgende Zeile vorhanden sind
...
include "/etc/bind/named.conf.options";
zone "." {
type hint;
file "/etc/bind/db.root";
};
...
  • sollte die Date /etc/bind/db.root nicht vorhanden sein, so können Sie durch folgenden Befehl erstellen (dig ist im Paket dnsutils enthalten):
dig @A.ROOT-SERVERS.NET > /etc/bind/db.root
  • Über die Datei /etc/host.conf legen Sie nun fest das für DNS Anfragen erst die /etc/hosts und anschließend bind befragt wird. Fügen Sie der Datei dazu folgende Zeile hinzu:
order hosts,bind
  • Nun müssen Sie noch die DNS Anfragen auf Ihren lokalen Server umleiten. Dafür darf in der Datei /etc/resolv.conf nur ein Eintrag für den Nameserver vorhanden sein (haben Sie bind am Anfang an die öffentliche IP Ihres Servers gebunden, so müssen Sie diese hier ebenfalls verwenden):
nameserver 127.0.0.1
  • Abschließend neu der neustart von bind9
/etc/init.d/bind9 restart

DNS Server prüfen

Um nun zu überprüfen ob die Namensauflösung korrekt funktioniert, können Sie mittels dig versuche über die lokalen Host (evtl. öffentliche Server IP Adresse) einzelne Hostname aufzulösen.

dig 127.0.0.1 google.de
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 16080
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;127.0.0.1. IN A
;; AUTHORITY SECTION:
. 10538 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2007081001 1800 900 604800 86400
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Aug 11 13:58:47 2007
;; MSG SIZE rcvd: 102
; <<>> DiG 9.3.4 <<>> 127.0.0.1 google.de
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36151
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;google.de. IN A
;; ANSWER SECTION:
google.de. 1579 IN A 66.249.93.104
google.de. 1579 IN A 72.14.221.104
google.de. 1579 IN A 216.239.59.104
;; AUTHORITY SECTION:
google.de. 345379 IN NS ns1.google.com.
google.de. 345379 IN NS ns2.google.com.
google.de. 345379 IN NS ns3.google.com.
google.de. 345379 IN NS ns4.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 172546 IN A 216.239.32.10
ns2.google.com. 172546 IN A 216.239.34.10
ns3.google.com. 172546 IN A 216.239.36.10
ns4.google.com. 172546 IN A 216.239.38.10
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Aug 11 13:58:47 2007
;; MSG SIZE rcvd: 221

Dies scheint schonmal zu funktionieren. Wie Sie bemerkt habe, hat die Anfrage ein paar Sekunden gedauert. Wenn Sie den gleichen Hostnamen ernaut auflösen, so geht dies wesentlich schneller da das Ergebniss gecached wird.

Prüfen Sie nun noch, ob auch wirklich keine externen DNS Anfragen möglich sind, denn dies sollten Sie nicht unbedingt zulassen. Öffnen Sie dazu unter Windows die Kommndozeile und stellen Sie direkt eine DNS Anfrage an Ihren Server

nslookup
server <Server-IP>
google.de

Das Ergebniss sollte wie folgt aussehen

*** Der Servername für die Adresse <Server-IP> konnte nicht gefunden werden:
Query refused
Server: UnKnown
Address: <Server-IP>
*** server wurde von UnKnown nicht gefunden: Query refused

Somit ist sichergestellt, dass Ihr Server keine externen DNS Anfragen beatwortet.

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

3 Kommentare

  1. Pingback: Linux: sekundären DNS Server für Windows 2003 AD einrichten auf .: blog.cscholz.io :.

Antworten