Por que meu DNS do ISP ainda está no resolv.conf após uma conexão VPN e como isso pode ser corrigido?

3

Ubuntu 15.10 e dns = dnsmasq está comentado em /etc/NetworkManager/NetworkManager.conf

Antes de me conectar a uma VPN /etc/resolv.conf contém

nameserver 2xx.xx.xx.xx <-- ISP DNS 1
nameserver 2xx.xx.xx.xx <-- ISP DNS 2

após uma conexão VPN /etc/resolv.conf contém

nameserver 1xx.xx.xx.xx <-- VPN DNS 1
nameserver 1xx.xx.xx.xx <-- VPN DNS 2
nameserver 2xx.xx.xx.xx <-- ISP DNS 1

A conexão com fio regular e a VPN possuem servidores DNS definidos no gerenciador de rede com endereços automáticos (somente endereços). O servidor ISP não deveria estar lá. O que mais posso mudar? (remover dns = dnsmasq foi uma mudança para parar o DNS dividido).

    
por user157600 21.02.2016 / 22:09

1 resposta

0

O NetworkManager pode:

  • atualize resolv.conf em si;

  • delegue para resolvconf (para a interface NetworkManager );

  • 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
    
por 22.02.2016 / 01:00