
He estado intentando recargar las reglas de pf cada vez que cambia la red. Aquí está mi archivo plist. /Biblioteca/LaunchAgents/com.wwk.networkchange.plist
<?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>Label</key>
<string>com.wwk.networkchange</string>
<key>ProgramArguments</key>
<array>
<string>sudo /sbin/pfctl -f /Users/wwk/pf.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/private/var/run/resolv.conf</string>
</array>
</dict>
</plist>
Puedo ver que /private/var/run/resolv.conf cambia cuando se cambian las interfaces de red, pero las reglas de pf no se recargan en absoluto. Para su información, /Users/wwk/pf.conf está ahí y he habilitado /sbin/pfctl para que se ejecute sin solicitar contraseña a través del archivo /etc/sudoers. ¡Gracias de antemano!
Respuesta1
En realidad, fue porque mi nuevo demonio estaba en conflicto con el demonio pfctl predeterminado de Apple. Así que tuve que actualizar la lista de demonios pfctl predeterminada para observar las rutas que cambian cada vez que cambia la red. Agregue lo siguiente al/System/Library/LaunchDaemons/com.apple.pfctl.plist
<WatchPaths>
<array>
<string>/private/var/run/resolv.conf</string>
<string>/etc/pf.conf</string>
<string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string>
<string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
</array>
Por cierto, tenemos que habilitar los cambios en los archivos del sistema en $ csrutil disable
el modo de recuperación de macOS para realizar cambios en el archivo plist anterior. (debería hacerlo $ csrutil enable
después de los cambios necesarios en los archivos del sistema)