Initial vault setup
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user