J'utilise un serveur OpenVPN exécuté sur un routeur installé avec DD-WRT et je l'utilise pour acheminer tout le trafic via le serveur VPN. Je m'y connecte à partir de plusieurs appareils :ordinateur portable Windows, appareils Android 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 sous Linux (ubuntu 16.04). Le client Ubuntu n'obtient 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é, j'ai donc ajouté :
dhcp-option DNS a.b.c.d
dhcp-option DNS e.f.g.h
Les adresses IP sont extraites du routeur et cela fait fonctionner les choses. Jusqu'à présent, il suffisait d'avoir "redirect-gateway def1" dans la configuration du client.
Je n'aime pas cette solution d'ajout des commandes "dhcp-option DNS" car je dois surveiller tout changement du serveur DNS. Existe-t-il un moyen de se débarrasser de l'ajout de l'option "dhcp-option DNS" ?
Réponse acceptée :
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 exécutez sudo chmod +x /etc/openvpn/up.sh
Créez ensuite un autre fichier /etc/openvpn/down.sh
et collez-y ce qui suit
#! /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 exécutez sudo chmod +x /etc/openvpn/down.sh
Supprimez maintenant 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