BIND: forward pro Zone

Die Option forwarders in der bind Konfiguration, die meist im globalen "options" Teil zu finden ist, ist hinlänglich bekannt; damit kann man nämlich DNS-Anfragen an einen anderen server weiter leiten. – Doch, was ist, wenn man dies nur für bestimmte Domänen und nicht generell machen möchte?

Die forwarders option lässt sich dazu auch in einer Zone definieren; so kann man für eine bestimmte zone angeben, dass nur diese queries forwarded werden sollen, was z.B. nützlich ist, wenn man im Heimnetzwerk eine eigene DNS Zone hat und für eine allfällige VPN-Verbindung zur Firma, dann für die Firmen Domain deren Nameserver nutzen möchte.

So kann man z.B. eine zones.conf wie folgt machen:

zone "home.lan" { type master; file "/etc/named/zones/home.lan"; allow-query { any; }; };
zone "company.net" { type forward; forwarders { x.x.x.x; }; };

Anfragen an .home.lan werden so lokal abgehandelt, solche an .company.net jedoch weiter geleitet auf x.x.x.x. Alle anderen anfragen können weiterhin lokal über die root-server oder über eine globale forwardes Option an die Nameserver des ISPs weitergeleitet werden.

Weitere Infos: http://www.zytrax.com/books/dns/ch7/queries.html#forwarders

BIND: Sag mir von wo du kommst und ich sage dir wohin du gehen sollst

bind hat ein sehr praktisches Feature, dass allerdings nur wenigen bekannt ist: anhand einer ACL kann man verschiedene "Sichten" erstellen; so kann man z.B. sagen, dass jemand der von einer Adresse vom internen Netzwerk kommt die interne Adresse eines Server erhält und jemand der von "draussen" kommt die externe, öffentlich zugängliche Adresse.

Und so gehts: Erstmal definieren wir in /etc/named/named.conf die entsprechende Zone für das interne Netz:

acl internal-network
{
  // Local
  127.0.0.0/8;
 
  // 10.1.1.0 - 10.1.1.255 (Internal Network)
  10.1.1.0/24;
};

Dann definieren wir je für die interne Zone und für den „rest“ eine view und includen das entsprechende Zonefile:

view "internal"
{
  match-clients { internal-network; };
  include "/etc/bind/zones.conf.int";
};
 
view "external"
{
  match-clients { any; };
  include "/etc/bind/zones.conf";
};

DNS-Server: Falsche serial-nummern reparieren

Bei einem Nameserver gibt jeweils der sog. "serial" Wert an, ob ein zonefile vom master auf den slave aktualisiert werden soll; dies geschieht jedoch nur, wenn diese Nummer GRÖSSER ist als vorher.

Diese Nummer lässt sich zwar frei festlegen, die meisten admins bevorzugen aber die Konvention: YYYYMMDDNR

Nun bekommt man natürlich ein Problem, wenn man diese Nummer mal aus versehen zu hoch gesetzt hat, beispielsweise auf: 3010120301 – Wie korrigiert man nun diesen Wert, damit man wieder die kleinere Nummer verwenden kann?

Es reicht die Nummer: 4294967295 als serial zu setzen, die Zone neu zu laden und dann die Richtige einzutragen.

Der Mathematische Weg
Wer lieber den "Mathematischen-Weg" gehen möchte: 😉

Man addiert einfach den Maximal-Wert: 2147483647 zur falschen Nummer hinzu, also beispielsweise: 2147483647 + 3010120301 = 5157603948 und trägt diese Serial ein. Da diese Zahl dann überlaufen würde wäre die Nummer Name-Server intern eine minus-zahl.

Nach einem refresh kann man dann wieder die richtige Nummer eintragen.

Weitere Infos

http://www.zytrax.com/books/dns/ch8/soa.html
http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.ch08.html#id2567648