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