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