Double VPN en un clic. Comment diviser facilement l'adresse IP d'un point d'entrée et de sortie



TL; DR Cet article décrit la façon la plus simple de configurer un serveur VPN, dont l'adresse IP pour la connexion des clients VPN est différente de l'adresse IP à partir de laquelle les clients accèdent à Internet.

Utilisez-vous un VPN pour protéger la confidentialité sur Internet et louez-vous votre propre serveur pour cela? Êtes-vous le seul client qui se connecte à ce serveur dans le monde entier? Est-il si difficile de trouver votre véritable adresse IP, pensez-vous? Avec l'entrée en vigueur du paquet Spring, cela devient beaucoup plus facile.

Le double VPN est un sujet populaire autour duquel il y a beaucoup de spéculations. Souvent, ce terme est appelé une technologie complètement différente, mais il signifie presque toujours une connexion Internet et des points d'accès espacés au niveau des adresses IP. Nous considérerons la façon la plus simple de configurer un serveur VPN dans ce mode, qui ne nécessite pas de configuration supplémentaire côté serveur et vous permet d'obtenir la vitesse maximale et la latence la plus faible.

Modèle de menace


Afin de vous protéger de quelque chose, vous devez comprendre clairement le modèle de menace. Nous ne parlerons pas de nouvelles lois obligeant les fournisseurs à stocker tout le trafic client, mais nous pouvons certainement dire que les données de connexion, les soi-disant Netflow, le stockage est assez simple, et cela a été fait avec succès depuis longtemps. Autrement dit, le fait de connecter une adresse IP conditionnelle 1.1.1.1 à l'adresse 2.2.2.2 à un certain moment de la journée est enregistré.

Ayant accès à de telles informations à l'échelle du fournisseur, de la ville ou du pays, il suffit simplement d'établir qui se cache derrière le VPN.

Pour augmenter le niveau de confidentialité lors de l'utilisation d'un VPN, vous devez séparer le point de connexion et le point d'accès Internet au niveau IP. Dans l'image ci-dessus, notre utilisateur est derrière la clôture sous le contrôle d'Irina Yarovoy. Toutes les connexions passant par la clôture, se souvient Irina strictement. L'utilisateur, en tant que citoyen décent, se connecte à l'adresse good.citizen.vpn , tandis qu'il revient de l'adresse super.cool.guy.vpn . Par conséquent, pour Irina, ces deux connexions semblent déconnectées.

Que sont les VPN doubles?


Sous le nom de VPN «double», on entend souvent différentes choses, mais cela signifie presque toujours des nœuds de connexion et d'accès à Internet espacés géographiquement ou au niveau du réseau. Parfois, ce n'est qu'une astuce marketing des fournisseurs de VPN, ce qui ne veut absolument rien dire, de tels services peuvent être appelés VPN «triples» et «quadruples».

Nous analyserons les schémas les plus typiques utilisés dans la pratique.

VPN entre serveurs


La manière la plus courante. Dans ce mode, le client établit une connexion VPN uniquement avec le premier serveur. Le tunnel vers le second est configuré sur le premier serveur, et tout le trafic provenant du client va vers le deuxième serveur, etc. Il peut y avoir plusieurs serveurs intermédiaires. Dans ce cas, le tunnel entre les serveurs peut être installé en utilisant tout autre protocole que le protocole par lequel le client est connecté, par exemple IPsec, ou sans aucun cryptage, tel que GRE ou IPIP. Dans ce mode, tous les serveurs intermédiaires peuvent être vus dans la trace d'itinéraire . Il n'y a aucun moyen de vérifier exactement comment les serveurs intermédiaires côté client sont connectés, vous ne pouvez donc faire confiance qu'au fournisseur.

Tout au long de la route de trafic, le MTU minimum (Maximum Transmission Unit) reste égal à la valeur du tout premier tunnel, et chaque serveur intermédiaire a accès au trafic client décrypté .



VPN via proxy


Aussi une manière assez courante. Souvent utilisé pour masquer le trafic VPN sous un protocole différent, par exemple en Chine. Cette méthode est plus pratique qu'une chaîne de proxy, car en utilisant un VPN, il est facile d'acheminer tout le trafic système vers le tunnel. Il existe également des outils pour intercepter les appels système des programmes et les rediriger vers des proxys: ProxyCap, Proxifier, mais ils sont moins stables car ils manquent parfois des requêtes et ils contournent le proxy ou fonctionnent incorrectement avec certains programmes.

Dans ce mode, le serveur proxy n'est pas visible dans la trace de l'itinéraire.



VPN dans VPN


La voie la plus paranoïaque et la plus lente: tous les tunnels montent côté client, les uns à l'intérieur des autres. Cette méthode nécessite une configuration astucieuse des routes côté client et le lancement de tous les clients VPN dans le bon ordre. C'est mauvais pour la latence et les performances, mais les serveurs intermédiaires n'ont pas accès au trafic ouvert du client. Tous les frais généraux d'encapsulation sont résumés et la taille maximale de paquet (MTU) qui est finalement disponible pour le client diminue en fonction du nombre de tunnels. Les serveurs intermédiaires ne sont pas visibles dans la trace de l'itinéraire.



Configurer VDS


La façon la plus simple de configurer un VPN avec des points d'entrée et de sortie séparés est de connecter plusieurs adresses IP à un seul serveur virtuel. Cette méthode vous permet d'obtenir une vitesse maximale et des retards minimaux, car en fait le trafic se termine sur un seul serveur. Sur Vdsina.ru, vous pouvez le faire vous-même depuis le panneau de configuration. Alors que IPv4 se termine partout, nous émettons des adresses IP supplémentaires même sur des serveurs pour 60 roubles!

Nous analyserons la configuration du serveur étape par étape.

Choisissez un serveur


Nous commandons VDS avec un tarif adapté, dans le centre de données nécessaire. Étant donné notre tâche, nous choisirons un centre de données plus loin, aux Pays-Bas;)



Connectez une adresse IP supplémentaire


Après avoir acheté une adresse IP supplémentaire, vous devez la configurer conformément aux instructions .



Pour plus de clarté, attribuez un enregistrement PTR à IP. Il s'agit du nom de domaine qui sera visible lorsque l'adresse IP sera reconvertie en domaine. Cela peut être n'importe quelle valeur, y compris un domaine inexistant.

Pour des exemples, nous utiliserons les valeurs suivantes:

 xxx.xxx.38.220 — super.cool.guy.vpn #   ( ) xxx.xxx.39.154 — good.citizen.vpn #   ( ) 



Vérification de deux IP


Il est important de se rappeler que l'adresse IP initialement définie sur le serveur sera le point de sortie, donc la nouvelle adresse sera le point d'entrée. Connectez-vous via SSH au serveur et vérifiez quelle adresse est utilisée comme externe.

Pour ce faire, il est plus simple d'utiliser le service ifconfig.co à partir de la console. Lors d'une demande via curl, il renvoie l'adresse IP à partir de laquelle la demande a été effectuée.

 $ curl ifconfig.co xxx.xxx.38.220 

Les derniers chiffres montrent que notre adresse externe correspond vraiment au point de sortie. Essayons de vérifier le bon fonctionnement de la deuxième IP comme point d'entrée. Pour ce faire, utilisez simplement la fonction proxy SOCKS intégrée à SSH.

Les commandes sont exécutées sur le client:

 ssh -D 9999 root@good.citizen.vpn #    curl -x socks5h://127.0.0.1:9999 ifconfig.co super.cool.guy.vpn 

La première commande établit une session SSH avec l'adresse good.citizen.vpn et active simultanément un proxy SOCKS dans cette session, qui est disponible sur le port local. Le second effectue une requête HTTP normale via ce proxy.
Il est important de se rappeler que nos exemples utilisent des noms de domaine fictifs pour les requêtes. Ils ne seront affichés qu'avec une résolution PTR et aucune demande complète ne pourra leur être adressée. Par conséquent, à ce stade, vous devez accéder au serveur via l'adresse IP.

Configuration du serveur IKEv2




IPsec IKEv2 est un protocole VPN moderne pris en charge par presque tous les systèmes d'exploitation prêts à l'emploi. Il est utilisé comme protocole par défaut sous Windows, macOS et iOS. Dans le même temps, il ne nécessite pas l'installation de logiciels tiers et dans la plupart des cas, fonctionne plus rapidement que OpenVPN. Il y avait déjà des articles sur la configuration du serveur IKEv2 sur le concentrateur , mais ils décrivent tous l'utilisation de certificats auto-signés et ne sont pas pratiques car ils vous obligent à installer le certificat racine du côté du client VPN.

Nous analyserons un exemple de configuration de serveur à l'aide d'un certificat de confiance de Let's Encrypt. Cela vous permet de ne pas installer de certificats racine superflus pour le client, mais d'émettre uniquement un nom d'utilisateur et un mot de passe.

Préparation du serveur


Nous utiliserons un serveur basé sur Ubuntu 18.04, mais l'instruction convient également à la plupart des distributions modernes.

Nous mettons à jour le système et installons les packages nécessaires

 apt update && apt upgrade apt install certbot strongswan libstrongswan-extra-plugins 

Problème de certificat


Pour émettre un certificat approuvé, vous devez diriger le domaine réel vers l'adresse IP du point d'entrée. Nous n'examinerons pas cet article en détail, car il dépasse le cadre de l'article. À titre d'exemple, nous utiliserons le domaine fictif good.citizen.vpn

Si vous avez déjà un serveur Web sur le serveur, utilisez la méthode appropriée pour émettre le certificat via certbot ou un autre client pour Let's Encrypt. Cet exemple suppose que le port HTTP (80) n'est pas occupé.

 certbot certonly --standalone --agree-tos -d good.citizen.vpn 

Répondre aux questions de l'assistant? nous recevrons un certificat et une clé signés

 # find /etc/letsencrypt/live/good.citizen.vpn/ /etc/letsencrypt/live/good.citizen.vpn/ /etc/letsencrypt/live/good.citizen.vpn/fullchain.pem /etc/letsencrypt/live/good.citizen.vpn/README /etc/letsencrypt/live/good.citizen.vpn/cert.pem /etc/letsencrypt/live/good.citizen.vpn/privkey.pem /etc/letsencrypt/live/good.citizen.vpn/chain.pem 

Pour l'authentification du serveur IKEv2, les mêmes certificats X.509 sont utilisés que pour
Https Pour que Strongswan puisse utiliser ces certificats, ils doivent être copiés dans le dossier /etc/ipsec.d.

Voici comment les certificats doivent être localisés:

 cp /etc/letsencrypt/live/good.citizen.vpn/cert.pem /etc/ipsec.d/certs/ cp /etc/letsencrypt/live/good.citizen.vpn/privkey.pem /etc/ipsec.d/private/ cp /etc/letsencrypt/live/good.citizen.vpn/chain.pem /etc/ipsec.d/cacerts/ 

Étant donné que les certificats letsencrypt sont réémis fréquemment, il n'est pas pratique de le faire manuellement. Par conséquent, nous automatisons ce processus en utilisant le hook pour certbot.

La tâche du script consiste à copier trois fichiers dans le dossier souhaité à chaque mise à jour du certificat, puis à envoyer la commande strongswan pour relire les certificats.

Créez le fichier /etc/letsencrypt/renewal-hooks/deploy/renew-copy.sh et rendez-le exécutable.

 #!/bin/sh set -e for domain in $RENEWED_DOMAINS; do case $domain in good.citizen.vpn) daemon_cert_root=/etc/ipsec.d/ # Make sure the certificate and private key files are # never world readable, even just for an instant while # we're copying them into daemon_cert_root. umask 077 cp "$RENEWED_LINEAGE/cert.pem" "$daemon_cert_root/certs/" cp "$RENEWED_LINEAGE/chain.pem" "$daemon_cert_root/cacerts/" cp "$RENEWED_LINEAGE/privkey.pem" "$daemon_cert_root/private/" # Reread certificates /usr/sbin/ipsec reload /usr/sbin/ipsec purgecerts /usr/sbin/ipsec rereadall ;; esac done 

Maintenant, après chaque réédition du certificat, le script copiera les nouveaux fichiers dans les dossiers strongswan et enverra une commande au démon pour relire les certificats.

Configuration de Strongswan


Ajoutez la configuration strongswan /etc/ipsec.conf

 config setup #       uniqueids=no # Increase debug level # charondebug = ike 3, cfg 3 conn %default #       ike=aes256-sha256-modp1024,aes256-sha256-modp2048 #  ""  dpdaction=clear dpddelay=35s dpdtimeout=2000s keyexchange=ikev2 auto=add rekey=no reauth=no fragmentation=yes #compress=yes # left - local (server) side leftcert=cert.pem #      /etc/ipsec.d/certs/ leftsendcert=always #    leftsubnet=0.0.0.0/0 # right - remote (client) side eap_identity=%identity #   IP-  VPN- rightsourceip=10.0.1.0/24 rightdns=8.8.8.8,1.1.1.1 # Windows and BlackBerry clients usually goes here conn ikev2-mschapv2 rightauth=eap-mschapv2 # Apple clients usually goes here conn ikev2-mschapv2-apple rightauth=eap-mschapv2 leftid=good.citizen.vpn 

Les identifiants et mots de passe des clients VPN sont définis dans le fichier /etc/ipsec.secrets

Dans ce fichier, vous devez également spécifier le nom de la clé privée que nous avons précédemment copiée à partir du dossier letsencrypt:

 #       /etc/ipsec.d/private/ : RSA privkey.pem #  VPN #  : EAP "" IrinaYarovaya : EAP "PleaseLoveMe123" Mizooleena : EAP "IwannaLoveToo3332" 

À ce stade, vous pouvez redémarrer le serveur strongswan et vérifier si la nouvelle configuration a été activée:

 $ systemctl restart strongswan $ ipsec statusall Virtual IP pools (size/online/offline): 10.0.1.0/24: 254/0/0 Listening IP addresses: xxx.xxx.38.220 Connections: ikev2-mschapv2: %any...%any IKEv2, dpddelay=35s ikev2-mschapv2: local: [CN=good.citizen.vpn] uses public key authentication ikev2-mschapv2: cert: "CN=good.citizen.vpn" ikev2-mschapv2: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any' ikev2-mschapv2: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear ikev2-mschapv2-apple: %any...%any IKEv2, dpddelay=35s ikev2-mschapv2-apple: local: [good.citizen.vpn] uses public key authentication ikev2-mschapv2-apple: cert: "CN=good.citizen.vpn" ikev2-mschapv2-apple: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any' ikev2-mschapv2-apple: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear 

Vous pouvez voir que la configuration est correctement activée et que le certificat est connecté. À ce stade, vous pouvez déjà vous connecter au serveur VPN, mais il sera sans accès à Internet. Pour libérer des clients sur Internet, vous devez activer le transfert et configurer NAT.

Configuration NAT


Nous activons les packages de transfert:

 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p 

Activez NAT. Il est important de garder à l'esprit qu'il ne s'agit là que d'un exemple de configuration minimale iptables. Personnalisez le reste des règles selon vos besoins.

ethName0 - remplacez par votre nom d'interface
10.0.1.0/24 - la plage d'adresses IP qui seront émises aux clients VPN. Nous l'avons demandé dans /etc/ipsec.conf
111.111.111.111 - l'adresse IP du point de sortie, dans notre exemple c'est l'adresse super.cool.guy.vpn

 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o ethName0 -j SNAT --to-source 111.111.111.111 

Débogage


À ce stade de la configuration, nous devrions obtenir un serveur pleinement fonctionnel auquel les clients peuvent déjà se connecter. Avant de continuer, il est préférable de vérifier cela en vérifiant la connexion.

En cas de problème de connexion, vous pouvez consulter le journal en temps réel:

 journalctl -f -u strongswan 

Démarrage au démarrage


Si tout réussit, vous pouvez ajouter strongswan au démarrage au démarrage:

 systemctl enable strongswan 

Enregistrement des règles iptables


Pour enregistrer les règles iptables après le redémarrage, il existe un package spécial persistant iptables . Il est important de se rappeler qu'il enregistrera l'ensemble de règles actuel et l'ajoutera au démarrage.

 apt install iptables-persistent 

Configuration client


La configuration côté client est extrêmement simple - il suffit d'indiquer au client l'adresse du serveur, le nom d'utilisateur et le mot de passe. Pour macOS et iOS, vous pouvez créer des profils d'autoconfiguration qui suffiront à s'activer en deux clics.

Configuration de Windows
Dans les nouvelles versions de Windows, IKEv2 est configuré dans un simple assistant, accessible à partir du menu de connexion WiFi.



Windows ne définit pas de route par défaut pour une telle connexion, nous allons donc l'installer manuellement. Dans les propriétés de la connexion VPN, allez dans les propriétés de TCP / IPv4 -> en plus et cochez la case "Utiliser une passerelle sur un réseau distant"


cliquable

Configuration de MacOS
MacOS prend en charge IKEv2 à partir de la version 10.11 (El Capitan). La connexion est créée via le menu des paramètres réseau.

image

Ajoutez une nouvelle connexion. Le nom de la connexion est n'importe quel nom arbitraire.

image

Pour authentifier un certificat, vous devez spécifier un nom de domaine. Dans le même temps, dans le champ "Adresse du serveur", vous pouvez spécifier l'adresse IP du serveur et le domaine uniquement dans "ID distant", la résolution DNS ne sera pas effectuée pour la connexion et cela se produira un peu plus rapidement.

image

Le nom d'utilisateur et le mot de passe sont spécifiés à partir du fichier /etc/ipsec.secrets

image

Configuration IOS
La configuration IOS peut être effectuée manuellement via l'assistant, mais il est beaucoup plus pratique d'utiliser le profil de configuration automatique de mobileconfig.

Le réglage manuel a une signification similaire à celle du bureau macOS:

Paramètres -> VPN -> Ajouter une configuration VPN

Profil de configuration automatique pour les appareils Apple

Profils d'autoconfiguration .mobileconfig est un fichier XML avec des paramètres qui peuvent configurer n'importe quoi, des certificats SSL aux connexions VPN.

L'utilisateur n'a qu'à cliquer sur le fichier et tous les paramètres nécessaires seront installés automatiquement.

Exemple de configuration pour se connecter à notre serveur IKEv2.
Pour configurer un fichier pour votre configuration, modifiez simplement quelques paramètres dans ce modèle:

AuthName - nom d'utilisateur du fichier /etc/ipsec.secrets
AuthPassword - mot de passe utilisateur /etc/ipsec.secrets
RemoteAddress - adresse IP de domaine ou de serveur
RemoteIdentifier - domaine pour lequel le certificat est émis

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>IKEv2</key> <dict> <!-- Username and password from ipsec.secrets --> <key>AuthName</key> <string>IrinaYarovaya</string> <key>AuthPassword</key> <string>PleaseLoveMe123</string> <!-- Hostname or IP address of VPN server. Chosing IP address instead of DNS name can avoid issues with client DNS resolvers and speed up connection process. --> <key>RemoteAddress</key> <string>123.123.123.123</string> <!-- leftid in ipsec.conf --> <key>RemoteIdentifier</key> <string>good.citizen.vpn</string> <key>AuthenticationMethod</key> <string>Certificate</string> <key>ChildSecurityAssociationParameters</key> <dict> <!-- in ipsec.conf this proposal is: ike=aes256-sha256-modp2048 --> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <key>DeadPeerDetectionRate</key> <!-- None (Disable) Low (keepalive sent every 30 minutes) Medium (keepalive sent every 10 minutes) High (keepalive sent every 1 minute) --> <string>High</string> <key>ExtendedAuthEnabled</key> <true/> <key>IKESecurityAssociationParameters</key> <dict> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <!-- Always On OnDemand Rule Cen be disabled in connection preferences by "On Demand" checkbox http://www.v2ex.com/t/137653 https://developer.apple.com/library/mac/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html https://github.com/iphoting/ovpnmcgen.rb --> <key>OnDemandEnabled</key> <integer>1</integer> <key>OnDemandRules</key> <array> <dict> <key>Action</key> <string>Connect</string> </dict> </array> </dict> <key>IPv4</key> <dict> <key>OverridePrimary</key> <integer>1</integer> </dict> <key>PayloadDescription</key> <string>Configures VPN settings</string> <key>PayloadDisplayName</key> <string>VPN</string> <key>PayloadIdentifier</key> <string>com.apple.vpn.managed.96C1C38F-D4D6-472E-BA90-9117ED8896B5</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadUUID</key> <string>96C1C38F-D4D6-472E-BA90-9117ED8896B5</string> <key>PayloadVersion</key> <integer>1</integer> <!-- VPN connection name in Network Preferences --> <key>UserDefinedName</key> <string>London VPN</string> <key>VPNType</key> <string>IKEv2</string> </dict> </array> <!-- Set the name to whatever you like, it is used in the profile list on the device --> <key>PayloadDisplayName</key> <string>My Super IKEv2 VPN</string> <!-- A reverse-DNS style identifier (com.example.myprofile, for example) that identifies the profile. This string is used to determine whether a new profile should replace an existing one or should be added. --> <key>PayloadIdentifier</key> <string>vpn.googd.citizen</string> <!-- A globally unique identifier, use uuidgen on Linux/Mac OS X to generate it --> <key>PayloadUUID</key> <string>F3FAD91C-019C-4A79-87A1-CF334C583339</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist> 

Configuration Android
Malheureusement, Android est le seul des systèmes d'exploitation populaires qui ne dispose toujours pas d'une prise en charge intégrée pour IKEv2. Pour vous connecter, vous pouvez utiliser le client officiel Strongswan de PlayMarket

Résumé


Nous avons montré l'option de configuration de serveur la plus simple avec des points d'entrée et de sortie espacés. Cette configuration vous permet d'obtenir la vitesse VPN maximale, car elle n'utilise pas de tunnels supplémentaires entre les serveurs, malgré le fait que les adresses IP des points d'entrée et de sortie se trouvent sur des sous-réseaux différents. Cette approche vous permet d'expérimenter davantage en connectant plus de deux adresses IP au serveur.

Le protocole IKEv2 est parfait pour l'utiliser sur le système d'exploitation de bureau pour le travail quotidien, car il est intégré de manière native au système et, toutes choses étant égales par ailleurs, vous permet d'obtenir plus de vitesse que via des programmes VPN tiers.





Abonnez-vous à notre développeur Instagram


Source: https://habr.com/ru/post/fr469879/


All Articles