Configuration du client openvpn sur wheezy
Utiliser le serveur DHCP et les DNS du réseau distant
Aprés quelques jours de lutte j’ai enfin réussi à configurer proprement mon client pour mettre ma machine sur le réseau distant.
La configuration du client openvpn fonctionnait bien sur tunnelblick(OSX) et OpenVpnGUI (Windows) mais m’a donnée du fil à retordre sur Debian pour avoir quelque chose d’automatisé. surtout au niveau du serveur DHCP et du serveur de noms du réseau privé.
1) Configuration du serveur openvpn
Pour info, voici le fichier de configuration du serveur en mode bridge afin de fournir les infos DHCP et DNS du réseau :
server.conf
- port 1194
- proto tcp
- dev tap0
- ca ca.crt
- cert server.crt
- key server.key
- dh dh1024.pem
- server-bridge
- ### Envoyer les infos DHCP au clients ###
- push "dhcp-option DNS 192.168.122.1"
- push "dhcp-option DOMAIN domain.loc"
- keepalive 10 120
- comp-lzo
- max-clients 8
- persist-key
- persist-tun
- status openvpn-status.log
- log-append /var/log/openvpn.log
- user openvpn
- group openvpn
- persist-key
- persist-tun
- status openvpn-status.log
- verb 3
- username-as-common-name
2) Configuration du client openvpn
Ci-dessous la configuration client nommer client.conf. J’insiste sur L’extension, car le script de démarrage d’openvpn va lire les fichiers aux extension *.conf et demarrer autant de tunnel que de fichier .conf
client.conf
- client
- dev tap0
- proto tcp
- remote xxxxxxx.com 1194 #IP PORT
- resolv-retry infinite
- nobind
- persist-key
- persist-tun
- ca ca.crt
- cert server.crt
- key server.key
- comp-lzo
- auth-user-pass
- verb 3
- auth-user-pass login.txt
- log-append /var/log/openvpn.log
- #IMPORTANT pour obtenir une adresse IP du serveur réseau dhcp distant
- #Installer le paquet resolvconf pour debian
- script-security 2
- up update-resolv-conf
- down update-resolv-conf
On peux tester la config et suivre les logs :
3) Obtenir l’adresse IP et le DNS via le DHCP du vpn
Lorsque le service openvpn se connect il démarre pas l’interface tap0 je devais taper les commandes suivantes :
4) Automatiser l’obtention de l’IP et du DNS
Pour utiliser le script ci-dessous il est important d’installer le paquet resolvconf
- apt-get install resolvconf
Pour automatiser toute la procédure de connexion j’ai modifié le script update-resolv-conf dans /etc/openvpn
/etc/openvpn/update-resolv-conf : L 31 -> 36
- ### RESOLVCONF DOIT ETRE INSTALLE ###
- [ -x /sbin/resolvconf ] || exit 0
- case $script_type in
- up)
- 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="$IF_DNS_SEARCH $part3"
- fi
- fi
- done
- R=""
- for SS in $IF_DNS_SEARCH ; do
- R="${R}search $SS
- "
- done
- for NS in $IF_DNS_NAMESERVERS ; do
- R="${R}nameserver $NS
- "
- done
- # Recupere les DNS du VPN
- echo -n "$R" | /sbin/resolvconf -a "${dev}.inet"
- # Démarrer l'interface passé en paramètre du script (voir dev tapxx ds cfg)
- /sbin/ifconfig ${dev} up
- sleep 3
- # Demander une IP au Serveur DHCP au reseau PV
- (
- /sbin/dhclient ${dev} &
- )
- ;;
- down)
- /sbin/resolvconf -d "${dev}.inet"
- ;;
- esac
Et voilà, désormais un simple service openvpn start
connecte directement la machine au réseau privé et récupère une ip en dhcp.
A noter que le service démarre automatiquement au boot de la machine.