Openvpn

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type VPN SSL/TLS, logiciel libre
Port par défaut 1194/UDP (souvent basculé sur 443/TCP pour traverser les proxys)
Config /etc/openvpn/
Voir aussi Openvpn centos7 · Shorewall

OpenVPN est une solution libre de VPN reposant sur SSL/TLS, permettant de monter un tunnel chiffré entre un serveur et des clients (ou entre deux sites). Elle s'appuie sur OpenSSL pour la cryptographie et sur une infrastructure à clés publiques (PKI) générée avec l'outil easy-rsa.

Installation (Debian/Ubuntu)

aptitude install openvpn

mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
chown -R $USER /etc/openvpn/easy-rsa/

(la version 2.0 d'easy-rsa fournie dans l'exemple ci-dessus est ancienne ; les distributions récentes livrent easy-rsa 3.x, dont la syntaxe des commandes diffère légèrement — à vérifier selon la version installée.)

Génération de la PKI (autorité, serveur, clés)

cd /etc/openvpn/easy-rsa/
# éditer le fichier vars pour renseigner les champs du certificat (pays, org, etc.)

source vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
openvpn --genkey --secret keys/ta.key

Fichiers produits dans /etc/openvpn/easy-rsa/keys : server.crt, server.key, ta.key, dh1024.pem, ca.key, ca.crt.

cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn

# préparation du chroot
mkdir /etc/openvpn/jail
mkdir /etc/openvpn/clientconf

Configuration serveur

# server TCP/443
mode server
dev tun
proto tcp
port 443

# clé et certificats
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
tls-auth ta.key 0
cipher AES-256-CBC

# réseau
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120

# sécurité : abandon des privilèges + chroot après démarrage
user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo

# journalisation
verb 3
mute 20
status openvpn-status.log
log-append /var/log/openvpn.log

(coquille corrigée : la directive key pointait par erreur sur server.key ré-assignée à cert dans une version antérieure du document — cert doit référencer server.crt, pas server.key.)

openvpn /etc/openvpn/server.conf
systemctl enable --now openvpn@server

tun vs tap

Ce sont des périphériques réseau virtuels utilisés par OpenVPN :

  • tap simule un lien de niveau liaison (couche 2 OSI), pont Ethernet complet ;
  • tun simule un tunnel réseau de niveau 3 (routage IP uniquement, plus léger et plus
 courant pour un VPN classique).

Routage et NAT

echo 1 > /proc/sys/net/ipv4/ip_forward
# et pour persister au reboot, dans /etc/sysctl.conf :
# net.ipv4.ip_forward=1

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/iptables.rules

Client

cd /etc/openvpn/easy-rsa
source vars
./build-key nom_client

Alternatives