De nos jours, la technologie VPN gagne en popularité. Les utilisateurs ordinaires utilisent un VPN pour accéder à Internet en toute sécurité. Il permet également de contourner les sites web et services bloqués localement et de se protéger contre d'éventuels comportements malveillants externes. Lorsque vous vous connectez à un serveur VPN, un tunnel sécurisé relie votre ordinateur au serveur, inaccessible de l'extérieur. Le serveur VPN devient alors votre point d'accès à Internet. Il existe de nombreux services VPN, gratuits ou payants, mais s'ils ne vous conviennent pas, vous pouvez toujours configurer votre propre serveur VPN.
Pour exécuter votre propre VPN, vous devez louer un serveur VPSIl existe différents logiciels permettant de créer une connexion VPN. Ils diffèrent par les systèmes d'exploitation pris en charge et les algorithmes utilisés. Nous allons examiner deux approches indépendantes pour configurer un serveur VPN. La première repose sur le protocole PPTP, déjà considéré comme obsolète et peu sécurisé, mais très simple à configurer. L'autre utilise le logiciel moderne et sécurisé OpenVPN, mais nécessite l'installation d'une application cliente tierce et une configuration plus approfondie.
Dans notre environnement de test, nous utiliserons un serveur virtuel fonctionnant sous Ubuntu Server 18.04. Le pare-feu sera désactivé sur le serveur, car sa configuration mérite un article spécifique. Nous décrirons le processus d'installation sous Windows 10.
Préparation
Quel que soit le serveur VPN choisi, l'accès à Internet sera configuré de manière intégrée au système d'exploitation. Pour accéder à Internet via une interface de service externe, vous devez autoriser la transmission de paquets entre les interfaces et configurer la traduction d'adresses réseau.
Pour activer la redirection de paquets, ouvrez le fichier « /etc/sysctl.conf » et changer « net.ipv4.ip_forward » valeur du paramètre dans 1.

Pour appliquer les modifications sans redémarrer l'ordinateur, exécutez la commande
sudo sysctl -p /etc/sysctl.conf
La traduction d'adresse réseau est configurée au moyen de iptables. Tout d’abord, vérifiez le nom de votre interface réseau externe en exécutant la commande "Afficher le lien IP" - vous en aurez besoin à l'étape suivante. Notre nom est « ens3 ».

Activez la traduction d’adresses réseau sur votre interface externe pour tous les nœuds du réseau local.
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Notez que vous devez spécifier le vrai nom de l'interface de votre serveur, il peut être différent du nôtre.
Par défaut, toutes les règles créées par iptables sont réinitialisées après le redémarrage du serveur. Pour éviter cela, utilisez « iptables-persistent » utilitaire. Installez le paquet suivant :
sudo apt install iptables-persistent
Au cours de l'installation, une fenêtre de configuration vous proposera d'enregistrer les règles iptables actuelles. Les règles étant déjà définies, il vous suffit de confirmer et de cliquer sur "Oui" deux fois. Désormais, les règles seront appliquées automatiquement après le redémarrage du serveur.

serveur PPTP
Configuration du serveur
Installer le paquet :
sudo apt install pptpd
Une fois l'installation terminée, ouvrez le fichier « /etc/pptpd.conf » dans n'importe quel éditeur de texte et modifiez-le comme ceci :
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
Après cela, éditez le fichier « /etc/ppp/pptpd-options »La plupart des paramètres sont définis par défaut.
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
À l'étape suivante, vous devrez créer un enregistrement pour les connexions client. Imaginons que vous souhaitiez ajouter un utilisateur. « utilisateur vpn » avec mot de passe "1" et autorisez-lui l'adressage dynamique. Ouvrez le fichier « /etc/ppp/chap-secrets » et ajoutez la ligne suivante avec les paramètres de l'utilisateur à la fin du fichier :
vpnuser pptpd 1 *
« pptpd » la valeur est le nom du service que nous avons spécifié dans le fichier « pptpd-options ». Au lieu de "*" Vous pouvez spécifier une adresse IP fixe. Le fichier résultant « chap-secrets » Devrait ressembler à ceci:

Pour appliquer les paramètres, réinitialisez le pptpd service et l'ajouter au chargement automatique.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
La configuration du serveur est terminée.
Paramétrage client
Open "Début" - "Paramètres" - Réseau & Internet - «VPN» et cliquez sur « Ajouter une connexion VPN »

Entrez les paramètres de connexion dans la fenêtre ouverte et cliquez sur "Sauvegarder"
- Fournisseur VPN : « Windows (intégré) »
- Nom de la connexion : « vpn_connect » (vous pouvez choisir n’importe quel nom)
- Nom ou adresse du serveur : (précisez l'adresse IP externe du serveur)
- Type de VPN : « Auto »
- Type d'informations de connexion : « Nom d'utilisateur et mot de passe »
- Nom d'utilisateur: utilisateur VPN (nom spécifié dans le fichier « chap-secrets » sur le serveur)
- Mot de passe: 1 (comme dans le fichier « chap-secrets »)
Après avoir enregistré les paramètres, la nouvelle connexion VPN s'affichera dans la fenêtre. Faites un clic gauche sur la connexion et sélectionnez "Connect". En cas de connexion réussie, vous verrez "Lié" état.

Dans les options, vous trouverez les adresses internes du client et du serveur. Champ « Adresse de destination » affiche l'adresse du serveur externe.

Une fois connecté, l'adresse IP interne du serveur, 172.16.0.1 dans notre cas, devient la passerelle par défaut pour tous les paquets sortants.

En utilisant n'importe quel service en ligne, vous pouvez vous assurer que l'adresse IP externe de l'ordinateur est désormais la même que l'adresse IP de votre serveur VPN.
OpenVPN serveur
Configuration du serveur
Promouvons le niveau d'autorisations de l'utilisateur actuel car pour notre configuration ultérieure, nous aurons besoin d'un accès root.
sudo -s
Installez tous les paquets nécessaires. Nous aurons besoin « Easy-RSA » paquet pour gérer les clés de chiffrement.
apt install openvpn easy-rsa iptables-persistent
Autoriser les connexions entrantes sur le port 1194 via le protocole UDP et appliquer les règles iptables.
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
Créez un répertoire avec les fichiers copiés à partir du package « Easy-RSA » et naviguez-y.
make-cadir ~/openvpn
cd ~/openvpn
Générer une infrastructure à clé publique (PKI).
./easyrsa init-pki
Générer le certificat racine de l'autorité de certification (CA).
./easyrsa build-ca
Lors de la création, vous serez invité à définir et à mémoriser un mot de passe. Vous devrez également répondre à des questions et saisir des informations sur le propriétaire de la clé. Vous pouvez conserver les valeurs par défaut entre crochets. Appuyez sur « Entrée » pour finaliser la saisie.
Générez une clé privée et une demande de certificat. Spécifiez un nom arbitraire comme argument ; dans notre cas, « serveur-vpn ».
./easyrsa gen-req vpn-server nopass
Laissez la valeur Nom commun par défaut.
Signez la demande de certificat de serveur générée.
./easyrsa sign-req server vpn-server
À cette étape, répondez « oui » pour confirmer la signature, puis saisissez le mot de passe qui a été créé lors de la génération du certificat racine.

Générer des paramètres Diffie-Hellman. Ces paramètres permettent l'échange sécurisé de clés entre le serveur et le client.
./easyrsa gen-dh

Tous les fichiers nécessaires ont été générés. Créons un dossier « keys » dans le répertoire de travail d'OpenVPN pour stocker les clés et y copier les fichiers créés.
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
Configurer NAT en utilisant iptables
règles. Créez un fichier nommé nat
et ouvrez-le pour le modifier dans le /etc/openvpn/
répertoire.
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
Enregistrez le fichier et rendez-le exécutable.
sudo chmod 755 /etc/openvpn/nat
Copiez le modèle de configuration du serveur.
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
Ouvrez le fichier « /etc/openvpn/server.conf » pour l'édition, assurez-vous qu'il contient les lignes suivantes et modifiez-les si nécessaire :
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
Activer la redirection du trafic sur le serveur.
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
Démarrez OpenVPN pour appliquer la configuration.
systemctl restart openvpn@server
La configuration du serveur est terminée !
Paramétrage client
Accédez au site officiel d'OpenVPN «https://openvpn.net», allez à la « COMMUNAUTÉ » .

Faites défiler vers le bas et téléchargez le programme d'installation correspondant à la version de votre système d'exploitation. Dans notre cas, il s'agit de Windows 11 ARM64.

Installez l'application en laissant tous les paramètres par défaut.
À l'étape suivante, vous devrez préparer le fichier suivant sur le serveur et le transférer sur l'ordinateur client :
- clés publiques et privées ;
- copie de la clé du centre de certification ;
- modèle de fichier de configuration.
Connectez-vous au serveur, élevez les privilèges et accédez à notre répertoire créé "~/openvpn
".
sudo -s
cd ~/openvpn
Générez une clé privée et une demande de certificat pour le client. Spécifiez un nom arbitraire comme argument ; dans notre cas, il s'agit de « client1 ».
./easyrsa gen-req client1 nopass
Saisissez le mot de passe que nous avons défini lors de la création du certificat racine et laissez la valeur Nom commun par défaut.

Signez la demande de certificat client générée.
./easyrsa sign-req client client1
À cette étape, répondez « oui » pour confirmer la signature, puis saisissez le mot de passe qui a été créé lors de la génération du certificat racine.

Pour plus de commodité, créons un dossier nommé « client1 » dans le répertoire personnel et copions-y tous les fichiers destinés à être transférés vers l'ordinateur client.
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
Copiez le modèle de fichier de configuration client dans le même répertoire. Modifiez l'extension du fichier en « .ovpn » pendant la copie.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
Changer le propriétaire du répertoire et de tous les fichiers « ~/client1/ » pour pouvoir les distribuer au client. Faisons « Mihail » le propriétaire dans notre cas.
chown -R mihail:mihail ~/client1
Accédez à l'ordinateur client et copiez le contenu du « ~/client1/ » dossier. Vous pouvez le faire à l'aide de « PSCP » utilitaire, qui va avec Putty.
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
Vous pouvez stocker des fichiers clés « ca.crt », « client1.crt », « client1.key » où vous voulez. Dans notre cas, ils se trouvent dans ce dossier. « c:\Program Files\OpenVPN\keys », et nous modélisons le fichier de configuration « client.ovpn » into the « c:\Program Files\OpenVPN\config » répertoire.
Passons maintenant à la configuration du client. Ouvrez le fichier « c:\Program Files\OpenVPN\config\client.ovpn » dans un éditeur de texte et modifiez les lignes suivantes :
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
Laissez le reste intact.
Enregistrez le fichier et lancez l'application cliente « Interface graphique OpenVPN ».

Faites un clic droit sur l'icône de l'application dans la barre des tâches et choisissez "Connect". Si la connexion est réussie, l'icône deviendra verte.
Utilisez n’importe quel service en ligne pour vous assurer que votre adresse IP publique a changé et est désormais la même que l’adresse IP du serveur.