Configurer le serveur VPN OpenConnect (ocserv) sur Rocky Linux 9/AlmaLinux 9
Ce didacticiel va vous montrer comment exécuter votre propre serveur VPN en installant le serveur VPN OpenConnect sur Rocky Linux 9/AlmaLinux 9. Le serveur VPN OpenConnect, alias ocserv, est une implémentation open source de Cisco. Protocole VPN AnyConnect, largement utilisé dans les entreprises et les universités. AnyConnect est un protocole VPN basé sur HTTPS qui permet aux utilisateurs individuels de se connecter à un réseau distant.
Pourquoi configurer votre propre serveur VPN ?
- Peut-être êtes-vous un fournisseur de services VPN ou un administrateur système, ce qui vous incombe de configurer votre propre serveur VPN.
- Vous ne faites pas confiance à la politique de non-journalisation des fournisseurs de services VPN, vous optez donc pour l’auto-hébergement.
- Vous pouvez utiliser VPN pour mettre en œuvre une politique de sécurité réseau. Par exemple, si vous exécutez votre propre serveur de messagerie, vous pouvez demander aux utilisateurs de se connecter uniquement à partir de l'adresse IP du serveur VPN en créant une liste blanche d'adresses IP dans le pare-feu. Ainsi, votre serveur de messagerie est renforcé pour empêcher les activités de piratage.
- Peut-être êtes-vous simplement curieux de savoir comment fonctionne le serveur VPN.
Caractéristiques du serveur VPN OpenConnect
- Léger et rapide. Lors de mon test, je peux regarder des vidéos YouTube 4K avec OpenConnect VPN. YouTube est bloqué dans mon pays (Chine).
- Fonctionne sous Linux et la plupart des serveurs BSD.
- Compatible avec le client Cisco AnyConnect
- Il existe un logiciel client OpenConnect pour Linux, macOS, Windows et OpenWRT. Pour Android et iOS, vous pouvez utiliser le client Cisco AnyConnect.
- Prend en charge l'authentification par mot de passe et l'authentification par certificat
- Prend en charge la comptabilité RADIUS.
- Prend en charge l'hébergement virtuel (plusieurs domaines)
- Facile à mettre en place
J'aime particulièrement le fait que, comparé à d'autres technologies VPN, il est très simple et pratique pour l'utilisateur final d'utiliser OpenConnect VPN. Chaque fois que j'installe une distribution Linux sur mon ordinateur et que je souhaite débloquer rapidement des sites Web ou masquer mon adresse IP, j'exécute simplement la commande suivante pour me connecter à mon serveur VPN OpenConnect.
sudo openconnect -b vpn.mydomain.comLe logiciel client openconnect est disponible pour Debian, Ubuntu, Fedora, RHEL, Rocky Linux/AlmaLinux, Arch Linux et OpenSUSE. Vous pouvez facilement l'installer avec votre gestionnaire de packages.
sudo apt install openconnect
sudo dnf install openconnect
sudo pacman -S openconnectExigences
Pour suivre ce tutoriel, vous aurez besoin d'un VPS (Virtual Private Server) pouvant accéder librement aux sites Web bloqués (en dehors de votre pays ou système de filtrage Internet). Je recommande Kamatera VPS, qui propose :
- Essai gratuit de 30 jours.
- À partir de 4 $/mois (1 Go de RAM)
- VPS basé sur KVM hautes performances
- 9 centres de données dans le monde, dont les États-Unis, le Canada, le Royaume-Uni, l'Allemagne, les Pays-Bas, Hong Kong et Israël.
Suivez le tutoriel lié ci-dessous pour créer votre serveur Linux VPS chez Kamatera.
- Comment créer un serveur VPS Linux sur Kamatera
Une fois que vous disposez d'un VPS exécutant Rocky Linux 9/AlmaLinux 9, suivez les instructions ci-dessous.
Vous avez également besoin d'un nom de domaine pour activer HTTPS pour OpenConnect VPN. J'ai enregistré mon nom de domaine auprès de NameCheap parce que le prix est bas et qu'ils offrent une protection de la vie privée gratuite à vie.
Étape 1 : Installer le serveur VPN OpenConnect (ocserv) sur Rocky Linux 9/AlmaLinux 9
Connectez-vous à votre serveur Rocky Linux 9/AlmaLinux 9 via SSH. Exécutez ensuite les commandes suivantes pour installer le package ocserv à partir du référentiel EPEL.
sudo dnf install epel-release
sudo dnf install ocservÉtape 2 : ouvrir les ports dans le pare-feu
Il est d'usage de configurer ocserv pour écouter sur le port 443, alors exécutez les commandes suivantes pour ouvrir le port TCP et UDP 443.
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=443/udpNous devons également ouvrir le port TCP 80 pour obtenir un certificat TLS gratuit de Let's Encrypt.
sudo firewall-cmd --permanent --add-port=80/tcpRechargez le pare-feu pour que les modifications prennent effet.
sudo systemctl reload firewalldÉtape 3 : Installez Let's Encrypt Client (Certbot) sur le serveur Rocky Linux 9/AlmaLinux 9
Le package gnutls-utils installé avec ocserv fournit des outils pour créer votre propre certificat d'autorité de certification et de serveur, mais nous obtiendrons et installerons le certificat Let's Encrypt. L’avantage d’utiliser le certificat Let’s Encrypt est qu’il est gratuit, plus facile à configurer et approuvé par le logiciel client VPN.
Exécutez la commande suivante pour installer le client Let's Encrypt (certbot) sur Rocky Linux 9/AlmaLinux 9.
sudo dnf install certbotPour vérifier le numéro de version, exécutez
certbot --version
Exemple de sortie :
certbot 1.29.0Étape 4 : Obtenez un certificat TLS de confiance auprès de Let's Encrypt
Je recommande d'utiliser le plugin standalone ou webroot pour obtenir le certificat TLS.
Plugin autonome
Si aucun serveur Web n'est exécuté sur votre serveur Rocky Linux 9/AlmaLinux 9 et que vous souhaitez que le serveur VPN OpenConnect utilise le port 443, vous pouvez utiliser le plugin autonome pour obtenir le certificat TLS de Let's Encrypt. Définissez l'enregistrement DNS A pour vpn.example.com sur le site Web de votre registraire de domaine, puis exécutez la commande suivante pour obtenir le certificat.
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email -d vpn.example.comExplication:
certonly: obtenez un certificat mais ne l'installez pas.--standalone: Utilisez le plugin autonome pour obtenir un certificat--preferred-challenges http: effectuez le défi http-01 pour valider notre domaine, qui utilisera le port 80.--agree-tos: acceptez les conditions d'utilisation de Let's Encrypt.--email: l'adresse e-mail est utilisée pour l'enregistrement et la récupération du compte.-d: Spécifiez votre nom de domaine.
Utilisation du plugin Webroot
Si votre serveur Rocky Linux 9/AlmaLinux 9 dispose d'un serveur Web écoutant sur les ports 80 et 443, alors c'est une bonne idée d'utiliser le plugin webroot pour obtenir un certificat car le plugin webroot fonctionne avec à peu près tous les serveurs Web et nous ne le faisons pas. vous devez installer le certificat sur le serveur Web.
Tout d'abord, vous devez créer un hôte virtuel pour vpn.example.com.
Apache
Si vous utilisez le serveur Web Apache, créez un hôte virtuel dans le répertoire /etc/httpd/conf.d/.
sudo nano /etc/httpd/conf.d/vpn.example.com.confEt collez les lignes suivantes dans le fichier.
<VirtualHost *:80>
ServerName vpn.example.com
DocumentRoot /var/www/html/
</VirtualHost>
Enregistrez et fermez le fichier. Rechargez Apache pour que les modifications prennent effet.
sudo systemctl reload httpdUne fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir le certificat Let's Encrypt à l'aide du plugin webroot.
sudo certbot certonly --webroot --agree-tos --email [email -d vpn.example.com -w /var/www/html/Nginx
Si vous utilisez le serveur Web Nginx, créez un hôte virtuel sous /etc/nginx/conf.d/.
sudo nano /etc/nginx/conf.d/vpn.example.com.confCollez les lignes suivantes dans le fichier.
server {
listen 80;
server_name vpn.example.com;
root /usr/share/nginx/html/;
location ~ /.well-known/acme-challenge {
allow all;
}
}Enregistrez et fermez le fichier. Rechargez Nginx pour que les modifications prennent effet.
sudo systemctl reload nginxUne fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir le certificat Let's Encrypt à l'aide du plugin webroot.
sudo certbot certonly --webroot --agree-tos --email [email -d vpn.example.com -w /usr/share/nginx/html/Étape 5 : Modifier le fichier de configuration du serveur VPN OpenConnect
Modifiez le fichier de configuration ocserv.
sudo nano /etc/ocserv/ocserv.confTout d’abord, configurez l’authentification par mot de passe. Par défaut, l'authentification par mot de passe via PAM (Pluggable Authentication Modules) est activée, ce qui vous permet d'utiliser les comptes système Rocky Linux/AlmaLinux pour vous connecter à partir de clients VPN. Ce comportement peut être désactivé en commentant la ligne suivante.
auth = "pam"Si nous souhaitons que les utilisateurs utilisent des comptes VPN distincts au lieu de comptes système pour se connecter, nous devons ajouter la ligne suivante pour activer l'authentification par mot de passe avec un fichier de mots de passe.
auth = "plain[passwd=/etc/ocserv/ocpasswd]"Après avoir terminé l'édition de ce fichier de configuration, nous verrons comment utiliser l'outil ocpasswd pour générer le fichier /etc/ocserv/ocpasswd, qui contient une liste de noms d'utilisateur et de mots de passe encodés.
Remarque : Ocserv prend en charge l'authentification par certificat client, mais Let's Encrypt ne délivre pas de certificat client. Si vous souhaitez activer l'authentification par certificat, vous devez configurer votre propre autorité de certification pour émettre un certificat client.
Ensuite, recherchez les deux lignes suivantes.
tcp-port = 443
udp-port = 443Commentez le port UDP. (Nous utiliserons l'algorithme TCP BBR pour augmenter la vitesse TCP.)
tcp-port = 443
#udp-port = 443Si vous ne souhaitez pas qu'ocserv utilise le port TCP 443 (il existe un serveur Web utilisant le port 443 ?), modifiez le numéro de port TCP. Sinon, laissez-le tranquille.
Trouvez ensuite les deux lignes suivantes. Nous devons les changer.
server-cert = /etc/pki/ocserv/public/server.crt
server-key = /etc/pki/ocserv/private/server.keyRemplacez le paramètre par défaut par le chemin du certificat du serveur Let's Encrypt et du fichier de clé du serveur.
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pemEnsuite, définissez le nombre maximal de clients. La valeur par défaut est 16. Réglez sur zéro pour un nombre illimité.
max-clients = 0Définissez le nombre d'appareils sur lesquels un utilisateur peut se connecter en même temps. La valeur par défaut est 2. Réglez sur zéro pour un nombre illimité.
max-same-clients = 0Par défaut, les paquets keepalive sont envoyés toutes les 32 400 secondes (9 heures). Je préfère utiliser un temps court (30 secondes) pour réduire le risque d'interruption de la connexion VPN.
keepalive = 30Ensuite, recherchez la ligne suivante. Remplacez false par true pour activer la découverte MTU.
try-mtu-discovery = trueIl est recommandé d'activer la compression LZ4, alors décommentez la ligne suivante.
compression = trueVous pouvez définir la durée pendant laquelle un client est autorisé à rester inactif avant d'être déconnecté via les deux paramètres suivants. Si vous préférez que le client reste connecté indéfiniment, commentez ces deux paramètres.
idle-timeout=1200
mobile-idle-timeout=2400Après cela, définissez le domaine par défaut sur vpn.example.com.
default-domain = vpn.example.comLa configuration réseau IPv4 est la suivante par défaut. Cela posera des problèmes car la plupart des routeurs domestiques définissent également la plage du réseau IPv4 sur 192.168.1.0/24.
#ipv4-network = 192.168.1.0
#ipv4-netmask = 255.255.255.0Nous pouvons utiliser une autre plage d'adresses IP privées (telle que 10.10.10.0/24) pour éviter les collisions d'adresses IP, alors décommentez les deux lignes ci-dessus et changez la valeur de ipv4-network en 10.10. 10.0.
ipv4-network = 10.10.10.0
ipv4-netmask = 255.255.255.0Recherchez les deux lignes suivantes et décommentez-les afin que les clients VPN reçoivent des adresses IPv6 privées.
ipv6-network = fda9:4efe:7e3b:03ea::/48
ipv6-subnet-prefix = 64Si vous voyez la ligne suivante
ipv6-network = fda9:4efe:7e3b:03ea::/64Veuillez le remplacer par :
ipv6-network = fda9:4efe:7e3b:03ea::/48Décommentez maintenant la ligne suivante pour tunneliser toutes les requêtes DNS via le VPN.
tunnel-all-dns = trueModifiez l'adresse du résolveur DNS. Vous pouvez utiliser le serveur DNS public de Google.
dns = 8.8.8.8
dns = 8.8.4.4ou le serveur DNS public de Cloudflare.
dns = 1.1.1.1
dns = 1.0.0.1Remarque : Si vous êtes un fournisseur de services VPN, il est conseillé d'exécuter votre propre résolveur DNS. Si un résolveur DNS s'exécute sur le même serveur, spécifiez le DNS comme
dns = 10.10.10.110.10.10.1 est l'adresse IP du serveur VPN OpenConnect dans le réseau local VPN. Cela accélérera un peu les recherches DNS pour les clients, car la latence du réseau entre le serveur VPN et le résolveur DNS est éliminée.
Commentez ensuite tous les paramètres de route (ajoutez le caractère # au début des lignes suivantes), ce qui définira le serveur comme passerelle par défaut pour les clients.
#route = 10.10.10.0/255.255.255.0
#route = 192.168.0.0/255.255.0.0
#route = fef4:db8:1000:1001::/64
#no-route = 192.168.5.0/255.255.255.0Enfin, faites défiler jusqu'à la fin du fichier (dans l'éditeur de texte Nano, vous pouvez aller à la fin du fichier en appuyant sur Ctrl+W, puis en appuyant sur Ctrl+V ), et commentez le paramètre user-profile, car le fichier XML du profil utilisateur n'est pas nécessaire aux clients OpenConnect ou au client Cisco AnyConnect sur iOS et Android.
#user-profile = profile.xmlRemarque : Si le profil utilisateur est activé, le client Cisco AnyConnect sur iOS produira l'erreur suivante lors de la connexion au serveur VPN OpenConnect.
Failed to download the AnyConnect profile. Please try again.Enregistrez et fermez le fichier.
Étape 6 : Création de comptes VPN
Utilisez maintenant l'outil ocpasswd pour générer des comptes VPN.
sudo ocpasswd -c /etc/ocserv/ocpasswd usernameIl vous sera demandé de définir un mot de passe pour l'utilisateur et les informations seront enregistrées dans le fichier /etc/ocserv/ocpasswd. Pour réinitialiser le mot de passe, exécutez simplement à nouveau la commande ci-dessus.
Nous pouvons maintenant démarrer le service ocserv.
sudo systemctl start ocservEt activez le démarrage automatique au moment du démarrage.
sudo systemctl enable ocservVous pouvez vérifier son statut avec :
systemctl status ocservExemple de sortie :
● ocserv.service - OpenConnect SSL VPN server
Loaded: loaded (/usr/lib/systemd/system/ocserv.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2020-01-03 19:04:53 CST; 15s ago
Docs: man:ocserv(8)
Main PID: 19851 (ocserv-main)
Tasks: 2 (limit: 5061)
Memory: 3.2M
CGroup: /system.slice/ocserv.service
├─19851 ocserv-main
└─19853 ocserv-sm
Astuce : si la commande ci-dessus ne se termine pas immédiatement, vous pouvez appuyer sur la touche Q pour reprendre le contrôle du terminal.
Par défaut, le serveur VPN OpenConnect écoute sur le port TCP et UDP 443. S'il est utilisé par un serveur Web, le serveur VPN ne peut pas être démarré. Nous verrons plus tard comment faire en sorte que le serveur VPN OpenConnect et le serveur Web utilisent le même port.
Étape 7 : Activer le transfert IP dans le noyau Linux
Pour que le serveur VPN puisse acheminer les paquets entre les clients VPN et Internet, nous devons activer le transfert IP en exécutant la commande suivante.
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/60-custom.confExécutez également les deux commandes suivantes pour activer l’algorithme TCP BBR afin d’augmenter la vitesse TCP.
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.d/60-custom.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.d/60-custom.confAppliquez ensuite les modifications avec la commande ci-dessous. L'option -p chargera les paramètres sysctl à partir du fichier /etc/sysctl.d/60-custom.conf. Cette commande conservera nos modifications lors des redémarrages du système.
sudo sysctl -p /etc/sysctl.d/60-custom.confÉtape 8 : Configurer le masquage IP dans le pare-feu
Exécutez la commande suivante pour activer le masquage IP pour le sous-réseau 10.10.10.0/24 dans le pare-feu du serveur.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" masquerade'
sudo systemctl reload firewalldCela masquera votre réseau VPN du monde extérieur. Ainsi, Internet ne peut voir que l’adresse IP de votre serveur VPN, mais ne peut pas voir l’adresse IP de votre client VPN, tout comme votre routeur domestique cache votre réseau domestique privé.
Le serveur VPN OpenConnect est désormais prêt à accepter les connexions client.
Installer et utiliser le client VPN OpenConnect sur Rocky Linux 9/AlmaLinux 9/Fedora Desktop
Exécutez la commande suivante pour installer le client de ligne de commande OpenConnect VPN sur le bureau Fedora.
sudo dnf install openconnectSur Rocky Linux 9/AlmaLinux 9, vous devez activer le référentiel EPEL afin d'installer le client.
sudo dnf install epel-release
sudo dnf install openconnectEnsuite, vous pouvez vous connecter au serveur VPN à partir de la ligne de commande comme ci-dessous. L'indicateur -b le fera s'exécuter en arrière-plan une fois la connexion établie.
sudo openconnect -b vpn.example.comPar défaut, le client openconnect envoie la requête au port 443 du serveur. Si vous avez configuré un port différent pour le serveur, vous pouvez ajouter le numéro de port.
sudo openconnect -b vpn.example.com:port-numberIl vous sera demandé de saisir votre nom d'utilisateur et votre mot de passe VPN. Si la connexion est établie avec succès, vous verrez le message suivant.
Got CONNECT response: HTTP/1.1 200 CONNECTED
CSTP connected. DPD 90, Keepalive 32400
Connected as 10.10.10.139, using SSL + lz4
Continuing in background; pid 2137
Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(PSK)-(AES-256-GCM).Si la connexion échoue, vous pouvez consulter le journal ocserv pour savoir pourquoi. (Peut-être n'avez-vous pas saisi le mot de passe correctement.)
sudo journaltcl -eu ocservPour arrêter la connexion, exécutez :
sudo pkill openconnectPour exécuter le client de manière non interactive, utilisez la syntaxe suivante.
echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdinSi vous êtes connecté avec succès au serveur VPN, mais que votre adresse IP publique ne change pas, c'est parce que le transfert IP ou le masquage IP ne fonctionne pas.
Connexion automatique au démarrage du système
Pour que le client VPN OpenConnect se connecte automatiquement au serveur au moment du démarrage, nous pouvons créer une unité de service systemd.
sudo nano /etc/systemd/system/openconnect.serviceMettez les lignes suivantes dans le fichier. Remplacez le texte rouge.
[Unit]
Description=OpenConnect VPN Client
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin'
KillSignal=SIGINT
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
Enregistrez et fermez le fichier. Activez ensuite ce service pour qu'il démarre au moment du démarrage.
sudo systemctl enable openconnect.serviceExplication du contenu du fichier :
After=network-online.targetetWants=network-online.targetfont fonctionner ce service une fois le réseau opérationnel.- En réalité, ce service peut toujours fonctionner avant que le réseau ne soit opérationnel. Nous ajoutons
Restart=alwaysetRestartSec=2pour redémarrer ce service après 2 secondes si ce service échoue. - Systemd ne reconnaît pas la redirection de canal. Ainsi, dans la directive
ExecStart, nous enveloppons la commande entre guillemets simples et l'exécutons avec le shell Bash. - Étant donné que le client VPN OpenConnect s'exécutera en tant que service systemd, qui s'exécute en arrière-plan, il n'est pas nécessaire d'ajouter l'indicateur
-bà la commandeopenconnect. - La directive
KillSignalindique à Systemd d'envoyer le signalSIGINTlorsque la commandesystemctl stop openconnectest émise. Cela effectuera un arrêt propre en fermant la session et en restaurant les paramètres du serveur DNS et la table de routage du noyau Linux.
Pour démarrer ce service Systemd immédiatement, exécutez
sudo systemctl start openconnectPour arrêter ce service Systemd, exécutez
sudo systemctl stop openconnectClient GUI OpenConnect pour Windows et MacOS
Ils peuvent être téléchargés à partir de la page Github de l'interface graphique OpenConnect.
Vitesse
OpenConnect VPN est assez rapide. Je peux l'utiliser pour regarder des vidéos 4k sur YouTube. Comme vous pouvez le constater, la vitesse de connexion est de 63 356 Kbps, ce qui correspond à 61 Mbit/s.
Et voici les résultats des tests sur speedtest.net.
Optimisation de la vitesse
OpenConnect utilise par défaut le protocole TLS sur UDP (DTLS) pour atteindre une vitesse plus rapide, mais UDP ne peut pas fournir une transmission fiable. TCP est plus lent qu'UDP mais peut fournir une transmission fiable. Un conseil d'optimisation que je peux vous donner est de désactiver DTLS, d'utiliser TLS standard (sur TCP), puis d'activer TCP BBR pour augmenter la vitesse TCP.
Vous souhaiterez peut-être également désactiver DTLS pour contourner les restrictions du pare-feu, car DTLS utilise le port UDP 443. Le TLS standard utilise le port TCP 443.
Pour désactiver DTLS, commentez (ajoutez le symbole # au début) la ligne suivante dans le fichier de configuration ocserv.
udp-port = 443Enregistrez et fermez le fichier. Redémarrez ensuite le service ocserv.
sudo systemctl restart ocserv.servicePour activer TCP BBR, veuillez consulter le didacticiel suivant. Il est écrit pour Ubuntu, mais fonctionne également pour Rocky Linux/AlmaLinux. Notez que vous devez désactiver DTLS dans ocserv, sinon TCP BBR ne fonctionnera pas.
- Comment améliorer facilement les performances du réseau du serveur en activant TCP BBR
Dans mon test, le TLS standard avec TCP BBR activé est deux fois plus rapide que le DTLS.
Un autre facteur très important affectant la vitesse est la qualité de la connexion entre votre ordinateur local et le serveur VPN. Si vous habitez au Moyen-Orient et que le serveur VPN est situé aux États-Unis, la vitesse sera lente. Choisissez un centre de données proche de chez vous.
Renouveler automatiquement le certificat Let's Encrypt
Modifiez le fichier crontab de l'utilisateur root.
sudo crontab -eAjoutez la ligne suivante à la fin du fichier pour exécuter le travail Cron quotidiennement. Si le certificat expire dans 30 jours, certbot tentera de renouveler le certificat. Il est nécessaire de redémarrer le service ocserv pour que le serveur VPN récupère le nouveau certificat et le nouveau fichier de clé.
@daily certbot renew --quiet; systemctl restart ocservDes conseils de dépannage
Notez que si vous utilisez OpenVZ VPS, assurez-vous d'activer le périphérique réseau virtuel TUN dans le panneau de configuration VPS. (Si vous utilisez Kamatera VPS, alors vous disposez d'un VPS basé sur KVM, vous n'avez donc pas à vous en soucier.)
Si vous rencontrez un problème, consultez le journal du serveur OpenConnect VPN.
sudo journalctl -eu ocserv.serviceJ'ai découvert que si je change le port 443 en un autre port, le grand pare-feu de Chine bloquera cette connexion VPN.
Si ocserv vous indique qu'il ne peut pas charger le fichier /etc/ocserv/ocserv.conf, vous pouvez arrêter ocserv.
sudo systemctl stop ocservEnsuite, exécutez-le au premier plan avec le débogage activé.
sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10Ensuite, la sortie pourrait vous donner des indices sur les raisons pour lesquelles ocserv ne fonctionne pas.
Si vous êtes connecté avec succès au serveur VPN, mais que vous ne pouvez pas naviguer sur Internet, c'est parce que le transfert IP ou le masquage IP ne fonctionne pas.
Aucun adaptateur Tap-Windows installé sur ce système
Si vous utilisez le client Windows de l'interface graphique OpenConnect et que vous avez trouvé l'erreur « Aucun adaptateur Tap-Windows installé sur ce système » dans les journaux (Affichage - Fenêtre de journal), cela est probablement dû au fait que vous avez installé d'autres clients VPN. ensuite comme OpenVPN.
Pour corriger cette erreur, vous devez désinstaller le client OpenConnect GUI et le réinstaller. Dans l'assistant d'installation, vous aurez la possibilité d'installer le pilote TAP.
Faire en sorte que le serveur VPN OpenConnect et le serveur Web utilisent le port 443 en même temps
Veuillez lire l'article suivant :
- Exécutez le serveur VPN OpenConnect et Apache/Nginx sur la même boîte avec HAProxy
Comment désactiver TLS 1.0 et TLS 1.1 dans ocserv
Le conseil PCI a déconseillé TLS 1.0 le 30 juin 2018 et les navigateurs Web grand public vont désactiver TLS 1.0 et TLS 1.1 en 2020. Nous devrions faire de même avec le serveur VPN. Modifiez le fichier de configuration principal.
sudo nano /etc/ocserv/ocserv.confRecherchez la ligne suivante :
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"Pour désactiver TLS 1.0 et TLS 1.1 sur le serveur VPN OpenConnect, remplacez-le par :
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1"Enregistrez et fermez le fichier. Puis redémarrez ocserv.
sudo systemctl restart ocservDésormais, ocserv n'acceptera que TLS 1.3 et TLS 1.2. Pour plus d'informations sur la configuration du paramètre TLS dans ocserv, veuillez consulter Chaînes de priorité GnuTLS.
Pour vérifier si TLS 1.0 est pris en charge sur votre serveur OpenConnect VPN, exécutez la commande suivante.
openssl s_client -connect vpn.your-domain.com:443 -tls1Et vérifiez TLS 1.1
openssl s_client -connect vpn.your-domain.com:443 -tls1_1Si vous voyez le message suivant dans le résultat, cela signifie que la version TLS n'est pas prise en charge.
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supportedConfiguration par utilisateur ou par groupe
Ocserv permet des configurations par utilisateur et par groupe. Pour activer cette fonctionnalité, décommentez les deux lignes suivantes dans le fichier /etc/ocserv/ocserv.conf.
config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/Enregistrez et fermez le fichier. Créez ensuite le répertoire de configuration par utilisateur et par groupe.
sudo mkdir /etc/ocserv/config-per-user/
sudo mkdir /etc/ocserv/config-per-group/Ensuite, vous pouvez créer un fichier sous ces deux répertoires. Par exemple, créez le fichier user1 pour permettre une configuration personnalisée pour user1.
sudo nano /etc/ocserv/config-per-user/user1Vous pouvez également créer le fichier group1 pour permettre une configuration personnalisée pour le groupe nommé group1.
sudo nano /etc/ocserv/config-per-group/group1Vous pouvez ajouter quelque chose comme ci-dessous dans le fichier.
route = 10.10.10.0/255.255.255.0Cela signifie qu'après la connexion de user1 à ce serveur VPN, seul le trafic vers le réseau 10.10.10.0/24 sera acheminé via le serveur VPN. Le trafic vers d'autres adresses IP est acheminé via la passerelle d'origine. C'est ce qu'on appelle le split tunneling, qui est utile dans les cas suivants :
- Vous voulez simplement que les clients VPN puissent parcourir les ressources internes et vous ne voulez pas que tout le trafic passe par le serveur VPN.
- Vous devez créer un réseau privé pour les serveurs cloud.
- Le client doit se connecter à plusieurs VPN. Un VPN peut utiliser le tunneling fractionné et l’autre un tunnel complet.
Enregistrez et fermez le fichier. Redémarrez ocserv pour que les modifications prennent effet.
Comment configurer le relais VPN
Supposons qu'il y ait deux serveurs : le serveur A et le serveur B.
- Vous disposez d’une bonne connexion au serveur A. La latence est très faible et aucun paquet n’est abandonné.
- Vous avez une mauvaise connexion au serveur B. La latence est élevée et un paquet est abandonné.
- La connexion entre le serveur A et le serveur B est bonne.
Naturellement, vous souhaitez installer un VPN sur le serveur A. Mais que se passe-t-il si vous souhaitez qu’Internet voie votre trafic provenant de l’adresse IP du serveur B ? Eh bien, vous pouvez installer ocserv VPN sur le serveur B, puis configurer HAProxy sur le serveur A pour proxy le trafic entre votre ordinateur et le serveur B.
Sur le serveur A, installez HAProxy.
sudo dnf install haproxyModifiez le fichier de configuration principal.
sudo nano /etc/haproxy/haproxy.cfgCréez un front-end et un back-end comme avant. Remplacez 12.34.56.78 par l'adresse IP publique du serveur A. Remplacez 12.34.56.79 par l'adresse IP publique du serveur B.
frontend https
bind 12.34.56.78:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend ocserv if { req_ssl_sni -i vpn.example.com }
default_backend ocserv
backend ocserv
mode tcp
option ssl-hello-chk
server ocserv 12.34.56.79:443 send-proxy-v2
Enregistrez et fermez le fichier. Sur le serveur B, vous devez configurer ocserv pour écouter l'adresse IP publique et activer le protocole proxy comme avant. Après cela, modifiez l'enregistrement A de vpn.example.com. Il convient de pointer vers l'adresse IP du serveur A.
Redémarrez HAProxy et Ocserv et cela devrait fonctionner.
Remarque : Si le serveur B utilise également HAProxy, vous devez alors supprimer le paramètre
send-proxy-v2dans la configuration HAProxy ci-dessus.
Hébergement virtuel
Pour ajouter un nouvel hôte virtuel dans ocserv, vous devez d'abord utiliser la méthode de l'étape 4 pour obtenir un certificat TLS pour le nouvel hôte virtuel. Modifiez ensuite le fichier de configuration ocserv.
sudo nano /etc/ocserv/ocserv.confAllez au bas de ce fichier. Dans l'éditeur de texte Nano, vous pouvez appuyer sur Ctrl+W, puis sur Ctrl+V pour accéder au bas d'un fichier. Ajoutez les lignes suivantes. Remplacez vpn2.example.com par le nom d'hôte du deuxième hôte virtuel.
[vhost:vpn2.example.com]
#Allow password authentication and certificate authentication
enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]"
auth = "certificate"
tcp-port = 443
#uncomment the two lines if ocserv runs behind HAProxy.
#listen-host = 127.0.0.1
#listen-proxy-proto = true
# SSL/TLS configuration
ca-cert = /etc/ocserv/ssl/ca-cert.pem
server-cert = /etc/letsencrypt/live/vpn2.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn2.example.com/privkey.pem
cert-user-oid = 0.9.2342.19200300.100.1.1
#Networking configuration. Use a different network range for this virtual host.
device = vpns
ipv4-network = 10.10.20.0
ipv4-netmask = 255.255.255.0
route = default
dns = 8.8.8.8
tunnel-all-dns = true
compression = true
max-clients = 0
max-same-clients = 0
try-mtu-discovery = true
idle-timeout=1200
mobile-idle-timeout=2400
config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/
Enregistrez et fermez le fichier. Puis redémarrez ocserv.
sudo systemctl restart ocservNotez que le démon ocserv peut vous indiquer que certains paramètres seront ignorés pour l'hôte virtuel. Cependant, j’ai constaté que certains des paramètres ignorés sont réellement nécessaires. Par exemple, si vous supprimez la ligne device=vpns de l'hôte virtuel, vous pourriez rencontrer l'erreur suivante lors de l'établissement d'une connexion VPN à l'hôte virtuel.
VPN service unavailable; reason: Server configuration errorEt le serveur VPN produirait le message d'erreur suivant dans le journal.
no networks are configured; rejecting clientNotez que le client VPN AnyConnect sur iOS ne prend pas en charge TLS SNI, les utilisateurs iOS se connecteront donc à l'hôte virtuel par défaut.
Comment exécuter plusieurs instances d'ocserv
Un processus ocserv ne peut se lier qu'à un seul port TCP ou UDP sur votre serveur. Si vous souhaitez autoriser ocserv à se lier à plusieurs ports TCP ou UDP, vous devez exécuter plusieurs processus ocserv. C'est très simple. Copiez le /usr/lib/systemd/system/ocserv.service dans un nouveau fichier.
sudo cp /usr/lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.serviceModifiez ensuite le nouveau fichier.
sudo nano /etc/systemd/system/ocserv2.serviceChangement
/etc/ocserv/ocserv.confà
/etc/ocserv/ocserv2.confEnregistrez et fermez le fichier. Ensuite, vous pouvez modifier le fichier /etc/ocserv/ocserv2.conf et ajouter vos configurations personnalisées. Une fois que vous avez terminé, démarrez le deuxième service ocserv.
sudo systemctl start ocserv2Emballer
C'est ça! J'espère que ce tutoriel vous a aidé à installer et configurer OpenConnect VPN sur le serveur Rocky Linux 9/AlmaLinux 9. Comme toujours, si vous avez trouvé cet article utile, abonnez-vous à notre newsletter gratuite pour obtenir plus de trucs et astuces. Prenez soin de vous 🙂



