Ubuntu 18.04 sem resolução DNS quando conectado ao openvpn

40

Quando me conecto a uma rede VPN através do Gnome Network-manager, perco a resolução do DNS e, na prática, não consigo acessar recursos dentro ou fora da rede VPN.

Quando eu estava usando o Ubuntu 16.04 e a VPN, o /etc/resolv.conf/arquivo " " continha os servidores DNS da rede (VPN) que eu havia conectado. Agora, ele sempre contém as seguintes entradas:

nameserver 127.0.0.53
search myprovider.com

Pelo que entendi 127.0.0.53é o endereço do stub DNS usado pelo system-resolved.

Eu suspeito que isso seja um bug porque a VPN estava funcionando bem no Ubuntu 16.04. Existe alguma maneira de definir os servidores DNS da minha rede quando estou usando um serviço VPN?

Atualizar:

Tentei me conectar à rede OpenVPN com o arquivo de configuração anexado no final da postagem, mas recebo o seguinte erro:

 Authenticate/Decrypt packet error: cipher final failed

Eu verifiquei que o servidor usa a compactação lzo e também a habilitei. A conexão permanece ativa, mas não consigo navegar para nenhuma página dentro ou fora da VPN.

No arquivo de configuração listado abaixo, incluí as soluções postadas nas respostas

 client
 dev tun
 proto udp
 remote openvpn.bibsys.no 1194
 remote my-server-2 1194
 resolv-retry infinite
 nobind
 user myuser
 group myuser
 persist-key
 persist-tun
 ca ca-cert.pem
 cert openvpn.crt
 key openvpn.key
 cipher AES-256-CBC
 comp-lzo yes
 script-security 2
 up /etc/openvpn/scripts/update-systemd-resolved
 down /etc/openvpn/scripts/update-systemd-resolved
 down-pre
orestis
fonte
1
Ao depurar um problema semelhante a este que não pôde ser resolvido exatamente da mesma maneira, usei resolvectl statuse resolvectl helpdescobri minha solução específica.
notbad.jpeg 9/04

Respostas:

27

Encontrei uma solução nesta postagem do blog . Embora haja duas soluções mencionadas, prefiro usar a segunda porque significa que meu DNS é definido pelo servidor OpenVPN (a primeira solução significa que eu uso os mesmos servidores DNS, estando ou não conectado ao servidor OpenVPN).

Em resumo:

  • sudo mkdir -p /etc/openvpn/scripts
  • sudo wget https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/master/update-systemd-resolved -P /etc/openvpn/scripts/
  • sudo chmod +x /etc/openvpn/scripts/update-systemd-resolved

Em seguida, edite seu arquivo de cliente OpenVPN (por exemplo, client.ovpn) alterando os scripts para cima / para baixo para:

script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
up /etc/openvpn/scripts/update-systemd-resolved
down /etc/openvpn/scripts/update-systemd-resolved

(Comentei as configurações originais para cima / baixo).

Andy Turfer
fonte
Se alguém estiver usando o utilitário gnome openvpn, onde o arquivo config.ovpn deve ser armazenado?
Orestis
1
config.ovpnnão foi "encontrado" - é o arquivo de configuração do cliente usado para a conexão. Você o gera ou é emitido pelo seu provedor OpenVPN (e pode não ser chamado config.ovpn- pode ser chamado de qualquer coisa, por exemplo client.ovpn).
Andy Turfer
Isso funciona perfeitamente.
Ahsanul Haque 16/01
2
Eu receboWARNING: Failed running command (--up/--down): external program fork failed
blockhead
Infelizmente, isso não funcionou para uma VPN que está usando o TCP, sites fora da VPN não foram resolvidos; portanto, comecei a usar o client.pritunl.com/#install considerado útil
Saisurya Kattamuri
49

Problema

O arquivo /etc/resolv.confnão é atualizado pelo /etc/openvpn/update-resolv-confscript porque resolvconfnão é instalado por padrão no ubuntu 18.04.

De fato, uma das primeiras linhas desse script verifica o /sbin/resolvconfexecutável:

[ -x /sbin/resolvconf ] || exit 0

Instalar resolvconf via apt-getnão é uma solução, pois o /etc/openvpn/update-resolv-confscript atualiza o /etc/resolv.confarquivo com a entrada DNS enviada, mas o dispositivo tun parece ignorá-lo.

Solução

  1. O Ubuntu 18.04 usa systemd-resolved, então tudo que você precisa fazer é instalar o script auxiliar openvpn por systemd-resolvedmeio de

    sudo apt install openvpn-systemd-resolved
    

    ou com estas instruções do GitHub

  2. Atualize seu config.ovpnarquivo adicionando estas linhas:

    script-security 2
    up /etc/openvpn/update-systemd-resolved
    down /etc/openvpn/update-systemd-resolved
    down-pre
    

    Isso em vez de somar para cima e para baixo /etc/openvpn/update-resolv-confno conf.

  3. Para evitar vazamento de DNS, você deve adicionar esta linha ao final do config.ovpnarquivo (de acordo com este comentário de problema do systemd ):

    dhcp-option DOMAIN-ROUTE .
    
Qlimax
fonte
1
Muito obrigado, trabalhando para mim no Ubuntu 18.04. E eu quero especificar, esse parâmetro script-security 2ainda é necessária antes up / down linhas, caso contrário o programa cai com um erro (OpenVPN 2.4.4)
lucidyan
Fico feliz que ajudou :) Mudou a última frase na resposta, com no meu caso script-security 2 não era necessário. Isso é talvez porque eu estou correndo o cliente OpenVPN como root (com sudo)
Qlimax
1
@Qlimax Você sabe como importamos essas configurações para o cliente gnome openvpn?
Orestis
2
@orestis você precisa instalar este pacote sudo apt-get install network-manager-openvpn-gnome Então você deve poder importar arquivos de configuração .ovpn para o gerenciador de rede do gnome. askubuntu.com/questions/187511/… A interface do usuário mudou ao longo do tempo, você deve descobrir que em configurações-> rede-> vpn
Qlimax
1
Surpreendeu que isso funcione para muitos de vocês: Eu tenho um ovpn.config, sim, mas o NetworkManager parece não usá-lo. Você editou o arquivo e o reimportou, em particular para substituir os scripts de up / downs. Porque eu vejo esse binário opaco / usr / lib / NetworkManager / nm-openvpn-service-openvpn-helper usado para o qual não consegui encontrar documentação. Se for necessária a reimportação de ovpn.config, altere a resposta.
Harald
5

Na verdade, há uma solução muito mais fácil para esse problema. A questão é com o tráfego DNS e como o Ubuntu 18 gerencia isso. Por padrão, o encaminhamento de IP é desativado, e é disso que o OpenVPN precisa para fornecer uma rede adequada. Tudo o que você precisa fazer é executar o seguinte comando:

sudo nano /etc/sysctl.conf

Depois de abrir esse arquivo, procure a linha que contém net.ipv4.ip_forward. Se esta linha for comentada, remova o sinal # na frente da linha (se não estiver comentado, você terá outro problema). Salve o arquivo e, em seguida, reinicie sua instância do servidor OpenVPN.

Esta correção não requer nenhuma modificação no cliente ou no código OpenVPN após a atualização para o Ubuntu 18. Funcionamento testado e confirmado.

No entanto, isso obviamente requer que você possa administrar o servidor. E, infelizmente, o bug existe para muitos que se conectam com o 18.04 a um servidor OpenVPN que é administrado por outra pessoa ...

Máx.
fonte
não funcionou para mim. como você determinou que esse era o problema, no seu caso?
hwjp
AVISO: você não precisa ativar o ip_forward no cliente openvpn , NUNCA! é um risco de segurança. No servidor openvpn , você pode precisar dele, dependendo da configuração usada e é provavelmente por isso que esse comentário aparece.
higuita
Foi isso para mim. Questão estranha. Obrigado.
Kevin C
2

Testado no Ubuntu 18.04 em 13 set 2018

Existem outros comandos úteis para configurar o que você precisa via linha de comando. Mas no meu caso, você pode controlar sua conexão VPN com linha de comando e GUI.

sudo nmcli connection add type vpn vpn-type openvpn con-name la.vpn.contoso.com ifname --

ifname -- é o exigido por padrão, mas não afeta nada

sudo nmcli connection modify la.vpn.contoso.com ipv4.dns 172.16.27.1 sudo nmcli connection modify la.vpn.contoso.com ipv4.dns-search int.contoso.com sudo nmcli connection modify la.vpn.contoso.com ipv4.never-default yes

never-default não deve usar gateway remoto como rota padrão

E toque final muito mais interessado:

nmcli connection modify la.vpn.contoso.com vpn.data 'ca = /tmp/la.vpn.contoso.com/you/ca.crt, key = /tmp/you.key, dev = tun, cert = /tmp/you.crt, cert-pass-flags = 1, comp-lzo = adaptive, remote = la.vpn.contoso.com:1194, connection-type = tls'

Depois, você pode controlar o vpn com GUI ou usar os seguintes comandos:

sudo nmcli --ask connection up la.vpn.contoso.com sudo nmcli connection down la.vpn.contoso.com

vskubriev
fonte
0

Eu também estou impactado. No meu caso, estou usando o OpenVPN com um servidor de nomes interno (que está dentro da VPN). Isso funcionou até o Ubuntu 17.10 (com "hosts: files dns" em /etc/nsswitch.conf).

O arquivo /etc/resolv.conf foi atualizado corretamente pelos scripts openvpn (por meio de chamadas para / etc / openvpn / update-resolv-conf no arquivo de configuração do cliente openvpn).

No entanto, a resolução de nomes para hosts dentro da VPN não estava mais funcionando (ou pelo menos esporadicamente ... acho que o cache DNS local estava escolhendo os nomes, mas depois de muito tempo).

O que parece ajudar, ou mesmo resolver o problema (embora seja muito cedo para dizer) é instalar o pacote abaixo:

O sudo apt instala o openvpn-systemd-resolved

Dentro de alguns dias, terei mais experiência se isso corrige meu problema ou não.

Se você também foi impactado, tente isso e poste comentários!

Felicidades,

Michael.

Michael Opdenacker
fonte
Eventualmente, não parece ser uma solução. Estou com o problema novamente. Eu acho que outra coisa fez o trabalho ...
Michael Opdenacker
1
Talvez você exclua sua resposta? Parece que a decisão já foi encontrada abaixo
lucidyan