web-dev-qa-db-fra.com

Est-il possible de supprimer ma passerelle par défaut de /etc/resolv.conf après une connexion VPN réussie?

J'ai configuré la connexion PPTP VPN sur Ubuntu 16.04.3 LTS via NetworkManager (plug-in nm-pptp-ppp) et tout fonctionne. Ma configuration:

  1. VPN
    • passerelle
    • Nom d'utilisateur
    • Mot de passe
    • Advanced - définit certaines options sur Options avancées PPTP
  2. Paramètres IPv4
    • Méthode : Adresses automatiques (VPN) uniquement
    • serveurs DNS : 192.168.1.1 (adresse IP interne de la passerelle par défaut du VPN)
  3. Settins IPv6
    • Méthode : Ignore

J'ai commenté #dns=dnsmasq dans /etc/NetworkManager/NetworkManager.conf, j'ai lancé Sudo dpkg-reconfigure resolvconf et Sudo resolvconf -u.

Sans connexion VPN, mon /etc/resolv.conf contient la ligne suivante:

nameserver 192.168.3.1

où 192.168.3.1 est l'adresse IP de mon routeur.
Après cela, la connexion VPN /etc/resolv.conf devient:

nameserver 192.168.1.1
nameserver 192.168.3.1

Mais pour autant que je sache, il ne devrait contenir que 192.168.1.1.

Est-il possible de supprimer par programme l'IP (192.168.3.1) de mon routeur de /etc/resolv.conf?
Je veux dire par répartiteur NetworkManager ou similaire.

Il semble que je n'ai pas le problème de fuite DNS avec ma configuration actuelle.

P.S. Je comprends que ma question a peut-être déjà été abordée, mais des doublons possibles ne répondent pas à mes besoins.

Mise à jour 1. Sur mon autre ordinateur portable 16.04, je devais également désactiver systemd-resolved.service avec:

Sudo systemctl stop systemd-resolved.service
Sudo systemctl disable systemd-resolved.service
1
N0rbert

Update 2 J'ai écrit un simple dispatch direct sale et je l'ai placé dans /etc/NetworkManager/dispatcher.d/03vpn:

#!/bin/sh -e
RESOLV_CONF=`readlink /etc/resolv.conf`
ROUTER_IP="nameserver 192.168.3.1"

logger -t DNS-antileak "start"
# disable local router IP in /etc/resolv.conf
if [ "$2" = "vpn-up" ]; then
    sed -i "s/$ROUTER_IP/#$ROUTER_IP/g" $RESOLV_CONF
    logger -t DNS-antileak "disabled $ROUTER_IP on vpn-up"
fi 

if [ "$2" = "vpn-down" ]; then
   sed -i "s/#$ROUTER_IP/$ROUTER_IP/g" $RESOLV_CONF
    logger -t DNS-antileak "enabled $ROUTER_IP on vpn-down"
fi 
logger -t DNS-antileak "end"

exit 0

Il peut être activé avec

Sudo chown root:root /etc/NetworkManager/dispatcher.d/03vpn
Sudo chmod 755 /etc/NetworkManager/dispatcher.d/03vpn

Je l'ai testé avec les connexions OpenVPN et PPTP.

J'ai aussi trouvé d'autres tests de fuite de DNS: Whoer et WhatLeaks .

1
N0rbert

Il s'agit d'un bogue bien connu de NetworkManager, en particulier # 121111 . Cela remonte à Ubuntu 13.04 jusqu’à 16.04 et dans une moindre mesure à Ubuntu 16.10.

Il semble que je n'ai pas de problème de fuite de DNS avec ma configuration actuelle.

Alors considérez-vous plutôt chanceux. :) La plupart des utilisateurs (y compris moi-même) ont connu de graves fuites DNS et ont essayé différentes solutions pour les résoudre.

Voici quelques approches suggérées dans le rapport de bug (résumé):

Commentaire # 22 par Mac Bassett

Faites une copie de sauvegarde de ce fichier NetworkManager:

Sudo cp /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig

Ajoutez les 3 lignes suivantes au fichier.

#!/bin/bash
/etc/openvpn/update-resolv-conf $@
/usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig $@

Ensuite:

Sudo chmod +x /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper

Mise en garde: vous devez exécuter la commande suivante après avoir déconnecté le VPN.

Sudo script_type=down dev=tun0 /etc/openvpn/update-resolv-conf

Commentaires # 27 et # 29 par moi-même

Modifiez votre connexion VPN (via NM) et configurez un DNS statique, par exemple à l'aide de serveurs Google:

8.8.8.8, 8.8.4.4

De cette façon, la demande DNS est envoyée via une adresse IP externe et est donc acheminée à l'aide du VPN.

Ensuite, configurez également votre connexion sans fil pour utiliser ces serveurs DNS statiques.

Commentaire # 31 par DaveHenson

Exécutez openvpn via la ligne de commande.


(... d'autres solutions encombrantes dont je ne discuterai pas ici ...)


Commentaire # 81 par Çağatay Yüksel

Supprimer ce fichier de configuration:

Sudo rm -rf /etc/resolv.conf

Ajoutez cette ligne à la section [main] de /etc/NetworkManager/NetworkManager.conf:

dns=dnsmasq

Si le package dnsmasq est installé, vous devez vous assurer que le service dnsmasq n'est pas activé, sinon cela ne fonctionnera pas. Vous devriez également redémarrer.

La vraie solution

Ce bug a été corrigé dans Ubuntu 17.04 . Plutôt que d'essayer des correctifs aléatoires sur votre système, il est probablement préférable de procéder simplement à une mise à niveau. :)

2
Andrea Lazzarotto