Openvpn
OpenVPN c'est quoi ? Voir WikiPedia.
En résumé, c'est une façon de se connecter depuis un ordinateur ou smartphone sur un autre équipement équipé en mode serveur, afin de pouvoir y accéder depuis l'extérieur de façon totalement sécurisé : tous les échanges sont chiffrés. Il est même possible d'avoir ainsi une adresse IP sur le LAN de l'équipement sur lequel on est connecté, et donc d'être vu comme une machine de ce LAN... Par exemple, d'avoir une adresse IP française aux Etats-Unis et inversement.
OpenVPN existe sur tous les environnements.
Installation
Pour réaliser cet article, j'ai utilisé les pages suivantes :
- OpenVPN sur le Wiki Debian : https://wiki.debian.org/OpenVPN
- Exemples de configuration sur le site OpenVPN : http://openvpn.net/index.php/open-source/documentation/howto.html#examples
Installer un Serveur OpenVPN
- J'ai pris un abonnement chez OVH pour un abonnement VPS à 2,39 euro par mois. Le débit est confortable (100 Mbps) et le volume de 10 To largement assez confortable.
- Une fois le serveur installé par OVH, il faut se connecter en SSH via root@<adresse IP> puis utiliser le mot de passe envoyé par OVH.
- Inutile de faire les traditionnels update et upgrade. OVH livre une machine Debian parfaitement à jour.
- Installer le serveur OpenVPN et les librairies OpenSSL :
apt-get install openvpn openssl resolvconf lsof
- Commençons par générer une clé statique, juste pour tester le VPN :
openvpn --genkey --secret static.key cd /etc/openvpn/
- Reprendre le contenu de la page https://wiki.debian.org/OpenVPN. Par contre, quelques modifications s'imposent (ou pas). Pour ma machine chez OVH, j'ai remplacé eth0 par venet0:0, et j'ai utilisé les adresses 192.168.100.1 et 192.168.100.2 pour les deux machines serveur et client. Effectivement, un
ifconfig renvoie
root@vps141296:/etc/openvpn# ifconfig lo Link encap:Boucle locale inet adr:127.0.0.1 Masque:255.0.0.0 adr inet6: ::1/128 Scope:Hôte UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:127 errors:0 dropped:0 overruns:0 frame:0 TX packets:127 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:22320 (21.7 KiB) TX bytes:22320 (21.7 KiB) venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet adr:127.0.0.2 P-t-P:127.0.0.2 Bcast:0.0.0.0 Masque:255.255.255.255 adr inet6: 2001:41d0:52:800::90f/56 Scope:Global UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:43022 errors:0 dropped:0 overruns:0 frame:0 TX packets:6574 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:62345272 (59.4 MiB) TX bytes:481097 (469.8 KiB) venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet adr:<IP ADDRESSE DU SERVEUR> P-t-P:X.Y.Z.T Bcast:X.Y.Z.255 Masque:255.255.255.0 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
- Les premiers tests sont concluants, le VPN monte bien, mais sans routage, l'adresse IP reste locale, et non celle du serveur distant.
- Pour faire les tests, je recommande d'utiliser des fichiers de configuration au format .conf aussi bien coté serveur que coté client.
# Sur le serveur, en root :
openvpn /etc/openvpn/config.conf --verb 6
# Sur le client (Linux de préférence)
sudo openvpn /etc/openvpn/config.conf --verb 6
Routage
C'est la partie la plus ardue, celle qui me permet de bénéficier d'une adresse IP française depuis les Etats-Unis, et donc d'accéder dans les meilleures conditions aux programmes proposés par les chaines de télévision françaises.
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o venet0:0 -j MASQUERADE
J'ai aussi crée le fichier suivant :
#/etc/network/interfaces.tail
post-up iptables -t nat -A POSTROUTING -o -venet0 -s 192.168.100.1/24 -j MASQUERADE
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
Afin de rendre ces règles persistantes, j'ai ajouté le paquet iptables-persistent à mon serveur VPS
apt-get install iptables-persistent
Configuration serveur
# /etc/openvpn/serveur.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt # generated keys
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key # keep secret
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 192.168.100.0 255.255.255.0
keepalive 10 120
duplicate-cn
comp-lzo # Compression - must be turned on at both end
persist-key
persist-tun
status log/openvpn-status.log
verb 6 # verbose mode
client-to-client
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 4.4.4.4"
Configuration client
# /etc/openvpn/client.conf
client
dev tun
remote <IP Server> 1194 udp
ca ca.crt
cert bertrand.crt
key bertrand.key
persist-tun
persist-key
comp-lzo
En cas d'erreur, vérifier qu'il n'y a pas déjà un processus en train d'utiliser le port 1194. Pour cela, taper la commande
lsof -i
Pour les machines Debian/Ubuntu
Taper les commandes suivantes :
sudo apt-get install openvpn network-manager-openvpn-gnome
- openvpn va ajouter tout ce qu'il faut pour utiliser les tunnels OpenVPN
- network-manager-openvpn va ajouter la possibilité de paramétrer un tunnel OpenVPN depuis l'administration des connexions.
- Ensuite, aller dans le Network-Manager (les doubles-flèches sur (X)Ubuntu))
- Sélectionner l'option Connexion VPN puis Configurer le VPN Fichier:Configurer VPN sur NetWork Manager.png
- Cliquer sur le bouton Ajouter afin de créer une nouvelle connexion
- Sélectionner Importer une configuration VPN enregistrée puis cliquer sur le bouton Créer Fichier:Importer une configuration VPN enregistrée.png
- Sélectionner le fichier suffixé .ovpn qui contient la configuration OpenVPN générée par pfSense par exemple. Le certificat doit être dans le même répertoire.
- Saisir le mot de passe associé au certificat pour autoriser son déchiffrement
Pour MacOS X
En mode graphique
J'utilise la version stable de TunnelBlick. Fonctionne parfaitement à condition de suivre les règles suivantes :
En mode ligne de commande
Il faut installer deux composants avec la commande brew, dans le terminal :
brew install Caskroom/cask/tuntap openvpn
openvpn sera alors installé dans le répertoire /usr/local/homebrew/Cellar/openvpn/2.3.6/sbin Il est possible de créer un alias afin que cela soit visible partout :
Dans tous les cas, il est possible d'ajouter deux interfaces virtuelles comme sur les autres systèmes *nix : http://tuntaposx.sourceforge.net
Pour Windows
Aller sur le site/appstore/playstore OpenVPN et installer le client idoine.
iOS et Android
Aller sur appstore/playstore OpenVPN et installer l'app idoine.
Vérifier son adresse IP
Les sites qui affichent votre adresse IP publique après routage sont nombreux. Je retiens celui-ci pour sa rapidité et sa sobriété : http://whatismyip.host/my-ip-address-details