Ubuntu 15.10 および dns=dnsmasq は /etc/NetworkManager/NetworkManager.conf でコメントアウトされました。
VPNに接続する前に/etc/resolv.confが含まれています。
nameserver 2xx.xx.xx.xx <-- ISP DNS 1
nameserver 2xx.xx.xx.xx <-- ISP DNS 2
VPN接続後、/etc/resolv.confには以下が含まれます。
nameserver 1xx.xx.xx.xx <-- VPN DNS 1
nameserver 1xx.xx.xx.xx <-- VPN DNS 2
nameserver 2xx.xx.xx.xx <-- ISP DNS 1
一般的な有線接続とVPNには、Network Managerに自動DNSサーバー(アドレスのみ)が設定されています。 ISP サーバーがまったく存在してはいけません。また何を変えることができますか? (dns = dnsmasqを削除するとDNS分割が停止します。)
答え1
NetworkManagerは次のことができます。
resolv.conf
自己更新resolvconf
(NetworkManager
インターフェース用)に委任する。またはを使用してください
netconfig
。
各インターフェースのさまざまな構成は簡単に集計されます(参考資料を参照update_dns()
)。
そうすればいいえNetworkManagerをVPNとして使用すると、openresolv
排他モード(-x
)を使用してNetworkManager
ネームサーバーを追加する代わりに、VPNのネームサーバーで上書きできます。これでやればいい(醜い)スクリプト(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
次のコマンドを使用して、NetworkManagerスケジューラスクリプトに適用できます(man 8 NetworkManagerを参照)。
VPN_IP4_NAMESERVERS
VPN_IP6_NAMESERVERS
私はそれをテストしていませんが、次のようなトリックを実行する必要があります。
#!/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