¿Cómo cambiar automáticamente la configuración de DNS mientras se conecta a diferentes WiFi?
Tengo configuraciones de DNS totalmente diferentes cuando estoy en el trabajo y cuando estoy en casa. Me preguntaba si puedo cambiar la configuración de DNS de mi MacBook Pro automáticamente cuando me conecto a una red WiFi diferente.
Hice muchas búsquedas, hice una ubicación personalizada llamada Inicio en la configuración de red. Y configuré la configuración de mi DNS doméstico en este perfil. Y un perfil predeterminado llamado Automático dejo que la computadora obtenga automáticamente la configuración de DNS.
Después de eso, puedo cambiar mi configuración de DNS a través de:
networksetup -switchtolocation Home
Está muy cerca de mi demanda. Pero espero poder encontrar una manera más inteligente. Si descubro un método. Si me conecto a un WiFi llamado "Casa" y luego ejecuto el comando automáticamente, será excelente.
20200819 Actualizar
Encuentro una herramienta de automatización llamada Hammerspoon , por lo que puedo asignar un atajo para cambiar diferentes ubicaciones usando el comando.
Aunque no encontré una forma directa, Hammerspoon es genial y poderoso. Intenté ver el cambio de Wifi usando Hammerspoon, pero sigue siendo un pequeño problema, así que abro un problema aquí
Respuestas
Keyboard Maestro puede hacer esto muy fácilmente:

Establezca el SSID y la ubicación que desee, y eso debería hacer lo que desee.
No es necesario que utilice una aplicación de terceros para lograr su objetivo.
Cuando Wi-Fi se conecta a una red , se modifica el siguiente archivo , entre otros:
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
Puede utilizar un User Launch Agent con una clave WatchPaths para saber cuándo se modifica el archivo de destino y ejecutar su script en consecuencia.
El siguiente es un ejemplo de cómo lograr la meta y está utilizando SkyNet como el SSID de la conexión Wi-Fi a la red .
Utilizando networksetup
para obtener la corriente Wi-Fi a la red , el siguiente ejemplo shell script de código se utiliza y se guarda como por ejemplo /usr/local/bin/detect-wifi-change
:
#!/bin/bash
[[ $(networksetup -getairportnetwork en0) == "Current Wi-Fi Network: SkyNet" ]] && say "connected to skynet"
En el código de ejemplo anterior, cuando Wi-Fi está conectado a SkyNet , simplemente dice que está "conectado a skynet", y reemplazaría SkyNet en la $(...)
parte del comando con su SSID de destino y reemplazaría el say "connected to skynet"
comando con el networksetup -switchtolocation Home
comando como se muestra en tu pregunta.
Para el agente de lanzamiento , en la biblioteca de su carpeta de inicio , usaría el siguiente ejemplo, guardado como, por ejemplo ,:~/Library/LaunchAgents/com.my.detect.wifi.change.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.my.detect.wifi.change</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/bin/detect-wifi-change</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
</array>
</dict>
</plist>
Después de guardar el PLIST archivo , utilice launchctl
para load
ello, por ejemplo:
launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist
Nota: Puede utilizar el unload
verbo con launchctl
para descargar el archivo PLIST de destino .
Ahora, cada vez que Wi-Fi se conecta a un SSID diferente, por ejemplo, /usr/local/bin/detect-wifi-change
se ejecuta y si está conectado al SSID de destino, se ejecuta el comando después de &&
.
Nota: El ejemplo anterior se probó y funcionó en macOS High Sierra usando mi SSID real en lugar de SkyNet en ambos lugares del script .
Documentación relacionada:
En Terminal , sustituya command
por uno de los siguientes:
launchd
launchd.plist
launchctl
Puede leer la página del manual para command
en la terminal mediante la tipificación command
y luego haga clic derecho sobre él y seleccione: hombre Abrir página
Ver también: