J'utilise un serveur OpenVPN s'exécutant sur un routeur installé avec DD-WRT et je l'utilise pour acheminer tout le trafic via le serveur VPN. Je me connecte à celui-ci à partir de plusieurs périphériques: ordinateur portable Windows, Android périphériques et machines Linux. Le problème que j'ai maintenant est récent et auparavant tout fonctionnait bien. Ce problème ne se produit que sur les machines clientes avec Linux (Ubuntu 16.04). Le client Ubuntu ne reçoit pas automatiquement les adresses du serveur DNS. Après quelques recherches, j'ai découvert que je devrais ajouter ce qui suit à la fin de la configuration du client:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Cela n'a pas aidé alors j'ai ajouté aussi:
dhcp-option DNS a.b.c.d
dhcp-option DNS e.f.g.h
Les adresses IP sont extraites du routeur et cela permet de faire fonctionner les choses. Jusqu'à présent, il suffisait d'avoir "redirect-gateway def1" dans la configuration du client.
Je n'aime pas cette solution consistant à ajouter les commandes "dhcp-option DNS" car je dois surveiller les modifications éventuelles du serveur DNS. Existe-t-il un moyen de se débarrasser de l’ajout de l’option "dhcp-option DNS"?
J'ai eu le même problème mais j'ai réussi à le résoudre en utilisant le hack suivant: Au lieu de up /etc/openvpn/update-resolv-conf
, j'ai créé un fichier nommé up.sh dans/etc/openvpn. Exécutez la commande Sudo gedit /etc/openvpn/up.sh
et collez ce qui suit:
#! /bin/bash
DEV=$1
if [ ! -d /tmp/openvpn ]; then
mkdir /tmp/openvpn
fi
CACHE_NAMESERVER="/tmp/openvpn/$DEV.nameserver"
echo -n "" > $CACHE_NAMESERVER
dns=dns
for opt in ${!foreign_option_*}
do
eval "dns=\${$opt#dhcp-option DNS }"
if [[ $dns =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
if [ ! -f /etc/resolv.conf.default ]; then
cp /etc/resolv.conf /etc/resolv.conf.default
fi
cat /etc/resolv.conf | grep -v ^# | grep -v ^nameserver > /tmp/resolv.conf
echo "nameserver $dns" >> /tmp/resolv.conf
echo $dns >> $CACHE_NAMESERVER
cat /etc/resolv.conf | grep -v ^# | grep -v "nameserver $dns" | grep nameserver >> /tmp/resolv.conf
mv /tmp/resolv.conf /etc/resolv.conf
fi
done
Enregistrez-le et lancez Sudo chmod +x /etc/openvpn/up.sh
Puis créez un autre fichier /etc/openvpn/down.sh
et collez-y le texte suivant
#! /bin/bash
echo "Restoring original nameservers"
rm -f /etc/resolv.conf
ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
echo "Done restoring nameservers cheers"
Enregistrez-le et lancez Sudo chmod +x /etc/openvpn/down.sh
Maintenant, supprimez les lignes:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Et remplacez-les par:
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
Editez votre /etc/systemd/resolved.conf - ajoutez une entrée DNS:
DNS=8.8.8.8 8.8.4.4
Si vous perdez votre DNS lorsque vous établissez ou arrêtez votre connexion OpenVPN, exécutez:
Sudo systemctl restart systemd-resolved
(pourrait probablement le transférer dans un script haut/bas pour votre connexion OpenVPN).