web-dev-qa-db-fra.com

Client OpenVPN ne recevant pas d'informations DNS

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"?

3
lorandsm

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
3
Garikai Dzoma

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).

0
Vanessa Deagan