Wie lösche ich sie nach der Verwendung von `networksetup -setdnsservers Wi-Fi "8.8.8.8" "8.8.4.4"`?

Ich möchte eine temporäre Änderung des DNS-Servers skripten, um die DHCP-Antwort zu überschreiben, die ich vom Netzwerk erhalte. Ich habe herausgefunden, dass ich es verwenden kann, networksetupaber sobald wir mit dem Testen fertig sind. Bevor ich zur Produktion übergehe, sollte ich wissen, wie ich das rückgängig machen kann.

Wie kann ich ein Skript erstellen, um diese Änderungen zu löschen und die Einstellungen, die das Netzwerk jetzt bereitstellt, wiederherzustellen, als ob ich das folgende Skript nie ausgeführt hätte?

networksetup -setdnsservers Wi-Fi "8.8.8.8" "8.8.4.4"

Es ist nicht möglich, die vorherigen Einstellungen zu speichern, und ich möchte die Einstellung entfernen, damit die tatsächlichen neuen Werte aus dem Netzwerk abgerufen werden können, anstatt die vorherigen Einstellungen zu speichern, sodass ich keinen alten Wert speichere nicht mehr richtig.

Grundsätzlich schaue ich ipconfig /renewauf macOS.

Ich bin hierher gekommen, um nach einer Möglichkeit zu suchen, die DNS-Server auf die Standardeinstellung zurückzusetzen. Fürs Protokoll, das, wonach ich gesucht habe, ist buchstabiert networksetup -setdnsservers Wi-Fi Empty.

Antworten (3)

Wenn es Ihnen nur darum geht, DNS-Einträge zu bereinigen, gibt Ihnen der Befehl help Anweisungen, was zu tun ist:

Usage: networksetup -setdnsservers <networkservice> <dns1> [dns2] [...]
       Set the <networkservice> DNS servers to <dns1> [dns2] [...]. Any 
       number of dns servers can be specified. Specify "Empty" for <dns1> 
       to clear all DNS entries.

In meinem Fall

sudo networksetup -setdnsservers Wi-Fi "Empty"
  • Erstellen Sie einen neuen Netzwerkdienst mit der entsprechenden Schnittstelle (z. B. en1 = AirPort):

    sudo networksetup -createnetworkservice Wi-Fi2 en1

  • Entfernen Sie die mit den benutzerdefinierten DNS-Einstellungen:

    sudo networksetup -removenetworkservice Wi-Fi

  • Benennen Sie den neuen Netzwerkdienst in den ursprünglichen Namen um:

    sudo networksetup -renamenetworkservice Wi-Fi2 Wi-Fi

In meiner Umgebung hat der neue Dienst DHCP und seine neuen Einstellungen automatisch abgerufen. Möglicherweise müssen Sie es sudo networksetup -setdhcp Wi-Fiexplizit mit festlegen oder sich die DHCP-Antwort für die Schnittstelle ansehen und die bereitgestellten DNS-IP(s) mit parsen ipconfig getpacket en1.

Nun, das ist elegant - keine Notwendigkeit, eine Einstellung zu entfernen, wenn die Schnittstelle wegwerfbar ist. Als Nächstes muss ich testen, ob dies zuverlässig ist, wenn wir dies aus der Ferne skripten, aber es ist wahrscheinlich nicht gefährlicher als meine „Test“-Einstellungen.
Ich habe mir diesen kleinen Bash-Alias ​​basierend auf dieser Antwort ausgedacht: alias bouncewifi="sudo networksetup -createnetworkservice Wi-Fi2 $(networksetup -listallhardwareports|grep -A1 Wi-Fi|fgrep Device|awk '{print $2}') && sudo networksetup -removenetworkservice Wi-Fi && sudo networksetup -renamenetworkservice Wi-Fi2 Wi-Fi" Da mein Wi-Fi normalerweise en0 und nicht en1 ist, habe ich die Netzwerkeinrichtung verwendet, um herauszufinden, auf welchem ​​Gerät das aktuelle Wi-Fi war, und dann ausgeführt 3 obige Befehle in der Reihenfolge basierend auf den Ausgangsbedingungen des vorherigen Befehls. Dies sollte aus der Ferne ziemlich sicher sein.
IMHO kann das Erstellen eines neuen Netzwerkdienstes jedes Mal, um dies zu tun, viele Nebenwirkungen haben. Wie ich denke, dass die neue Schnittstelle DHCP jedes Mal neu aushandeln muss? Es ist auch nur sehr üblich, also befürchte ich andere beabsichtigte Nebenwirkungen. Um die DNS-Einstellungen vorübergehend zu ändern und sie dann wiederherzustellen, habe ich ein kleines zsh/bash-Skript zusammengestellt, das dies hier tut: gist.github.com/varenc/388fa10c68002e0d59c67d1b52492f79 Setzen Sie einen schlafenden Hintergrundjob, um DNS nach einer bestimmten Zeit wiederherzustellen, und überprüfen Sie für Duplikate und tötet sie nach Bedarf.

Gehen Sie einfach zu den Systemeinstellungen und folgen Sie den Schritten in meinen Screenshots.

Schritt 1: Geben Sie hier die Bildbeschreibung ein

Schritt 2: Geben Sie hier die Bildbeschreibung ein

Entschuldigung für die deutschen Screenshots.

Sobald Sie alle manuell konfigurierten Nameserver entfernt haben, verwendet Mac OS wieder die von DHCP bereitgestellten Nameserver.

Bei dieser Frage geht es um Skripte, daher hilft das manuelle Korrigieren über die Benutzeroberfläche nicht wirklich. Obwohl es gut zu wissen ist. Nur die Verwendung des Magischen networksetup -setdnsservers NetServiceName "Empty"ist die richtige CLI-Lösung.