O NetworkManager pode:
-
atualize
resolv.conf
em si; -
delegue para
resolvconf
(para a interfaceNetworkManager
); -
ou use
netconfig
.
As diferentes configurações provenientes de cada interface são simplesmente agregadas (veja update_dns()
).
Se você não usar o NetworkManager para a VPN, poderá usar o modo openresolv
exclusivo ( -x
) para substituir os servidores de nomes de NetworkManager
pelos da VPN de adicioná-los. Isso pode ser feito com este (feio) script (gancho do OpenVPN):
#!/bin/sh
# Dump all foreign options (coming from environment variables foreign_option_N) to stdout
foreign_options() {
local i
i=1
while true; do
local varname=foreign_option_$i
local value="$(eval echo \$$varname)"
if [ -z "$value" ]; then
return
fi
echo $value
i=$((i+1))
done
}
#Create a resolv.conf file from OpenVPN environment variables
create_resolvconf() {
foreign_options | grep "^dhcp-option DNS " | sed "s/^dhcp-option DNS /nameserver /"
}
route_up() {
create_resolvconf | resolvconf -x -a $dev
}
down() {
resolvconf -d $dev
}
case "$script_type" in
route-up) route_up "$@" ;;
down) down "$@" ;;
esac
Você deve ser capaz de adaptar isso para ser usado como um script de despachante NetworkManager (veja man 8 NetworkManager) usando:
-
VPN_IP4_NAMESERVERS
-
VPN_IP6_NAMESERVERS
Eu não testei, mas algo assim deveria fazer o seguinte:
#!/bin/sh
create_resolvconf() {
for ip in $VPN_IP4_NAMESERVERS $VPN_IP6_NAMESERVERS; do
echo "nameserver $ip"
done
}
up() {
create_resolvconf | resolvconf -x -a $VPN_IP_IFAC
}
down() {
resolvconf -d $VPN_IP_IFAC
}
if [ -z "$VPN_IP_IFACE" ]; then
return 0
fi
case "$2" in
up) up ;;
down) down ;;
esac