BIND/Named: Rekursion deaktiviert, Client soll alternative Server verwenden

BIND/Named: Rekursion deaktiviert, Client soll alternative Server verwenden

Ich richte einen einfachen DNS-Server (BIND/Named) ein, der lokal auf einem OSX-Laptop läuft.

Sein Zweck besteht darin, alle Anfragen für „*.laptop.example.com“ in „192.168.2.2“ aufzulösen – die manuell zugewiesene IP-Adresse (nicht DHCP) einer virtuellen Netzwerkschnittstelle.

Ich verwende eine virtuelle Netzwerkschnittstelle (bereitgestellt von Parallels), um sicherzustellen, dass die IP-Adresse immer gleich bleibt (eth0 ändert seine IP-Adresse, wenn es mit verschiedenen Netzwerken verbunden ist) und um auch sicherzustellen, dass sie immer verfügbar ist (eth0 ist deaktiviert/nicht verfügbar, wenn kein Netzwerkkabel eingesteckt ist).

Ich habe das folgende Setup verwendet:

options {

  ...

  forwarders {
    192.168.1.1;
  };
  forward only;

};

Dies erfordert jedoch eine Aktualisierung der Konfiguration bei jedem Wechsel des Laptops zum Netzwerk (da die meisten Netzwerke eine andere DNS-Adresse verwenden).

Ich würde diese Anforderung gerne fallen lassen, sodass, wenn BIND/Named den Domänennamen nicht erkennt (d. h. es handelt sich nicht um eine Subdomäne von „laptop.example.com“), ein Fehler zurückgegeben wird, sodass der Laptop die zweite gespeicherte DNS-Adresse ausprobieren kann (eine, die er von DHCP abgerufen hat).

Eine Möglichkeit besteht darin, Folgendes zu verwenden:

options {

  ...

  forwarders {
  };
  forward only;

  recursion no;

};

Dadurch wird verhindert, dass mehr als 3 Sekunden für die Abfrage der ROOT-Server benötigt werden. Der Client interpretiert die Antwort jedoch als „die Domäne existiert nicht“ und nicht als einen Fehler, der durch Ausprobieren des nächsten Servers behoben werden kann.

Antwort1

Danke, Alnitak, duffbeer703, John Gardeniers, alles sehr gutes Feedback.

Die Lösung, die ich für mein Problem verwendet habe, besteht darin, mit launchd die Änderungen in /etc/resolv.conf zu erkennen und dann die Weiterleitungsliste zu aktualisieren.

Durch Erstellen der Datei:

/Library/LaunchDaemons/myname.update.plist

Mit dem Inhalt:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>myname.update</string>
    <key>ProgramArguments</key>
    <array>
        <string>[PATH]/update.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/var/run/resolv.conf</string>
    </array>
</dict>
</plist>

Und laden Sie dies mit:

launchctl load /Library/LaunchDaemons/myname.update.plist
launchctl start myname.update

Ein Skript unter:

[PATH]/update.sh

Kann so etwas ausführen wie:

DST="/var/named/forwarders.conf";

echo "forwarders {" > $DST

cat /etc/resolv.conf | \
    grep -v -E "(127.0.0.1|localhost)" | \
    awk '{ sub("^nameserver ", "\t"); sub("$", ";"); print }' >> $DST

echo "};" >> $DST

Und dann kann es in der benannten Konfiguration mit Folgendem verwendet werden:

options {
    directory "[PATH]/conf/";
    listen-on { 127.0.0.1; [IP_ADDRESS_HOST]; };
    include "/var/named/forwarders.conf";
    forward only;
};

Wenn Sie die vollständige Implementierung sehen oder verwenden möchten, gehen Sie zumeine BIND-Setup-Seiteund verwenden Sie das Download-Formular ... es erstellt ein ZIP-Paket mit einem einzigen Installationsskript, sodass die Einrichtung und Verwendung hoffentlich ganz einfach ist.

Antwort2

Warum fügen Sie nicht einfach einen Eintrag zur Hosts-Datei hinzu und sparen sich den ganzen Aufwand?

Antwort3

Sie sollten vielleicht etwas genauer darauf eingehen, was Sie versuchen – das ergibt nicht viel Sinn. Mein Rat ist, nicht an den DNS-Grundlagen herumzubasteln – Sie machen etwas kaputt, das einfach funktioniert.

Primäre und sekundäre DNS-Server sind in Ihrer Netzwerkkonfiguration für die Verfügbarkeit festgelegt. Wenn ein DNS-Server keine Antwort liefern kann, geht der Client nicht zum sekundären Server – die Leute, die DNS erfunden haben, haben das Konzept der „Rekursion“ implementiert, um dieses Problem zu lösen.

Wenn Sie Macs verwenden, stellen Sie möglicherweise fest, dass die Verwendung von Bonjour/mDNS produktiver ist.

Antwort4

Versuchen Sie es mitunboundstattdessen.

Obwohl es sich in erster Linie um einen rekursiven Server handelt, bin ich davon überzeugt, dass er sowohl die Wildcard-Overrides bereitstellen kann, die Sie benötigen, als auch alles andere an denaktuellUpstream-DNS-Server, wie automatisch von gelernt /etc/resolv.conf.

verwandte Informationen