Installer un serveur L2TP/IPSec

Installer un serveur L2TP/IPSec

09/12/2017 0 Par Vincent

Dans ce tutorial, nous allons voir comment mettre en place un VPN L2TP/IPSec.

J’ai choisi de faire un second tuto sur les VPNs pour la raison suivante : OpenVPN c’est beaucoup plus sécurisé, c’est vrai mais c’est la galère à installer sur un appareil mobile de type téléphone Android ou Apple. L’avantage du VPN IPSec, c’est que le protocole est géré nativement par beaucoup de systèmes d’exploitation : Windows, MacOS, Android, iOS… Il n’y a donc qu’à configurer le client et ça tourne.

Installation des packages sur le serveur

Nous avons besoin forcement d’un serveur qui supportera en réalité deux services : IPSec pour le montage du tunnel et L2TP pour le cryptage avancé des données.

On commence pour installer les services :

[pastacode lang= »bash » manual= »apt-get%20update%0Aapt-get%20upgrade%0Aapt-get%20install%20strongswan%20ppp%20xl2tpd » message= » » highlight= » » provider= »manual »/]

Configuration IPSEC

Pour la configuration IPsec, on va modifier dans un premier temps le fichier /etc/ipsec.conf

[pastacode lang= »bash » manual= »version%202.0%0A%0Aconfig%20setup%0A%20%20virtual-private%3D%25v4%3A10.0.0.0%2F8%2C%25v4%3A192.168.0.0%2F16%2C%25v4%3A172.16.0.0%2F12%2C%25v4%3A!192.168.42.0%2F24%2C%25v4%3A!192.168.43.0%2F24%0A%20%20protostack%3Dnetkey%0A%20%20nhelpers%3D0%0A%20%20interfaces%3D%25defaultroute%0A%20%20uniqueids%3Dno%0A%0Aconn%20shared%0A%20%20left%3D%25defaultroute%0A%20%20leftid%3D123.456.123.456%0A%20%20right%3D%25any%0A%20%20encapsulation%3Dyes%0A%20%20authby%3Dsecret%0A%20%20pfs%3Dno%0A%20%20rekey%3Dno%0A%20%20keyingtries%3D5%0A%20%20dpddelay%3D30%0A%20%20dpdtimeout%3D120%0A%20%20dpdaction%3Dclear%0A%20%20ike%3D3des-sha1%2C3des-sha2%2Caes-sha1%2Caes-sha1%3Bmodp1024%2Caes-sha2%2Caes-sha2%3Bmodp1024%2Caes256-sha2_512%0A%20%20phase2alg%3D3des-sha1%2C3des-sha2%2Caes-sha1%2Caes-sha2%2Caes256-sha2_512%0A%20%20sha2-truncbug%3Dyes%0A%0Aconn%20l2tp-psk%0A%20%20auto%3Dadd%0A%20%20leftprotoport%3D17%2F1701%0A%20%20rightprotoport%3D17%2F%25any%0A%20%20type%3Dtransport%0A%20%20phase2%3Desp%0A%20%20also%3Dshared%0A%0Aconn%20xauth-psk%0A%20%20auto%3Dadd%0A%20%20leftsubnet%3D0.0.0.0%2F0%0A%20%20rightaddresspool%3D192.168.43.10-192.168.43.250%0A%20%20modecfgdns1%3D8.8.8.8%0A%20%20modecfgdns2%3D8.8.4.4%0A%20%20leftxauthserver%3Dyes%0A%20%20rightxauthclient%3Dyes%0A%20%20leftmodecfgserver%3Dyes%0A%20%20rightmodecfgclient%3Dyes%0A%20%20modecfgpull%3Dyes%0A%20%20xauthby%3Dfile%0A%20%20ike-frag%3Dyes%0A%20%20ikev2%3Dnever%0A%20%20cisco-unity%3Dyes%0A%20%20also%3Dshared%0A » message= » » highlight= » » provider= »manual »/]

Détail de la config :

– leftid= correspond à l’IP de votre serveur

Ensuite on modifie la clé partagée IPSEC dans le fichier /etc/ipsec.secrets

[pastacode lang= »bash » manual= »123.456.123.456%20%20%25any%20%20%3A%20PSK%20%22superclepsk%22%0A%0A%0A » message= » » highlight= » » provider= »manual »/]

Détail de la config :

– à nouveau, 123.456.123.456 est l’IP de votre serveur ;

– superclepsk : il s’agit de la clé de sécurité, attention à mettre quelque chose de solide.

Les tunnels IPSec purs utilisent les ports UDP 500 et UDP 4500 si vous voulez ajouter des règles de firewall sur votre serveur (ou votre client).

Configuration L2TP

Maintenant on passe à la configuration de xl2tpd, le service L2TP.

Pour cela on commence par modifier le fichier /etc/xl2tpd/xl2tpd.conf

[pastacode lang= »bash » manual= »%5Bglobal%5D%0Aport%20%3D%201701%0A%0A%5Blns%20default%5D%0Aip%20range%20%3D%2010.0.1.10-10.0.1.100%0Alocal%20ip%20%3D%2010.0.1.1%0Arequire%20chap%20%3D%20yes%0Arefuse%20pap%20%3D%20yes%0Arequire%20authentication%20%3D%20yes%0Aname%20%3D%20VPN%0Apppoptfile%20%3D%20%2Fetc%2Fppp%2Foptions.xl2tpd%0Alength%20bit%20%3D%20yes%0A » message= » » highlight= » » provider= »manual »/]

Détail de la config :

– port = 1701, correspond au port L2TP. A débloquer dans le firewall ;

– ip range = 10.0.1.10-10.0.1.100, correspond à la plage des ip pour les clients du vpn ;

– local ip = 10.0.1.1, correspond à l’IP du serveur dans le vpn.

Pour le fonctionnement de L2TP, nous avons besoin du port UDP 1701.

Il reste deux fichiers à éditer :

  • le fichier /etc/ppp/chap-secrets

[pastacode lang= »bash » manual= »%20%20GNU%20nano%202.2.6%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20File%3A%20chap-secrets%0A%0A%23%20Secrets%20for%20authentication%20using%20CHAP%0A%23%20client%20%20server%20%20secret%20%20IP%20addresses%0A%22superutilisateur%22%20VPN%20%22supermotdepasse%22%20%2210.0.1.10%22″ message= » » highlight= » » provider= »manual »/]

Détail de la config :

– superutilisateur : c’est le login que vous allez utiliser en plus de la clé ipsec ;

– supermotdepasse : c’est le mot de passe associé au login ;

– VPN : c’est le nom du VPN, ce nom doit être strictement identique au paramètre name = dans le fichier /etc/xl2tpd/xl2tpd.conf ;

– l’IP : correspond à l’IP que vous attribuez à l’utilisateur dont vous venez de déclarer le login/mot de passe. Vous pouvez mettre une astérisque si vous ne voulez pas affecter d’IP.

Vous pouvez ajouter des utilisateurs supplémentaires en ajoutant des lignes en dessous.

  • le fichier /etc/ppp/options.xl2tpd

[pastacode lang= »bash » manual= »%0A%2Bmschap-v2%0Aipcp-accept-local%0Aipcp-accept-remote%0Ams-dns%208.8.8.8%0Ams-dns%208.8.4.4%0Anoccp%0Aauth%0Amtu%201280%0Amru%201280%0Aproxyarp%0Alcp-echo-failure%204%0Alcp-echo-interval%2030%0Aconnect-delay%205000″ message= » » highlight= » » provider= »manual »/]

Maintenance, notre serveur est configuré.

Routage du traffic et démarrage des services.

Pour que l’on puisse sortir sur internet une fois le tunnel connecté, il faut créer un règle de NAT :

[pastacode lang= »bash » manual= »iptables%20-t%20nat%20-A%20POSTROUTING%20-s%2010.0.1.0%2F24%20-j%20MASQUERADE%0A » message= » » highlight= » » provider= »manual »/]

On peut aller démarrer ou redémarrer les services :

[pastacode lang= »bash » manual= »%2Fetc%2Finit.d%2Fipsec%20restart%0A%2Fetc%2Finit.d%2Fxl2tpd%20restart » message= » » highlight= » » provider= »manual »/]

Configuration du client : Exemple sous Android

Il ne nous reste plus qu’à configurer notre périphérique pour accéder au tunnel.

Vous avez besoin des éléments suivants :

  • l’adresse ip de votre serveur, dans notre cas : 123.456.123.456
  • la clé PSK(pre-shared key) de votre service IPSEC : superclepsk
  • du couple login/mot de passe que vous avez choisi pour L2TP : superutilisateur & supermotdepasse

La configuration sous Android se passe en deux temps :

  • On configure IPsec après avoir choisi le type de tunnel : L2TP/IPsec

  • On renseigne les identifiants de connexion.

  • On termine par : se connecter et le tour est joué.

Pour vérifier le fonctionnement, chercher des sites du type : DNS Leak, Show my Ip… pour voir si votre IP correspond bien à celle de votre serveur et non celle de votre fournisseur d’accès.

PS: Dans ce tuto, on parle de sécurisation de l’accès internet et de la protection de la vie privée. En aucun cas d’anonymat. Pourquoi ? Parceque si vous installez ce service sur votre propre serveur, c’est bien vous le propriétaire… Vous n’êtes donc pas anonyme. Les plaintes iront à votre fournisseur de serveur à la place de votre fournisseur internet, mais le résultat est le même, vous restez responsable.

Mon travail repose sur l’excellent script trouvé sur Github qui permet la mise en place d’un VPN identique basé sur Libreswan et xl2tpd. C’est par ici : https://github.com/hwdsl2/setup-ipsec-vpn