Skip to content


Correction de la résolution des noms (DNS) avec OpenVPN

Introduction

Dans le cadre de mon travail j'ai dû étudier et fixer pourquoi certains collaborateurs sous GNU/Linux (Mageia, Ubuntu, Debian) ne résolvaient pas les nom des machines lorsqu'ils étaient connectés en VPN avec OpenVPN.

Après étude il semblait bien que le fichier /etc/resolv.conf de leur machine n'intégrait pas les entrées des DNS de notre société....

Résolution

La solution tient en l'installation du paquet "resolvconf" qui rend dynamique le contenu de /etc/resolv.conf et dans la création de deux fichiers éxécutables.

apt-get install resolvconf

Une fois installé celui-ci n'est pas encore capable de voir les informations que OpenPVN transmet au client....

Il faut créer des fichiers :

- update-resolv-conf.up

#!/bin/bash
#
# Parses DHCP options from openvpn to update resolv.conf
# To use set as 'up' and 'down' script in your openvpn *.conf:
# up /etc/openvpn/update-resolv-conf.up
# down /etc/openvpn/update-resolv-conf.down
 
# Récupération des variables inclues dans le fichier
# pour les sauvegarder
DOMAIN=$(grep domain /etc/resolv.conf)
SEARCH=$(grep search /etc/resolv.conf | awk '{print $0}' | sed "s/search//g")
NAMESRV=$(grep nameserver /etc/resolv.conf)
 
# Récupération des options envoyées par OpenVPN serveur
  for optionname in ${!foreign_option_*} ; do
      option="${!optionname}"
      echo $option
      part1=$(echo "$option" | cut -d " " -f 1)
      if [ "$part1" == "dhcp-option" ] ; then
          part2=$(echo "$option" | cut -d " " -f 2)
          part3=$(echo "$option" | cut -d " " -f 3)
          if [ "$part2" == "DNS" ] ; then
              IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3"
          fi
          if [ "$part2" == "DOMAIN" ] ; then
              IF_DNS_SEARCH="$part3"
          fi
      fi
  done
  R=""
  if [ "$IF_DNS_SEARCH" ] ; then
      R="${R}search $IF_DNS_SEARCH$SEARCH
"
  fi
  for NS in $IF_DNS_NAMESERVERS ; do
      R="${R}nameserver $NS
"
  done
 
# Nous backupons le fichier
if [ -x /etc/resolv.conf.bak ]; then
  rm -f /etc/resolv.conf.bak
fi
mv /etc/resolv.conf /etc/resolv.conf.bak
 
# Et en créons un nouveau
echo "$DOMAIN
$R
$NAMESRV
" > /etc/resolv.conf

- update-resolv-conf.down

#!/bin/bash
#
# Parses DHCP options from openvpn to update resolv.conf
# To use set as 'up' and 'down' script in your openvpn *.conf:
# up /etc/openvpn/update-resolv-conf.up
# down /etc/openvpn/update-resolv-conf.down
# Hacked by lolo
 
mv /etc/resolv.conf.bak /etc/resolv.conf

Il faut rendre exécutables ces deux fichiers

chmod +x update-resolv-conf*

et les mettre dans /etc/openvpn/

mv update-resolv-conf* /etc/openvpn/

Modification de votre fichier de configuration OpenVPN client

Il faut ajouter alors les deux lignes suivantes

up /etc/openvpn/update-resolv-conf.up
down /etc/openvpn/update-resolv-conf.down

Vous devriez avoir une sortie identique :

Sun Feb 10 11:36:35 2013 /etc/openvpn/update-resolv-conf.up tun1 1500 1544 ip ip init
dhcp-option DNS ip
dhcp-option DNS ip
dhcp-option DOMAIN domain.local
Sun Feb 10 11:36:37 2013 /sbin/route add -net 10.0.0.0 netmask 255.255.252.0 gw ip
Sun Feb 10 11:36:37 2013 /sbin/route add -net 10.0.4.0 netmask 255.255.252.0 gw ip
Sun Feb 10 11:36:37 2013 /sbin/route add -net 172.16.1.0 netmask 255.255.255.0 gw ip
Sun Feb 10 11:36:37 2013 Initialization Sequence Completed

Voilà !

- Fin -

Print Friendly, PDF & Email

Posted in Important, Linux, Technique, Toutes. Tagged with , , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.

Time limit is exhausted. Please reload CAPTCHA.


/* */
Creative Commons License
Cette création par Laurent Besson est mise à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.