¿Cómo cambiar automáticamente la configuración de DNS mientras se conecta a diferentes WiFi?

Aug 17 2020

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

4 TJLuoma Aug 17 2020 at 23:44

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.

3 user3439894 Aug 19 2020 at 01:06

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 networksetuppara 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 launchctlpara loadello, por ejemplo:

launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist

Nota: Puede utilizar el unload verbo con launchctlpara 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-changese 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 commandpor uno de los siguientes:

  • launchd
  • launchd.plist
  • launchctl

Puede leer la página del manual para command en la terminal mediante la tipificación commandy luego haga clic derecho sobre él y seleccione: hombre Abrir página

Ver también: