Installation de OpenVPN avec IPv4 + IPv6
Dossiers
2024-04-11
SOMMAIRE
Voici un tutoriel pour installer openVPN sur un serveur qui a une IP publique, à la fois en IPv4 et IPv6. Le but est d'avoir un VPN qui permet à l'ordinateur ou au mobile connecté d'obtenir une adresse IPv4 NAT et une adresse IPv6 publique, par exemple pour se connecter à des sites internet en IPv6 à partir de réseaux dépourvus de ce type d'IP.
Ce tutoriel se base sur une installation de Debian 12 avec une configuration qui a déjà une IPv4 et une IPv6 publique, déjà configurées.
Installation et configuration de openVPN
Tout d'abord, on va installer les paquets pour openVPN et easyRSA pour gérer les certificats :
# apt install openvpn easy-rsa
Ensuite, on crée l'arborescence pour la partie certifcat serveurs avec cette commande :
# make-cadir /var/openvpn-ca && cd /var/openvpn-ca
Puis on modifie dans le fichier vars, les lignes qui contiennent EASYRSA_REQ avec les informations qu'il faut.
Ensuite, on lance la création des clés avec ces commandes :
# ./easyrsa init-pki
# ./easyrsa build-ca
# ./easyrsa gen-req server nopass
# ./easyrsa sign-req server server
# ./easyrsa gen-dh
# openvpn --genkey --secret pki/ta.key
Ensuite, on va créer la configuration du serveur openVPN de base avec ces commandes :
# cat /usr/share/doc/openvpn/examples/sample-config-files/server.conf | tee /etc/openvpn/server.conf
# cp /var/openvpn-ca/pki/{ca.crt,dh.pem,ta.key} /etc/openvpn
# cp /var/openvpn-ca/pki/issued/server.crt /etc/openvpn
# cp /var/openvpn-ca/pki/private/server.key /etc/openvpn
Une fois en place, on modifie le fichier /etc/openvpn/server.conf pour avoir ces lignes avec les bonnes valeurs :
ca ca.crt
cert server.crt
key server.key
dh dh.pem
;tls-auth ta.key 0
tls-crypt ta.key
A la fin du fichier, on va ajouter ces lignes pour gérer l'IPv6 (c'est votre préfixe dédié pour le VPN :
server-ipv6 2a0a:xxxx:xxxx:xxxx::/64
push "route-ipv6 2000::/3"
Configuration du pare-feu
Pour que le réseau du VPN soit bien connecté au réseau internet sur lequel le serveur est connecté, il faut autoriser le forward d'IP.
Dans le fichier /etc/sysctl.conf, on active ces 2 lignes (dé-commenter ou ajouter les lignes si absentes) :
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
Puis on active la nouvelle configuration avec ces commandes :
# sysctl -p
# systemctl start openvpn@server
# systemctl enable openvpn@server
Dans la configuration iptables, on va ajouter ces règles, au début de la configuration actuelle :
-A INPUT -i eno1 -m state --state NEW -p udp --dport 1194 -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tun+ -o eno1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eno1 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
Puis à la fin du même fichier :
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE
COMMIT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i tun0 -o eno1 -s 2a0a:xxxx:xxxx:xxxx::/64 -m state --state NEW -j ACCEPT
-A FORWARD -i tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Puis, à la fin du même fichier :
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 2a0a:xxxx:xxxx:xxxx::/64 -o eno1 -j MASQUERADE
COMMIT
N'oubliez pas d'appliquer la configuration de iptables et ip6tables et de vous assurer que celle-ci persiste bien d'un reboot à l'autre.
Configuration des certificats clients
Le nom du client pour l'exemple est client3, à remplacer par le nom que vous choisissez, il doit être différent pour chaque client.
On va exécuter ces commandes pour configurer un certificat client :
# cd /var/openvpn-ca
# ./easyrsa gen-req client3 nopass
# ./easyrsa sign-req client client3
Puis on va créer le dossier /root/client3 dans lequel on exécute ces commandes :
# cp pki/private/client3.key /root/client/
# cp pki/issued/client3.crt /root/client/
# cp pki/{ca.crt,ta.key} /root/client/
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /root/client/
On modifie ensuite le fichier client.conf avec les bonnes informations (l'IP est l'IP publique du serveur) :
remote xxx.xxx.xxx.xxx 1194
user nobody
group nogroup
;ca ca.crt
;cert client.crt
;key client.key
;tls-auth ta.key 1
key-direction 1
Enfin, on crée le fichier /var/openvpn-ca/config_gen.sh qui va permettre de créer le fichier .ovpn pour déployer le certificat :
#!/bin/bash
KEY_DIR=/root/client
OUTPUT_DIR=/root
BASE_CONFIG=/root/client/client.conf
cat ${BASE_CONFIG}
<(echo -e '<ca>')
${KEY_DIR}/ca.crt
<(echo -e '</ca>
<cert>')
${KEY_DIR}/${1}.crt
<(echo -e '</cert>
<key>')
${KEY_DIR}/${1}.key
<(echo -e '</key>
<tls-crypt>')
${KEY_DIR}/ta.key
<(echo -e '</tls-crypt>')
> ${OUTPUT_DIR}/${1}.ovpn
Enfin, on exécute le fichier config_gen.sh avec ces commandes :
# chmod 700 /var/openvpn-ca/config_gen.sh
# ./config_gen.sh client3
Le fichier client3.ovpn permet de déployer le certificat et la configuration simplement en chargeant le fichier sur n'importe quel ordinateur, mobile ou tablette avec openVPN déjà installé.