Files
2026-06-09 18:40:21 +02:00

180 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: OpenVPN
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, vpn, openvpn, tunneling, tls, ssl, legacy, c, enterprise]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=VPN, https://github.com/OpenVPN/openvpn]
---
# 🔐 OpenVPN
> **Le "vieux" VPN qui ne meurt jamais** — créé en 2002, encore omniprésent en entreprise et sur routeurs, lent mais compatible avec à peu près tout.
## 📋 Informations Générales
| Champ | Valeur |
| :--- | :--- |
| **Site web** | [openvpn.net](https://openvpn.net/) |
| **GitHub** | [OpenVPN/openvpn](https://github.com/OpenVPN/openvpn) |
| **License** | GPL-2.0 |
| **Langage** | C |
| **Étoiles GitHub** | 14 062 ⭐ |
| **Dernière MAJ** | 2026-06-07 |
| **Catégorie** | [[cat-vpn|VPN & Réseau privé]] |
## 📝 Description
**OpenVPN** est un **protocole et une suite logicielle VPN** créée par James Yonan en 2002, devenue au fil des ans l'un des standards de fait du VPN d'entreprise. Contrairement à WireGuard (1 couche UDP, ~4000 lignes de code), OpenVPN fonctionne en **user-space**, chiffre via **OpenSSL**, et peut tourner en **TCP ou UDP** — au prix d'une performance significativement plus faible et d'une configuration verbeuse.
OpenVPN a longtemps été **le seul choix viable** pour les VPN "user-friendly" (clients sur iOS, routeurs Tomato/DD-WRT/AsusWRT/Merlin, etc.) avant l'arrivée de WireGuard. Aujourd'hui, il reste pertinent pour : la **compatibilité legacy** (vieux clients, vieux routeurs, vieux Windows XP), les **environnements corporate** où il est déjà déployé à grande échelle, et les **contraintes réseau** (firewalls qui n'ouvrent que TCP/443).
-**Maturité de 20+ ans** : déployé par des millions d'entreprises, code très audité
-**TCP ou UDP** : adaptable à toute contrainte réseau (TCP/443 mime du HTTPS, contourne la plupart des firewalls)
-**Compatibilité quasi universelle** : iOS, Android, Windows XP+, macOS, Linux, FreeBSD, routeurs, Synology, QNAP, pfSense, OPNsense
-**TLS classique** : utilise OpenSSL, support d'X.509, CRL, OCSP
-**Authentification variée** : static key, certificats, user/password (via plugin), RADIUS, LDAP
-**Client intégré** : **OpenVPN Connect** (iOS/Android/macOS/Windows) consomme un simple `.ovpn`
-**Multi-protocole** : supporté par **OpenVPN Access Server** (propriétaire, gratuit jusqu'à 2 users)
-**Bridge TAP ou route TUN** : TAP pour bridge L2 (rare), TUN pour IP routing
-**Plug-ins** : authentification externe, scripts up/down
- ⚠️ **Plus lent que WireGuard** : facteur 2-4× sur des liens haut débit (overhead TLS + user-space)
- ⚠️ **Configuration verbeuse** : PKI complète à mettre en place (easy-rsa)
**Public cible** : **entreprises avec existant legacy**, **comptabilité réseau** (TCP/443), **routeurs** (Asus, Synology, pfSense où OpenVPN est natif). Pour un nouveau déploiement, **WireGuard ([[app-wg-easy]])** est presque toujours le meilleur choix.
**Vs WireGuard** : OpenVPN est plus lent (2-4×), plus complexe (PKI), mais **plus compatible** (vieux OS, routeurs grand public, firewalls restrictifs) et plus flexible (TCP 443 mimant HTTPS). **Vs Tailscale/Headscale** : OpenVPN est un VPN "classique" client-to-site, pas un mesh dynamique.
## 🚀 Installation
### Option 1 : Docker Compose (minimaliste)
```yaml
# docker-compose.yml
version: '3.8'
services:
openvpn:
image: kylemanna/openvpn:latest
container_name: openvpn
restart: unless-stopped
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
ports:
- "1194:1194/udp" # Standard OpenVPN
- "443:443/tcp" # Fallback si firewall restrictif
volumes:
- ./openvpn-data:/etc/openvpn
labels:
- "traefik.enable=false" # On n'expose PAS l'admin web via Traefik (UDP)
```
> ⚠️ OpenVPN utilise **UDP/1194** (par défaut) ou **TCP/443**. **Pas de Traefik** : Traefik est un proxy L7 HTTP, OpenVPN est L4. On NAT/PAT directement le port sur la box.
### Option 2 : Native Debian/Ubuntu (production)
```bash
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
./openvpn-install.sh
# Répondez aux questions interactives : UDP, port 1194, DNS Cloudflare, premier client
```
### Option 3 : OpenVPN Access Server (propriétaire, version gratuite limitée à 2 users)
```yaml
# docker-compose.yml
version: '3.8'
services:
openvpn-as:
image: linuxserver/openvpn-as:latest
container_name: openvpn-as
restart: unless-stopped
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
ports:
- "943:943" # Admin Web UI
- "443:443" # Client Web
- "1194:1194/udp"
volumes:
- openvpn-as:/config
volumes:
openvpn-as:
```
## ⚙️ Configuration Initiale
1. **Init PKI** : `./easyrsa init-pki && ./easyrsa build-ca nopass`
2. **Générer certificats serveur et clients** : `easyrsa build-server-full server nopass && easyrsa build-client-full client1 nopass`
3. **Générer Diffie-Hellman** : `./easyrsa gen-dh` (long, 5-10 min)
4. **Configurer `server.conf`** : port, protocole, ciphers (`AES-256-GCM`), DH, push DNS, push routes
5. **Démarrer le service** : `systemctl enable --now openvpn@server`
6. **Distribuer `.ovpn`** : exporter le bundle (cert, key, ca, tls-auth) aux clients
## 🔄 Alternatives
### Open Source
- [[app-wireguard]] + [[app-wg-easy]] — Le successeur moderne, 4× plus rapide
- [[app-tailscale]] / [[app-headscale]] — Mesh VPN, plus simple pour clients
- **StrongSwan** — IPsec/IKEv2, standard enterprise Cisco/Juniper
- **Algo** — WireGuard auto-hébergé
- **SoftEther** — VPN multi-protocole (OpenVPN/L2TP/IPsec/SSTP)
- **WireGuard** + **pfSense / OPNsense** — Native sur ces firewalls
### Propriétaires
- **OpenVPN Access Server** (limite 2 users gratuits, $9/user/mois ensuite)
- **Cisco AnyConnect / Secure Client** (enterprise, propriétaire)
- **Palo Alto GlobalProtect** (enterprise, propriétaire)
- **NordVPN, ExpressVPN, CyberGhost** (VPN grand public, protocole souvent propriétaire)
- **Pulse Secure** (enterprise)
- **Fortinet FortiClient** (enterprise)
### Comparaison OpenVPN vs alternatives
| Critère | OpenVPN | WireGuard | Tailscale | StrongSwan (IPsec) | NordVPN |
| :--- | :--- | :--- | :--- | :--- | :--- |
| Performance | Modérée (2-4× plus lent) | Très rapide | Très rapide | Rapide | Rapide |
| Config complexité | Élevée (PKI) | Faible | Très faible | Très élevée | Nulle |
| Lignes de code | ~100k | ~4k | ~4k+ | ~200k | Propriétaire |
| Compatibilité OS | Excellente | Très bonne | Très bonne | Bonne (natif iOS/macOS) | Excellente |
| Firewall-friendly | ✅ (TCP 443 mime HTTPS) | ⚠️ (UDP) | ✅ (HTTPS) | ⚠️ (UDP) | ✅ |
| Audit | Très audité | Audité | Audité | Audité | Audits externes |
| NAT traversal | Basique | Très bon (STUN+DERP) | Excellent (STUN+DERP) | Moyen | N/A |
| Open source | GPL-2.0 | GPL-2.0 | BSD/Apache (mix) | GPL-2.0 | ❌ |
**Verdict** : OpenVPN reste **pertinent pour le legacy et les contraintes réseau** (TCP/443 pour passer les firewalls corporate). Pour un **nouveau déploiement** moderne, **WireGuard ([[app-wg-easy]])** est techniquement supérieur en tout point.
## 🔐 Sécurité
-**TLS 1.3 + OpenSSL** : cryptographie solide (AES-256-GCM, ChaCha20-Poly1305) si bien configuré
-**PKI X.509** : intégration native avec **OCSP**, **CRL**, **Let's Encrypt** pour le web admin
- ⚠️ **Surface d'attaque large** : ~100 000 lignes de code en C + user-space → plus de bugs historiques (heartbleed-like, route injection) que WireGuard
-**`tls-crypt-v2`** : option depuis OpenVPN 2.6 pour chiffrer **tout** le handshake, empêche le probing (utile contre la DPI)
-**Authentification variée** : brancher sur **LDAP/AD/RADIUS** pour ne pas gérer d'utilisateurs locaux
- ⚠️ **Clés privées des clients** : chaque `.ovpn` contient la clé privée, **JAMAIS transmettre en clair** par email. Stocker chiffré ([[app-vaultwarden]] pour les notes, **age** pour les archives)
-**Logs d'audit** : `openvpn-status.log` liste les clients connectés, `--status` toutes les N secondes, exporter vers [[app-loki]] / SIEM
- ⚠️ **Posture zero-trust** : nativement absente (OpenVPN est un VPN "plat" qui expose un sous-réseau). Pour du MFA par user, **brancher un plugin PAM** ou utiliser [[app-defguard]] / [[app-authentik]] en frontal
-**Hardening** : `cipher AES-256-GCM`, `auth SHA256`, `tls-version-min 1.3`, `tls-cipher TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384`, `verb 3` pour les logs
## 📚 Ressources
- [Site officiel OpenVPN](https://openvpn.net/)
- [GitHub OpenVPN/openvpn](https://github.com/OpenVPN/openvpn)
- [Documentation communautaire](https://openvpn.net/community-resources/)
- [angristan/openvpn-install](https://github.com/angristan/openvpn-install) — Script d'install interactif
## Pages Liées
- [[cat-vpn]] — Catégorie VPN & Réseau privé
- [[app-wireguard]] — Le successeur moderne
- [[app-tailscale]] — VPN mesh moderne
- [[app-wg-easy]] — UI web pour WireGuard
- [[app-traefik]] — Reverse proxy / HTTPS
- [[securisation-home-lab]] — Bonnes pratiques globales
- [[glossaire-homelab]] — Définitions réseau
- [[comparatif-vpn-mesh]] — Comparatif global