« Vpn » : différence entre les versions
Aucun résumé des modifications |
|||
Ligne 1 : | Ligne 1 : | ||
{{Travaux|Pour toute remarque ou demande, contacter valentin.salvator[at]polytechnique.edu.}} | |||
Des informations générales sur les VPN et leur fonctionnement sont disponibles sur [https://wikix.polytechnique.org/VPN la page VPN du wikix]. Dans ce wiki seront développés exclusivement l'installation et la configuration d'un serveur [https://openvpn.net/index.php/open-source.html OpenVPN]. | Des informations générales sur les VPN et leur fonctionnement sont disponibles sur [https://wikix.polytechnique.org/VPN la page VPN du wikix]. Dans ce wiki seront développés exclusivement l'installation et la configuration d'un serveur [https://openvpn.net/index.php/open-source.html OpenVPN]. | ||
Version du 9 juin 2016 à 16:40
Page en travaux. Les informations pourraient être incomplètes voire erronnées. Pour toute remarque ou demande, contacter valentin.salvator[at]polytechnique.edu. |
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.
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
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é.