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.