Ubuntu 18.04 pas de résolution DNS lors de la connexion à openvpn

Lorsque je me connecte à un réseau VPN via Gnome Network-Manager, je perds la résolution DNS et, en pratique, je ne peux pas accéder aux ressources à l’intérieur ou à l’extérieur du réseau VPN.

Lorsque j’utilisais Ubuntu 16.04 et le VPN, le fichier /etc/resolv.conf/ contenait les serveurs DNS du réseau (VPN) que j’avais connecté. Maintenant, il contient toujours les entrées suivantes:

 nameserver 127.0.0.53 search myprovider.com 

D’après ce que j’ai compris, 127.0.0.53 est l’adresse du stub DNS utilisé par le system-resolved .

Je soupçonne qu’il s’agit d’un bogue, car le VPN fonctionnait bien sous Ubuntu 16.04. Est-il possible de configurer les serveurs DNS de mon réseau lorsque j’utilise le service VPN?

Mettre à jour:

J’ai essayé de me connecter au réseau openvpn avec le fichier de configuration joint à la fin du message, mais le message d’erreur suivant s’affiche:

  Authenticate/Decrypt packet error: cipher final failed 

J’ai vérifié que le serveur utilise la compression lzo et je l’ai également activé. La connexion rest active mais je ne peux accéder à aucune page à l’intérieur ou à l’extérieur du vpn.

Dans le fichier de configuration indiqué ci-dessous, j’ai inclus les solutions postées dans les réponses.

  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 

J’ai trouvé une solution sur ce blog . Bien que deux solutions soient mentionnées, je préfère utiliser la seconde car cela signifie que mon DNS est défini par le serveur OpenVPN (la première solution signifie que j’utilise les mêmes serveurs DNS, que je sois connecté ou non au serveur OpenVPN).

En bref:

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

Ensuite, éditez votre fichier client OpenVPN (par exemple, client.ovpn) en modifiant les scripts up / down en:

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

(J’ai commenté les réglages originaux haut / bas).

Problème

Le fichier /etc/resolv.conf n’est pas mis à jour par le /etc/openvpn/update-resolv-conf car resolvconf n’est pas installé par défaut sur Ubuntu 18.04.

En fait, l’une des premières lignes de ce script recherche l’exécutable /sbin/resolvconf :

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

L’installation de resolvconf via apt-get n’est pas une solution, car le /etc/openvpn/update-resolv-conf met à jour le fichier /etc/resolv.conf avec l’entrée DNS /etc/resolv.conf mais le périphérique tun semble l’ignorer.

Solution

  1. Ubuntu 18.04 utilise la systemd-resolved , il vous suffit donc d’installer le script d’aide openvpn pour la systemd-resolved via

     sudo apt install openvpn-systemd-resolved 

    ou avec ces instructions GitHub

  2. Mettez à jour votre fichier config.ovpn en ajoutant ces lignes:

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

    Cela au lieu d’append / descendre de /etc/openvpn/update-resolv-conf à la conf.

  3. Pour éviter les fuites DNS, vous devez append cette ligne à la fin du fichier (en fonction du commentaire de ce problème systemd ):

     dhcp-option DOMAIN-ROUTE . 

En fait, il existe une solution beaucoup plus facile à ce problème. Le problème est lié au trafic DNS et à la manière dont Ubuntu 18 le gère. Par défaut, le transfert IP est désactivé, ce dont OpenVPN a besoin pour fournir un réseau adéquat. Tout ce que vous avez à faire est d’exécuter la commande suivante:

 sudo nano /etc/sysctl.conf 

Une fois ce fichier ouvert, recherchez la ligne contenant net.ipv4.ip_forward . Si cette ligne est commentée, supprimez le signe # au début de la ligne (si elle n’est pas commentée, vous avez un autre problème). Enregistrez le fichier, puis redémarrez votre instance de serveur OpenVPN.

Ce correctif ne nécessite aucune modification du code client ou OpenVPN après la mise à niveau vers Ubuntu 18. Testé et confirmé fonctionnant.

Je suis aussi touché. Dans mon cas, j’utilise OpenVPN avec un serveur de noms interne (situé à l’intérieur du VPN). Cela a fonctionné jusqu’à Ubuntu 17.10 (avec “hosts: files dns” dans /etc/nsswitch.conf).

Le fichier /etc/resolv.conf a été mis à jour correctement par les scripts openvpn (via les appels à / etc / openvpn / update-resolv-conf dans le fichier de configuration du client openvpn).

Cependant, la résolution de noms pour les hôtes du VPN ne fonctionnait plus (ou du moins de façon sporadique … Je suppose que le cache DNS local choisissait les noms, mais après un temps assez long).

Ce qui semble aider, voire résoudre le problème (bien que ce soit trop tôt pour le dire) est d’installer le paquet ci-dessous:

sudo apt install openvpn-systemd-résolu

Dans quelques jours, j’aurai plus d’expérience pour savoir si cela résout mon problème ou non.

Si vous êtes également concerné, veuillez essayer ceci et poster des commentaires!

À votre santé,

Michael.

Testé sur Ubuntu le 18.04 au 13 septembre 2018.

Il existe d’autres commandes utiles pour configurer ce dont vous avez besoin via une ligne de commande. Mais dans mon cas, vous pouvez contrôler votre connexion VPN à la fois avec la ligne de commande et l’interface graphique.

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

ifname -- est requirejs par défaut, mais n’affecte rien

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 ne doit pas utiliser la passerelle distante comme route par défaut

Et beaucoup plus intéressé touche finale:

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'

Ensuite, vous pouvez contrôler vpn avec une interface graphique ou utiliser les commandes suivantes:

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