Vpn

De WikiBR
Warning.png Article archivé.
Cette page n'a pas été modifiée depuis sa création en 2016
Warning.png
Project.png Page en travaux. Les informations pourraient être incomplètes voire erronnées.
Pour toute remarque ou demande, contacter valentin.salvator[at]polytechnique.edu.
Project.png

Des informations générales sur les VPN et leur fonctionnement sont disponibles sur la page VPN du wikix. Dans ce wiki seront développés exclusivement l'installation et la configuration d'un serveur OpenVPN.

Openvpn.png

Motivations

Un certain nombre d'entre nous peut avoir besoin de contourner les restrictions du proxy de l'X pour jouer, télécharger ou même pire ! Des solutions payantes existent et fonctionnent bien (Frozenway par exemple) mais restent relativement chères. Il peut donc être intéressant de monter un serveur vpn privé dès 3 ou 4 utilisateurs ! Un exemple concret est celui de la section volley 2015 qui possède son vpn avec une dizaine d'utilisateurs.

Dimensionnement du serveur

La première étape est de choisir quel type de serveur louer, et chez quel hébergeur. Le rôle du vpn étant d'être le point de passage de (quasi) toutes les connections des utilisateurs, la qualité de la bande passante fournie est primordiale. La puissance du processeur du serveur est moins fondamentale. Il faut garder en tête que :

  • la connection a l'X dépasse très rarement les 5 mo/s (en download) dans un casert, donc si l'on note n le nombre d'utilisateurs du serveur et m le minimum entre la vitesse en upload et la vitesse en download garanties par l'hébergeur, on doit avoir 5*n < m pour ne pas réduire la vitesse de la connection d'un utilisateur.
  • Un serveur VPS peut permettre de diminuer les coûts mais fait perdre le contrôle sur la bande passante et la puissance disponible en fonction des autres usagers.
  • Il ne sert a rien d'avoir une bande passante garantie de 1Gbps si votre serveur a un disque dur mécanique (120 mo/s grand maximum en lecture/écriture). Il faut donc privilégier le SSD !
  • Il existe de très nombreuses offres de serveur dédiés de bonne qualité (pour ce que l'on cherche a mettre en place) et à moins de 10€ par mois.

Un excellent compromis est la Dedibox SC SSD de chez online.net qui offre:

  • Une connection garantie à 1GBps (125 mo/s) minimum, donc 20 clients potentiels sans problème
  • Un disque dur SSD de 120go
  • Un prix raisonnable de 11€ par mois, soit environ 0,50€ par personne pour 20 clients !

En pratique un tel serveur loué chez online.net affiche une vitesse de connection allant jusqu'à 170 mo/s et un ping de 10ms.

Pré-configuration du serveur

Installez sur votre serveur la distribution de votre choix (de préférence Debian ou équivalent) et connectez vous en ssh.

  • Installer les paquets nécessaires :
apt-get install openvpn easy-rsa libopenssl
cp -a /usr/share/easy-rsa /etc/openvpn/
cd /etc/openvpn/easy-rsa
source vars
./clean-all
  • Créer les certificats de l'autorité de certification :
./build-ca

Vous devriez voir apparaitre ces lignes :

Generating a 2048 bit RSA private key
.................+++
............................................................................................................................................................+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:

Laissez les paramètres par défaut (sauf si vous souhaitez réellement les changer)

Pour vérifier que les certificats ont bien été créés :

ls keys/

Vous devez voir les fichiers :

 ca.crt ca.key 
  • Générer la clé Diffie-Hellman qui permet de sécuriser les échanges :
./build-dh

Il est possible que cette étape dure un certain temps, ne pas s'inquiéter et laisser le serveur travailler.

  • Générer les certificats du serveur :
./build-key-server srvcert

Laissez les paramètres par défaut, sauf pour la ligne :

Common Name (eg, your name or your server's hostname) [srvcert]:

pour laquelle vous pouvez renseigner votre nom de domaine.

Configuration de OpenVPN

  • Copiez la configuration par défaut dans le dossier d'openvpn :
 gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
  • Editez cette configuration :
 nano /etc/openvpn/server.conf 
  • Décommenter (enlever les ";") ces deux lignes pour que le service openvpn ne tourne pas sous un utilisateur dangereux :
user nobody
group nogroup
  • Le serveur OpenVPN se lance par défaut sur le port 1194. Ce port n'est pas atteignable (ni en TCP ni en UDP, aucune requete UDP n'est acceptée d'ailleurs) depuis les caserts, il faut donc le changer. Vous trouverez sur cette page la liste des ports autorisés par le proxy de l'X. En particulier il peut être judicieux de choisir un port non contrôlé par le proxy pour le serveur, ainsi vous aurez accès à internet même en cas de plantage du proxy. De plus cela améliore votre ping, ce qui peut se révéler crucial si le vpn est destiné à des joueurs. Au 9 Juin 2016, le port 554 est accessible librement en TCP depuis les caserts du bâtiment 70.

Trouver la ligne

port 1194

Remplacer 1194 par le port de votre choix

Trouver la ligne

 proto udp 

Remplacer udp par tcp

  • Indiquer les bons chemins de la clé et des certificats :
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/srvcert.crt
key /etc/openvpn/easy-rsa/keys/srvcert.key  # This file should be kept secret
  • Trouver la ligne :
dh /etc/openvpn/easy-rsa/keys/dh1024.pem

et la remplacer par :

dh /etc/openvpn/easy-rsa/keys/dh2048.pem
  • Pour que le serveur OpenVPN soit considéré comme la passerelle par défaut et que les clients qui s'y connectent soient invités à router tout leur trafic à travers celui-ci ajouter :
push "redirect-gateway def1 bypass-dhcp"
  • Indiquer le DNS a utiliser :
push "dhcp-option DNS 8.8.8.8"

Ici 8.8.8.8 est un serveur DNS de google, il est possible de le remplacer par celui de l'hébergeur du serveur, à votre convenance.

Sauvegarder le fichier puis quitter.

Lancement du serveur

La commande pour lancer manuellement le serveur openvpn est :

 openvpn /etc/openvpn/server.conf 

Vous devriez voir apparaitre en dernière ligne :

Mon Jun 22 20:02:15 2015 Initialization Sequence Completed

Il est possible de tester si l'interface du VPN est bien en fonctionnement, pour cela laisser le shell dans lequel est lancé OpenVPN ouvert et ouvrir une deuxième connection. Dans ce second shell :

ifconfig tun0

Vous devez observer un bloc semblable à celui-ci :

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

OpenVPN est lancé automatiquement lors du boot du serveur, il n'y a donc pas de configuration supplémentaire à appliquer.

Configuration du Pare-feu

  • Il faut autoriser le serveur à router le trafic entrant vers d'autres machines (internet compris), pour cela éditez le fichier sysctl.conf :
nano /etc/sysctl.conf

Décommenter la bonne ligne :

net.ipv4.ip_forward=1

Sauvegarder, quitter puis recharger la configuration :

sysctl -p /etc/sysctl.conf
  • Installer iptables si ce n'est pas déjà fait :
apt remove ipmitool
apt install iptables-persistent

Répondre yes pendant l'installation

  • Charger les règles suivantes :
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
  • Si vous désirez que le serveur OpenVPN soit accessible depuis le réseau wifi de l'X ou plus généralement depuis des réseaux restrictifs redirigez le port 443 vers le port 554, ainsi il sera possible de passer par le port 443 (https) pour se connecter. Ignorez ces commandes sinon.
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 554
  • Sauvegarder les règles pour le prochain reboot :
/etc/init.d/netfilter-persistent save
  • Enfin redémarrer le serveur pour vérifier que tout marche bien :
reboot

Administration du serveur

Maintenant que le serveur OpenVPN fonctionne, il faut créer des certificats pour que les clients puissent s'y connecter. A chaque fois que vous voudrez créer un nouveau certificat la procédure sera la même. Dans tout ce qui suit, le client aura pour nom nomduclient.

  • Commencer par créer un dossier dans lequel on mettra tous les fichiers nécessaires à la connection du client :
mkdir /home/openvpn_clients/nomduclient
  • Lancer le script de création du client :
cd /etc/openvpn/easy-rsa/
source vars
./build-key nomduclient

Vous pouvez laisser les champs vides pour conserver les paramètres par défaut. A la fin de la procédure de création, Data Base Updated doit s'afficher.

  • Déplacer les fichiers utiles dans le dossier créé précédemment :
cp /etc/openvpn/easy-rsa/keys/ca.crt /home/openvpn_clients/nomduclient
cp /etc/openvpn/easy-rsa/keys/nomduclient.crt /home/openvpn_clients/nomduclient
cp /etc/openvpn/easy-rsa/keys/nomduclient.key /home/openvpn_clients/nomduclient

Vous venez donc de créer la clef et le certificat du client "nomduclient", il ne vous reste plus qu'à créer le fichier de configuration qui servira au client pour se connecter.

  • Créer le fichier de configuration :
nano /home/openvpn_clients/nomduclient/nomduclient.ovpn
  • Le remplir avec le modèle suivant :
##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server.     #
#                                            #
# This configuration can be used by multiple #
# clients, however each client should have   #
# its own cert and key files.                #
#                                            #
# On Windows, you might want to rename this  #
# file so it has a .ovpn extension           #
##############################################

# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
client

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Windows needs the TAP-Windows adapter name
# from the Network Connections panel
# if you have more than one.  On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# Are we connecting to a TCP or
# UDP server?  Use the same setting as
# on the server.
proto tcp
;proto udp

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1 554
remote my-server-1 443
;remote my-server-2 1194

# Choose a random host from the remote
# list for load-balancing.  Otherwise
# try hosts in the order specified.
;remote-random

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server.  Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody

# Try to preserve some state across restarts.
persist-key
persist-tun

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here.  See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot
# of duplicate packets.  Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca ca.crt
cert nomduclient.crt
key nomduclient.key

# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server".  This is an
# important precaution to protect against
# a potential attack discussed here:
#  http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server".  The build-key-server
# script in the easy-rsa folder will do this.
;ns-cert-type server

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x

# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20

Si vous avez suivi le début de ce wiki, le fichier modèle ci-dessus est presque bon :

  • La ligne :
 proto tcp 

Indique au client que le protocole utilisé par le serveur est TCP

  • Aux lignes :
remote my-server-1 554
remote my-server-1 443

Remplacer my-server-1 par l'adresse ip ou le nom de domaine de votre serveur. Une ligne similaire est commentée (non prise en compte) en dessous, vous pouvez en fait ajouter autant de serveurs que vous le voulez dans le fichier de configuration, le client essaiera de s'y connecter dans l'ordre du plus en haut vers le plus en bas. Par exemple dans notre cas, le client tentera de se connecter au serveur ayant pour ip my-server-1 en premier sur le port 554 puis si cela est impossible sur le port 443.

  • Enfin il faut indiquer au client le nom des fichiers utiles a la connection, veiller a bien remplacer nomduclient par le nom effectivement choisi aux lignes :
cert nomduclient.crt
key nomduclient.key
  • Enregistrer le fichier et quitter l'éditeur de texte.

Il peut être utile de conserver un modèle de ce fichier de configuration dans /home/openvpn_clients/ et d'en faire une copie pour chaque nouveau client.

Pour pouvoir se connecter depuis le réseau wifi de l'X il faut un fichier de configuration différent dans lequel on indique au client qu'il doit passer par le proxy de l'école.

  • Copier le fichier de configuration précédent dans un nouveau fichier :
cp /home/openvpn_clients/nomduclient/nomduclient.ovpn /home/openvpn_clients/nomduclient/nomduclient.wifi.ovpn
  • Trouver les lignes :
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
  • Les remplacer par :
http-proxy-retry # retry on connection failures
http-proxy kuzh.polytechnique.fr 8080

Comme pour le précédent fichier, il peut être utile d'en garder un modèle dans /home/openvpn_clients/

Connection à OpenVPN

  • Sous windows, rendez vous sur cette page, téléchargez et installez la version correspondant à votre ordinateur. Récupérez ensuite le dossier nomduclient puis placez le dans C:\Programmes\OpenVPN\config. Lancez le client, puis connectez vous à l'aide d'un clic droit sur l’icône du client.
  • Sous mac la procédure est similaire avec le logiciel tunnelblick.
  • Sous linux installez les paquets nécessaires :
apt-get install openvpn network-manager-openvpn
  • Si votre distribution est basée sur gnome, installez aussi network-manager-openvpn-gnome :
apt-get install network-manager-openvpn-gnome

Utilisez ensuite le network manager pour créer une nouvelle connection VPN avec les fichiers de configuration présents dans le dossier que vous aurez préalablement récupéré.

Client OpenVPN sous OpenWRT

Ce qui suit a été testé uniquement sur un routeur TP-LINKWR1043ND, il n'est pas garanti que les routeurs vendus par le BR aient suffisamment d'espace libre pour pouvoir installer openVPN. Si vous possédez un routeur dans votre casert, ou même chez vous, il est possible d'installer le client OpenVPN directement dessus et ainsi tout le trafic internet des équipements connectés au routeur passera par le VPN. Pour cela vous devez avoir un routeur compatible avec OpenWRT et installer ce dernier sur votre routeur à l'aide de cette page. Si votre routeur est connecté à internet, vous pouvez installer openvpn via la commande:

opkg install openvpn

Si vous êtes dans votre casert et que la précédente commande ne fonctionne pas, vous devez installer manuellement les paquets. Pour cela rendez vous sur cette page et naviguez jusqu'aux packages de base de la version d'openWRT installée sur votre routeur. Par exemple pour un WR1043ND(au 13/06/2016): Chaos Calmer 15.05.1/ar71xx/generic/packages/base

  • Téléchargez les paquets : openvpn-easy-rsa liblzo libopenssl kmod-ath9k et ceux indiqués manquants par opkg lorsque vous tenterez d'installer les précédents.
  • Téléchargez l'interface graphique pour luci d'openVPN : dans Chaos Calmer 15.05.1/ar71xx/generic/packages/luci.
  • Rendez vous sur 192.168.1.1 onglet services puis openVPN
  • Créez une nouvelle instance en choisissant dans la liste déroulante client configuration for a routed multi client VPN
  • Ajoutez via la liste déroulante en bas de page les champs proto, port et remplissez les selon la configuration du serveur.
  • Remplissez la case remote avec l'adresse IP du serveur ou son nom de domaine.
  • Ajoutez de la même façon les champs ca, cert et key en uploadant les fichiers correspondants.
  • Retournez sur la première page, cochez la case enabled, vérifiez que port et proto sont en accord avec ce que vous avez spécifié plus haut puis faites un save and apply.
  • Vous pouvez 'pinger' le serveur pour vérifier que le routeur est bien connecté à OpenVPN:
ping 10.8.0.1
  • Il est nécessaire de configurer l'interface openVPN pour cela, aller dans Network > Interfaces > Create new interface.
  • Nommez la et selectionnez Unmanaged dans le choix Physical Settings click Ehternet Adapter: tun1 puis enregistrez
  • Configurez le Pare-feu: allez dans Network > Firewall > General Settings
  • Ajoutez une zone
  • Nommez la VPN, et cochez accept pour INPUT, OUTPUT et FORWARD
  • Cochez la case Masquerading
  • Mettez le réseau créé précedemment dans Covered Networks
  • Dans la partie Inter-zone Forwarding autorisez les redirections vers et en provenance de lan.
  • Redemarrez le routeur