Vpn

De WikiBR

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)

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

Sauvegardez et quittez. Rechargez 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

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