Reihenfolge der DNS-Resolver oder Hinzufügen „exklusiver“ Routen in Mac OS X?

Reihenfolge der DNS-Resolver oder Hinzufügen „exklusiver“ Routen in Mac OS X?

Ich arbeite in einem Unternehmen, in dem ich – aus mehreren seltsamen Gründen – die folgende Konfiguration habe:

  • Ethernet: befindet sich in einem Gastnetzwerk und hat Zugriff auf das Internet
  • WLAN: befindet sich in einem Firmennetzwerk und hat Zugriff auf das Intranet
  • Die Reihenfolge der Adapter wird so festgelegt, dass zuerst das Ethernet
  • route addwird verwendet, um die Intranet-Routen hinzuzufügen, die ich brauche (10.[4/6/1/39].xx usw.)

Das Problem ist nun, dass bestimmte Programme nicht funktionieren, da sie keine IPs, sondern benannte Adressen verwenden. Folglich scutil --dnshat also Resolver #1 mit externen DNS-Servern, und dann folgt Resolver #2 mit den Intranet-DNS-Servern. (wenn ich das Kabel ziehe und nur im WLAN-Bereich bin, werden die Namen problemlos aufgelöst).

Mir sind zwei mögliche Lösungen eingefallen, aber ich weiß nicht, wie ich sie zum Laufen bekomme:

  • obwohl WLAN der erste Adapter in der Reihenfolge ist, ändere ich irgendwie die DNS-Auflösungsreihenfolge, sodass Intranet-DNS vor Internet-DNS ausprobiert wird
  • setze den WLAN-Adapter an die erste Stelle und suche dann nach einem „ausschließenden“ Routenbefehl, der nicht „sende IP X über en0“, sondern „sende jede IP ungleich X über en1“ sagt.

Kann mir hier jemand helfen?

Antwort1

Klingt, als hätte ich in der gleichen Firma gearbeitet ;-)

Unter dem folgenden Link finden Sie ein Ruby-Skript, das Sie folgendermaßen anpassen können:Hennes beschreibt als Option 4), obwohl es die Weiterleitung von DNS-Anfragen anstelle von Ansichten verwendet. Dies sollte jedoch leicht zu beheben sein. https://github.com/simonair/pubcode/blob/master/multihome_setup/multihome_setup.rb

Dieses Skript verwendet nach Bedarf sudo.

Verwenden Sie es nur, wenn Sie genau verstehen, was es tut.

Am besten erstellen Sie eine neue LocationVerwendung System Preferences > Network, bevor Sie mit diesem Skript zu experimentieren beginnen, weil Sie so alle Änderungen rückgängig machen können, indem Sie zur bekanntermaßen funktionierenden Verwendung zurückkehren Location.

Was es bewirken wird:

  • Zählen Sie alle Netzwerkschnittstellen auf und identifizieren Sie die mit dem Unternehmensnetzwerk und die mit dem anderen Netzwerk verbundene Schnittstelle anhand ihrerSTANDARD-GATEWAYS‘IP-Adresse (nicht die der Schnittstelle selbst zugewiesene Adresse)
  • Konfigurieren Sie den integrierten BINDDNS-Server so, dass er Anfragen sowohl für das Unternehmensnetzwerk als auch für das Internet verarbeitet und diese nach Domäne weiterleitet. Beispielsweise example.comwird an die Unternehmens-Nameserver weitergeleitet, während example.netan die anderen Nameserver weitergeleitet wird.
  • Richten Sie das Routing zu einer Liste von Subnetzen über die Unternehmensschnittstelle ein, den Rest über das andere Netzwerk
  • Optional wird bei entsprechender Konfiguration auch eine VPN-Verbindung initiiert.

Sie müssen das Skript an Ihre Bedürfnisse anpassen.

Seien Sie sich bewusst, dass SieRufen Sie das Skript mit dem Argument erneut auf, restoresobald Sie die Verbindung zum Firmennetzwerk trennen.da sonst alle DNS-Anfragen bei Ihrem lokalen Nameserver landen und dieser sie außerhalb Ihrer Unternehmensumgebung nicht auflösen kann.

Antwort2

Ich bin nicht sicher, ob das eine richtige, vollständige Antwort ist, aber sie in mehreren Kommentaren unterzubringen scheint mir ein Notbehelf zu sein.

1) Schnelle Problemumgehung:

Fügen Sie die Intranetnamen zur Hostdatei hinzu. (Sie befindet sich in/privat/usw./Hosts). Das funktioniert, wenn Sie nur auf wenige Server zugreifen müssen, und ist relativ einfach. Es fühlt sich aber wie ein Kludge an, und wenn sich die Server-IPs jemals ändern, müssen Sie Ihre Hosts-Datei manuell aktualisieren.

2) Vorausgesetzt, der DNS-Server im Intranet verarbeitet auch Namen im Internet, können Sie nur diesen DNS-Server verwenden. Ich halte das für unwahrscheinlich, da Sie ausdrücklich erwähnt haben, dass das Gastnetzwerk Internetzugang hat und das andere Netzwerk auf das Intranet. (Könnte sein, dass das Intranet Internetzugang hat, dieser aber durch Firewall-Regeln blockiert wird, die nicht alles blockieren. Z. B. nicht Port 53).

3) Die Verwendung beider DNS-Server (was Sie versuchen) funktioniert möglicherweise nicht.

Ich habe keine OS/X-Maschine, auf der ich das testen könnte, aber ich musste kürzlich auf die harte Tour lernen, dass manche Betriebssysteme DNS-Server nicht der Reihe nach abfragen und auch nicht auf einen zweiten Nameserver zurückgreifen, wenn der erste ausfällt. Stattdessen scheinen sie die aufgelisteten Nameserver nach dem Zufallsprinzip zu verwenden.

Das Ergebnis davon wäre:
(Internet-DNS, Intranet-DNS bestellen)
Host im Internet abfragen -> funktioniert.
Host im Intranet abfragen -> Suche über DNS-Server im Internet fehlgeschlagen, lieber aufgeben als es beim nächsten Mal zu versuchen.

Ich weiß nicht, ob dies unter OS/X der Fall ist, und ich habe keinen Mac, auf dem ich es testen könnte.

4)Lokaler Nameserver

(Fett gedruckt, weil ich glaube, dass dies die beste Lösung ist).

OS/X wird ausgeliefert mitBINDENund es scheint einfach zu sein,Aktivieren Sie esDas Schlüsselwort, nach dem Sie in BIND suchen möchten, ist views

Antwort3

Ich hatte ein ähnliches Problem amMac OSmit einer Reihe physischer und virtueller Netzwerkschnittstellen und der Notwendigkeit, je nach Verfügbarkeit oder Nichtverfügbarkeit dieser Netzwerkschnittstellen eine Namensauflösung bei verschiedenen Servern anzufordern.

Nach einigem googeln und probieren fand ich die umfassendsten Informationen in einer größeren Diskussion inhttps://rakhesh.com/infrastructure/macos-vpn-doesnt-use-the-vpn-dnsKurz gesagt, um spezifische Resolver zu definieren undÄndern der System-Resolver-Prioritäten von macOS, für jeden meiner spezifischen Lösungsbedürfnisse (z. B.„Der private DNS-Server 10.10.10.128 muss nach mydomain.tld abgefragt werden, wenn er erreichbar ist, andernfalls der öffentliche 8.8.8.8 von Google“) genügte es,

  1. Erstellen Sie eine Datei in /etc/resolver (z. B. /etc/resolver/per-domain-resolver oder einen beliebigen anderen Namen, der Ihnen am besten gefällt).

  2. füllen Sie es mit einer Folge vonDomain,Name Server, UndSuchreihenfolgeRichtlinien, zB

    domain mydomain.tld
    nameserver 10.10.10.128
    search_order 1
    nameserver 8.8.8.8
    

Es ist erwähnenswert, dass meine Versuche zu funktionierenden Lösungen wurden, sobald sie dieDomainUndSuchreihenfolgeRichtlinien.

verwandte Informationen