--- 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