🌐 Réseaux

networking-vpn-architect

Conception et déploiement de VPN incluant WireGuard, OpenVPN, IPSec pour les architectures site-to-site et remote access.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- networking-vpn-architect --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } networking-vpn-architect -Launch"

🚀 Déjà installé ?

claude "/networking-vpn-architect"

Ou tapez /networking-vpn-architect dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

VPNWireGuardOpenVPNIPSectunnel VPN

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/networking-vpn-architect ~/.claude/skills/

Payload du plugin : skills/networking-vpn-architect · source éditable : networking-skills/vpn-architect

📖 Manuel

VPN Architect

1. Analyse des besoins

Collecter avant toute chose :

2. Critères de choix du protocole

CritèreWireGuardOpenVPNIPSec/IKEv2
PerformanceExcellent (kernel)Moyen (userspace)Bon (kernel natif)
Traversée NATFacile (UDP 51820)Facile (UDP/TCP 1194)Difficile (NAT-T UDP 4500)
PKI/CertsNon (clés Ed25519)Oui (TLS/certs)Oui (IKEv2 + certs)
Interop. équipements réseauFaibleMoyenExcellent (Cisco, Fortinet…)
Support mobile natifAndroid/iOS (app)App tierceNatif iOS/Android/Windows
Auditabilité code~4 000 lignes~100 000 lignesVariable

Règle de décision : WireGuard en priorité pour les nouveaux déploiements Linux ; IPSec/IKEv2 si interopérabilité avec équipements existants ; OpenVPN si contrainte TCP 443 (pare-feu strict).

3. Conception de la topologie

Hub-and-spoke (remote access courant) :

Clients ──► WireGuard/OpenVPN Gateway ──► LAN 10.0.0.0/8
              |
              └── 10.8.0.0/24 (pool VPN)

Site-to-site mesh (WireGuard) :

Site A (10.1.0.0/24) ◄──► Hub (10.0.0.1) ◄──► Site B (10.2.0.0/24)
                            ▲
                            └── Site C (10.3.0.0/24)

Règles de subnetting : éviter les chevauchements avec RFC 1918 ; réserver /24 par site minimum.

4. Déploiement WireGuard (exemple serveur Linux)

# Installation (Debian/Ubuntu)
apt install wireguard

# Génération des clés serveur
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key

# /etc/wireguard/wg0.conf — Serveur
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]  # Client 1
PublicKey  = <CLIENT1_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32

# Activer et démarrer
systemctl enable --now wg-quick@wg0

# Génération clé client
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
# Profil client (wg0.conf côté client)
[Interface]
Address    = 10.8.0.2/24
PrivateKey = <CLIENT1_PRIVATE_KEY>
DNS        = 10.8.0.1

[Peer]
PublicKey  = <SERVER_PUBLIC_KEY>
Endpoint   = vpn.example.com:51820
AllowedIPs = 10.0.0.0/8   # split tunnel : seulement le LAN interne
# AllowedIPs = 0.0.0.0/0  # full tunnel
PersistentKeepalive = 25

5. Déploiement OpenVPN (site-to-site avec PKI)

# PKI avec easy-rsa 3
apt install easy-rsa
make-cadir /etc/openvpn/easy-rsa && cd /etc/openvpn/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full vpn-server nopass
./easyrsa build-client-full client1 nopass
./easyrsa gen-dh
openvpn --genkey secret /etc/openvpn/ta.key

# server.conf (extrait chiffrement 2026)
tls-version-min 1.3
cipher AES-256-GCM
tls-ciphersuites TLS_AES_256_GCM_SHA384
auth SHA512
tls-auth /etc/openvpn/ta.key 0

6. IPSec/IKEv2 avec StrongSwan

# /etc/swanctl/conf.d/site-to-site.conf
connections {
  site-b {
    remote_addrs  = 203.0.113.2
    local { auth = psk; id = @site-a.example.com }
    remote { auth = psk; id = @site-b.example.com }
    children {
      net-net {
        local_ts  = 10.1.0.0/24
        remote_ts = 10.2.0.0/24
        esp_proposals = aes256gcm128-x25519
        start_action  = trap
      }
    }
    ike_sa_init_retransmit_timeout = 4
    proposals = aes256-sha512-x25519
  }
}
secrets { ike-site-b { secret = "ChangeMeViaVault" } }

7. Haute disponibilité

# Keepalived VIP pour WireGuard HA
vrrp_instance VPN_GW {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    virtual_ipaddress { 192.168.1.10/24 }
}

8. Monitoring et rotation des clés

# État des pairs WireGuard (dernière handshake, trafic)
wg show wg0

# Prometheus exporter
apt install prometheus-wireguard-exporter
# Alerte : LastHandshake > 3 min → pair potentiellement down

# Rotation clé WireGuard (zero-downtime)
NEW_PRIV=$(wg genkey)
NEW_PUB=$(echo "$NEW_PRIV" | wg pubkey)
wg set wg0 peer <OLD_PUB> remove
wg set wg0 peer "$NEW_PUB" allowed-ips 10.8.0.2/32
# Mettre à jour le client, puis supprimer l'ancienne entrée

Rotation des certificats OpenVPN : automatiser avec certbot ou vault pki ; alerter 30 jours avant expiration.

9. Garde-fous et anti-patterns

Anti-patternRisqueCorrection
PPTP ou L2TP sans IPSecCompromission trivialeMigrer vers WireGuard/IKEv2
Pre-shared key identique pour tous les sitesCompromission d'un site = tous compromisPSK unique par tunnel
AllowedIPs = 0.0.0.0/0 sans DNS interneFuite DNS hors tunnelPousser DNS + forcer DNS leak protection
Certificat CA exposé sur le serveur VPNÉmission de faux certsStocker la CA offline ou dans un HSM/Vault
Pas de PersistentKeepalive derrière NATTunnel silencieusement mortAjouter PersistentKeepalive = 25
Split tunneling sans audit des routesDonnées sensibles hors tunnelAuditer ip route côté client après connexion
Ports VPN standards non changés sur internetScan automatique + attaquesChanger le port ou utiliser port-knocking

10. Bonnes pratiques 2026