{"id":273,"date":"2017-12-09T21:39:45","date_gmt":"2017-12-09T20:39:45","guid":{"rendered":"https:\/\/blog.vincentcharles.ovh\/?p=273"},"modified":"2020-02-16T01:49:58","modified_gmt":"2020-02-16T00:49:58","slug":"installer-un-serveur-l2tp-ipsec","status":"publish","type":"post","link":"https:\/\/blog.vincentcharles.ovh\/index.php\/2017\/12\/09\/installer-un-serveur-l2tp-ipsec\/","title":{"rendered":"Installer un serveur L2TP\/IPSec"},"content":{"rendered":"<p>Dans ce tutorial, nous allons voir comment mettre en place un VPN L2TP\/IPSec.<\/p>\n<p>J&rsquo;ai choisi de faire un second tuto sur les VPNs pour la raison suivante : OpenVPN c&rsquo;est beaucoup plus s\u00e9curis\u00e9, c&rsquo;est vrai mais c&rsquo;est la gal\u00e8re \u00e0 installer sur un appareil mobile de type t\u00e9l\u00e9phone Android ou Apple. L&rsquo;avantage du VPN IPSec, c&rsquo;est que le protocole est g\u00e9r\u00e9 nativement par beaucoup de syst\u00e8mes d&rsquo;exploitation : Windows, MacOS, Android, iOS&#8230; Il n&rsquo;y a donc qu&rsquo;\u00e0 configurer le client et \u00e7a tourne.<\/p>\n<p><!--more--><\/p>\n<h2>Installation des packages sur le serveur<\/h2>\n<p>Nous avons besoin forcement d&rsquo;un serveur qui supportera en r\u00e9alit\u00e9 deux services : <strong>IPSec<\/strong> pour le montage du tunnel et<strong> L2TP<\/strong> pour le cryptage avanc\u00e9 des donn\u00e9es.<\/p>\n<p>On commence pour installer les services :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">apt-get update\napt-get upgrade\napt-get install strongswan ppp xl2tpd<\/code><\/pre><\/figure>\n<h2>Configuration IPSEC<\/h2>\n<p>Pour la configuration IPsec, on va modifier dans un premier temps le fichier <em>\/etc\/ipsec.conf<\/em><\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">version 2.0\n\nconfig setup\n  virtual-private=%v4:10.0.0.0\/8,%v4:192.168.0.0\/16,%v4:172.16.0.0\/12,%v4:!192.168.42.0\/24,%v4:!192.168.43.0\/24\n  protostack=netkey\n  nhelpers=0\n  interfaces=%defaultroute\n  uniqueids=no\n\nconn shared\n  left=%defaultroute\n  leftid=123.456.123.456\n  right=%any\n  encapsulation=yes\n  authby=secret\n  pfs=no\n  rekey=no\n  keyingtries=5\n  dpddelay=30\n  dpdtimeout=120\n  dpdaction=clear\n  ike=3des-sha1,3des-sha2,aes-sha1,aes-sha1;modp1024,aes-sha2,aes-sha2;modp1024,aes256-sha2_512\n  phase2alg=3des-sha1,3des-sha2,aes-sha1,aes-sha2,aes256-sha2_512\n  sha2-truncbug=yes\n\nconn l2tp-psk\n  auto=add\n  leftprotoport=17\/1701\n  rightprotoport=17\/%any\n  type=transport\n  phase2=esp\n  also=shared\n\nconn xauth-psk\n  auto=add\n  leftsubnet=0.0.0.0\/0\n  rightaddresspool=192.168.43.10-192.168.43.250\n  modecfgdns1=8.8.8.8\n  modecfgdns2=8.8.4.4\n  leftxauthserver=yes\n  rightxauthclient=yes\n  leftmodecfgserver=yes\n  rightmodecfgclient=yes\n  modecfgpull=yes\n  xauthby=file\n  ike-frag=yes\n  ikev2=never\n  cisco-unity=yes\n  also=shared<\/code><\/pre><\/figure>\n<p><em>D\u00e9tail de la config :<\/em><\/p>\n<p><em>&#8211; leftid= correspond \u00e0 l&rsquo;IP de votre serveur<\/em><\/p>\n<p>Ensuite on modifie la cl\u00e9 partag\u00e9e IPSEC dans le fichier <em>\/etc\/ipsec.secrets<\/em><\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">123.456.123.456  %any  : PSK &quot;superclepsk&quot;<\/code><\/pre><\/figure>\n<p><em>D\u00e9tail de la config :<\/em><\/p>\n<p><em>&#8211; \u00e0 nouveau, 123.456.123.456 est l&rsquo;IP de votre serveur ;<\/em><\/p>\n<p><em>&#8211; superclepsk : il s&rsquo;agit de la cl\u00e9 de s\u00e9curit\u00e9, attention \u00e0 mettre quelque chose de solide.<\/em><\/p>\n<p>Les tunnels IPSec purs utilisent les ports UDP 500 et UDP 4500 si vous voulez ajouter des r\u00e8gles de firewall sur votre serveur (ou votre client).<\/p>\n<h2>Configuration L2TP<\/h2>\n<p>Maintenant on passe \u00e0 la configuration de xl2tpd, le service L2TP.<\/p>\n<p>Pour cela on commence par modifier le fichier <em>\/etc\/xl2tpd\/xl2tpd.conf<\/em><\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">[global]\nport = 1701\n\n[lns default]\nip range = 10.0.1.10-10.0.1.100\nlocal ip = 10.0.1.1\nrequire chap = yes\nrefuse pap = yes\nrequire authentication = yes\nname = VPN\npppoptfile = \/etc\/ppp\/options.xl2tpd\nlength bit = yes<\/code><\/pre><\/figure>\n<p><em>D\u00e9tail de la config :<\/em><\/p>\n<p><em>&#8211; port = 1701, correspond au port L2TP. A d\u00e9bloquer dans le firewall ;<\/em><\/p>\n<p><em>&#8211; ip range = 10.0.1.10-10.0.1.100, correspond \u00e0 la plage des ip pour les clients du vpn ;<\/em><\/p>\n<p><em>&#8211; local ip = 10.0.1.1, correspond \u00e0 l&rsquo;IP du serveur dans le vpn.<\/em><\/p>\n<p>Pour le fonctionnement de L2TP, nous avons besoin du port UDP 1701.<\/p>\n<p>Il reste deux fichiers \u00e0 \u00e9diter :<\/p>\n<ul>\n<li>le fichier <em>\/etc\/ppp\/chap-secrets<\/em><\/li>\n<\/ul>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">GNU nano 2.2.6                                                                 File: chap-secrets\n\n# Secrets for authentication using CHAP\n# client  server  secret  IP addresses\n&quot;superutilisateur&quot; VPN &quot;supermotdepasse&quot; &quot;10.0.1.10&quot;<\/code><\/pre><\/figure>\n<p><em>D\u00e9tail de la config :<\/em><\/p>\n<p><em>&#8211; superutilisateur : c&rsquo;est le login que vous allez utiliser en plus de la cl\u00e9 ipsec ;<\/em><\/p>\n<p><em>&#8211; supermotdepasse : c&rsquo;est le mot de passe associ\u00e9 au login ;<\/em><\/p>\n<p><em>&#8211; VPN : c&rsquo;est le nom du VPN, ce nom doit \u00eatre strictement identique au param\u00e8tre name = dans le fichier \/etc\/xl2tpd\/xl2tpd.conf ;<\/em><\/p>\n<p><em>&#8211; l&rsquo;IP : correspond \u00e0 l&rsquo;IP que vous attribuez \u00e0 l&rsquo;utilisateur dont vous venez de d\u00e9clarer le login\/mot de passe. Vous pouvez mettre une ast\u00e9risque si vous ne voulez pas affecter d&rsquo;IP.<\/em><\/p>\n<p><em>Vous pouvez ajouter des utilisateurs suppl\u00e9mentaires en ajoutant des lignes en dessous.<\/em><\/p>\n<ul>\n<li>le fichier <em>\/etc\/ppp\/options.xl2tpd<\/em><\/li>\n<\/ul>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">+mschap-v2\nipcp-accept-local\nipcp-accept-remote\nms-dns 8.8.8.8\nms-dns 8.8.4.4\nnoccp\nauth\nmtu 1280\nmru 1280\nproxyarp\nlcp-echo-failure 4\nlcp-echo-interval 30\nconnect-delay 5000<\/code><\/pre><\/figure>\n<p>Maintenance, notre serveur est configur\u00e9.<\/p>\n<h2>Routage du traffic et d\u00e9marrage des services.<\/h2>\n<p>Pour que l&rsquo;on puisse sortir sur internet une fois le tunnel connect\u00e9, il faut cr\u00e9er un r\u00e8gle de NAT :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">iptables -t nat -A POSTROUTING -s 10.0.1.0\/24 -j MASQUERADE<\/code><\/pre><\/figure>\n<p>On peut aller d\u00e9marrer ou red\u00e9marrer les services :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">\/etc\/init.d\/ipsec restart\n\/etc\/init.d\/xl2tpd restart<\/code><\/pre><\/figure>\n<h2>Configuration du client : Exemple sous Android<\/h2>\n<p>Il ne nous reste plus qu&rsquo;\u00e0 configurer notre p\u00e9riph\u00e9rique pour acc\u00e9der au tunnel.<\/p>\n<p>Vous avez besoin des \u00e9l\u00e9ments suivants :<\/p>\n<ul>\n<li>l&rsquo;adresse ip de votre serveur, dans notre cas : <em>123.456.123.456<\/em><\/li>\n<li>la cl\u00e9 PSK(pre-shared key) de votre service IPSEC : <em>superclepsk<\/em><\/li>\n<li>du couple login\/mot de passe que vous avez choisi pour L2TP : <em>superutilisateur<\/em> &amp; <em>supermotdepasse<\/em><\/li>\n<\/ul>\n<p>La configuration sous Android se passe en deux temps :<\/p>\n<ul>\n<li>On configure IPsec apr\u00e8s avoir choisi le type de tunnel : L2TP\/IPsec<\/li>\n<\/ul>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-290\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754-700x1244.png\" alt=\"\" width=\"360\" height=\"640\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754-700x1244.png 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754-169x300.png 169w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754-768x1365.png 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754-370x658.png 370w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754-1040x1849.png 1040w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074754.png 1080w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><\/p>\n<ul>\n<li>On renseigne les identifiants de connexion.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-291\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812-169x300.png\" alt=\"\" width=\"360\" height=\"640\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812-169x300.png 169w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812-768x1365.png 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812-700x1244.png 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812-370x658.png 370w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812-1040x1849.png 1040w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2017\/12\/Screenshot_20171208-074812.png 1080w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><\/p>\n<ul>\n<li>On termine par : se connecter et le tour est jou\u00e9.<\/li>\n<\/ul>\n<p>Pour v\u00e9rifier le fonctionnement, chercher des sites du type : <em>DNS Leak, Show my Ip<\/em>&#8230; pour voir si votre IP correspond bien \u00e0 celle de votre serveur et non celle de votre fournisseur d&rsquo;acc\u00e8s.<\/p>\n<p><em>PS: Dans ce tuto, on parle de s\u00e9curisation de l&rsquo;acc\u00e8s internet et de la protection de la vie priv\u00e9e. En aucun cas d&rsquo;anonymat. Pourquoi ? Parceque si vous installez ce service sur votre propre serveur, c&rsquo;est bien vous le propri\u00e9taire&#8230; Vous n&rsquo;\u00eates donc pas anonyme. Les plaintes iront \u00e0 votre fournisseur de serveur \u00e0 la place de votre fournisseur internet, mais le r\u00e9sultat est le m\u00eame, vous restez responsable.<\/em><\/p>\n<p>Mon travail repose sur l&rsquo;excellent script trouv\u00e9 sur Github qui permet la mise en place d&rsquo;un VPN identique bas\u00e9 sur Libreswan et xl2tpd. C&rsquo;est par ici : <a href=\"https:\/\/github.com\/hwdsl2\/setup-ipsec-vpn\">https:\/\/github.com\/hwdsl2\/setup-ipsec-vpn<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans ce tutorial, nous allons voir comment mettre en place un VPN L2TP\/IPSec. J&rsquo;ai choisi de faire un second tuto sur les VPNs pour la raison suivante : OpenVPN c&rsquo;est beaucoup plus s\u00e9curis\u00e9, c&rsquo;est vrai mais c&rsquo;est la gal\u00e8re \u00e0 installer sur un appareil mobile de type t\u00e9l\u00e9phone Android ou Apple. L&rsquo;avantage du VPN IPSec,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":299,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,25,2,11],"tags":[17,14],"class_list":["post-273","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial_linux","category-tutorial_server","category-tutorial","category-tutorial_windows","tag-niveau_moyen","tag-nouveau"],"_links":{"self":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/comments?post=273"}],"version-history":[{"count":17,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/273\/revisions"}],"predecessor-version":[{"id":902,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/273\/revisions\/902"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media\/299"}],"wp:attachment":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media?parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/categories?post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/tags?post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}