VPN 연결 후에도 ISP DNS가 여전히 resolv.conf에 있는 이유는 무엇입니까? 이 문제를 해결하는 방법?

VPN 연결 후에도 ISP DNS가 여전히 resolv.conf에 있는 이유는 무엇입니까? 이 문제를 해결하는 방법?

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

관련 정보