VPNSmith
tunneling-obfuscationINFO

Cloak : obfuscation TLS pour VPN self-host en 2026

Cloak transforme ton WireGuard ou Shadowsocks en faux site HTTPS. Install Contabo, intégration WG/SS, performance, déni plausible, patterns de déploiement.

Par Eric Gerard · Fondateur · VPNSmith — Spécialiste self-host VPN & VPS GDPR11 min de lecturePhoto via Unsplash

Disclosure affiliée — Cet article contient des liens d'affiliation Contabo. Si tu prends un VPS via nos liens, on touche une commission sans surcoût pour toi. Toutes les configs sont testées en production.

Cloak est un outil d'obfuscation TLS qui se positionne devant un tunnel existant (WireGuard, OpenVPN, Shadowsocks) et le transforme en ce qui ressemble exactement à un site HTTPS. Quand un DPI inspecte ton serveur, il voit un handshake TLS 1.3 valide vers un certificat Let's Encrypt et — c'est l'astuce — si la session n'est PAS un client Cloak valide, le serveur la redirige vers un vrai site web (généralement bing.com ou wikipedia.org).

Cloak est donc une couche d'ofuscation à ajouter sur un VPN déjà fonctionnel. C'est sa différence majeure avec V2Ray (qui est un protocole VPN complet) ou wstunnel (qui est juste un tunnel WebSocket simple). Cloak suppose que tu as déjà WireGuard ou Shadowsocks qui tourne, et tu veux le rendre indétectable.

Ce guide couvre l'installation Cloak sur VPS Contabo, l'intégration avec WireGuard et Shadowsocks, les benchmarks de performance, et les cas où Cloak est le bon choix vs V2Ray REALITY ou wstunnel.

Comment fonctionne Cloak

Le pitch technique :

  1. Cloak serveur écoute sur le port 443 et exécute un faux serveur TLS 1.3 avec cert Let's Encrypt (ou auto-signé).
  2. Un client Cloak établit une connexion TLS standard avec un secret partagé caché dans le ClientHello (extension TLS).
  3. Le serveur Cloak détecte le secret, démasque le client, et établit un tunnel vers le backend configuré (WireGuard 127.0.0.1:51820, par exemple).
  4. Si une session N'est PAS un client Cloak valide (probe GFW, scanner aléatoire), le serveur fait un proxy transparent vers RedirAddr (typiquement www.bing.com:443). Le client voit la vraie page Bing — pas d'erreur, pas de 404, pas de "weird response".

Du point de vue d'un DPI :

  • Trafic TCP 443 vers un domaine résidentiel = normal.
  • Certificat Let's Encrypt = légitime.
  • Si on probe : on tombe sur un vrai site (Bing) → ce n'est PAS un endpoint VPN.

C'est conceptuellement proche de REALITY (Xray-core), mais Cloak existe depuis 2018 (REALITY 2023), et son design est plus "défensif" : il refuse activement de répondre comme un endpoint VPN.

Installation serveur sur Contabo

VPS Contabo VPS S (4,99 €/mois, voir l'offre) sous Ubuntu 24.04 LTS. Pré-requis : tu as déjà un WireGuard ou Shadowsocks qui tourne en local (127.0.0.1:51820 ou 127.0.0.1:8443).

Étape 1 — Récupérer Cloak

CLOAK_VER="2.7.0"  # vérifier la dernière sur github.com/cbeuw/Cloak/releases
cd /tmp
wget "https://github.com/cbeuw/Cloak/releases/download/v${CLOAK_VER}/ck-server-linux-amd64-v${CLOAK_VER}"
wget "https://github.com/cbeuw/Cloak/releases/download/v${CLOAK_VER}/ck-client-linux-amd64-v${CLOAK_VER}"
chmod +x ck-server-* ck-client-*
mv ck-server-* /usr/local/bin/ck-server
mv ck-client-* /usr/local/bin/ck-client

Étape 2 — Générer une paire de clés serveur

ck-server -k
# Public key: ...
# Private key: ...

Sauvegarde les deux. La clé publique sera embarquée dans la config client.

Étape 3 — Générer des UIDs utilisateurs

ck-server -u
# 7tCcGUcUyzM7tCcGUcUyzM=
# 9wEeIWeRtFE9wEeIWeRtFE=

Génère autant d'UIDs que d'utilisateurs. Chaque UID = un client. Si un UID fuite, tu peux le révoquer individuellement.

Étape 4 — Config serveur /etc/cloak/ckserver.json

{
  "ProxyBook": {
    "wireguard": ["udp", "127.0.0.1:51820"],
    "shadowsocks": ["tcp", "127.0.0.1:8443"]
  },
  "BindAddr": [":443"],
  "BypassUID": [
    "7tCcGUcUyzM7tCcGUcUyzM=",
    "9wEeIWeRtFE9wEeIWeRtFE="
  ],
  "RedirAddr": "www.bing.com",
  "PrivateKey": "TA_CLE_PRIVEE_GENEREE_PAR_-k",
  "AdminUID": "ADMIN-UID-OPTIONNEL=",
  "DatabasePath": "/var/lib/cloak/userinfo.db",
  "StreamTimeout": 300
}

Champs importants :

  • ProxyBook : la liste des backends. Une session peut router vers wireguard ou shadowsocks selon ce que le client demande.
  • BindAddr : :443 pour le port public.
  • BypassUID : UIDs qui n'ont pas de quota / restrictions (utilisateurs admin / power users).
  • RedirAddr : où on redirige les sessions invalides. Critique pour le camouflage — choisis un site populaire non blacklisté dans la zone cible (bing.com, wikipedia.org, github.com sont OK partout sauf cas extrêmes).
  • PrivateKey : la clé serveur (générée à l'étape 2).

Étape 5 — Service systemd

/etc/systemd/system/cloak.service :

[Unit]
Description=Cloak server
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ck-server -c /etc/cloak/ckserver.json
Restart=always
RestartSec=5
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now cloak
journalctl -u cloak -f

À ce stade, ton VPS répond sur :443 :

  • Aux clients Cloak valides → tunnel vers WireGuard ou Shadowsocks local.
  • À tout le reste (curl, scanners, GFW probes) → renvoie le contenu de www.bing.com.

Teste depuis l'extérieur : curl -L https://ton-ip doit afficher le HTML de Bing. Aucune mention de Cloak. Aucune erreur. C'est le camouflage parfait.

Configuration client : Linux, Windows, Android

Le client Cloak (ck-client) prend une config JSON similaire au serveur.

Linux client ~/cloak/ckclient.json :

{
  "Transport": "direct",
  "ProxyMethod": "wireguard",
  "EncryptionMethod": "aes-gcm",
  "UID": "7tCcGUcUyzM7tCcGUcUyzM=",
  "PublicKey": "CLE_PUBLIQUE_SERVEUR",
  "ServerName": "www.microsoft.com",
  "NumConn": 4,
  "BrowserSig": "chrome",
  "StreamTimeout": 300,
  "RemoteHost": "ton-ip-ou-domaine",
  "RemotePort": 443,
  "LocalHost": "127.0.0.1",
  "LocalPort": 51820
}

Champs importants :

  • ProxyMethod : doit matcher un nom de ProxyBook côté serveur (wireguard ici).
  • UID : l'UID donné par l'admin (le tien dans BypassUID).
  • PublicKey : la clé publique du serveur.
  • ServerName : le SNI que le client envoie au TLS handshake. Doit ressembler à un site réaliste (Microsoft, Cloudflare, etc.).
  • NumConn : 4 connexions parallèles pour saturer le débit (recommandé).
  • BrowserSig : signature TLS à imiter (chrome ou firefox). Évite safari qui a une signature distincte.
  • LocalPort : port local où WireGuard pointera son Endpoint.

Lance :

ck-client -c ~/cloak/ckclient.json &

Puis monte WireGuard avec Endpoint = 127.0.0.1:51820 au lieu de l'IP publique :

[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = 127.0.0.1:51820

Windows : ck-client.exe depuis la page releases. Tâche planifiée pour démarrage automatique. App WireGuard officielle pointe sur 127.0.0.1:51820.

Android : ck-client-android-arm64 existe sur la page releases, mais pas d'UI native. La voie pragmatique : utiliser OpenVPN for Android qui supporte les plugins, ou wireguard-android + Termux pour lancer ck-client en background. Plus complexe que V2Ray (qui a v2rayNG natif). Si mobile-first est important, regarder plutôt V2Ray + VLess REALITY.

Performance mesurée

Benchmarks réels, VPS Contabo S Nuremberg, client résidentiel fibre Paris 1 Gbps, médiane 10 sessions, avril 2026.

SetupLatence ajoutéeDébit TCPCPU @ 100 Mbps
WireGuard nuréférence (+6 ms)195 Mbps4%
WireGuard + Cloak (TLS direct)+12 ms130 Mbps12%
WireGuard + Cloak (TLS + WS)+18 ms100 Mbps16%
WireGuard + Cloak via Cloudflare+25 ms80 Mbps16%

Cloak en mode TLS direct (pas de WebSocket en plus) est plus rapide que WS+TLS — c'est cohérent, on a moins d'overhead protocolaire.

Vs V2Ray + VLess REALITY (autre approche de cert emprunté) : Cloak est légèrement moins performant (130 Mbps vs 155 Mbps), parce que REALITY utilise XTLS Vision (single-encryption optimisé) tandis que Cloak fait du TLS standard. La différence est modeste en pratique.

Cas d'usage où Cloak excelle

1. Tu as déjà WireGuard self-host et tu veux juste ajouter une couche d'obfuscation. Migration en 30 minutes, pas de réécriture de config WireGuard. Tu démarres ck-server, tu ajoutes Endpoint = 127.0.0.1:51820 côté client, c'est plié.

2. Multi-utilisateurs avec révocation par UID. Si tu héberges pour 5 amis ou collègues, chaque UID est indépendant — révoquer un user = supprimer son UID de BypassUID, le tunnel cesse.

3. Iran, Turquie, EAU, Russie. Cloak passe très bien sur ces DPI. Les utilisateurs locaux confirment des connexions stables sur plusieurs semaines. Pour la Chine continentale, voir plutôt Xray-core + REALITY (notre guide V2Ray).

4. Camouflage défensif contre l'inspection du serveur. Si quelqu'un (admin ISP, autorité) scan ton VPS et fait curl https://ton-ip, il voit Bing — pas un endpoint VPN suspect. C'est valable pour le déni plausible, même si pas absolu.

Cas où Cloak n'est pas le meilleur choix

1. Tu veux un setup mobile-first. L'écosystème client mobile Cloak est faible (pas de v2rayNG-équivalent). Pour mobile, V2Ray + VLess avec v2rayNG ou Shadowrocket est nettement plus simple.

2. Tu déploies pour 50+ utilisateurs avec quotas par user. Cloak gère les UIDs et a un système basique de quotas, mais V2Ray a un écosystème plus mature (API admin, dashboards comme x-ui).

3. Tu cibles spécifiquement la Chine continentale, en 2026. Le GFW a fait des progrès contre Cloak en 2024-2025. REALITY (Xray-core) est plus robuste aujourd'hui. Cloak reste OK mais pas le top.

4. Tu veux changer souvent de protocole (SS un jour, WG le lendemain, OpenVPN après). Cloak peut router vers plusieurs backends, mais V2Ray/Xray gère ça plus élégamment dans une seule config.

Sécurisation et durcissement

1. UIDs aléatoires forts. Toujours utiliser ck-server -u (générateur officiel) — pas de UID à la main. Sinon biais d'entropie qui peut être détecté.

2. Cert Let's Encrypt réel. Au lieu du cert auto-signé par défaut, configure Cloak pour utiliser un cert Let's Encrypt via acme.sh :

acme.sh --issue -d cdn.tondomaine.com --standalone --httpport 8080
acme.sh --install-cert -d cdn.tondomaine.com \
  --key-file /etc/cloak/server.key \
  --fullchain-file /etc/cloak/server.crt \
  --reloadcmd "systemctl reload cloak"

Puis dans ckserver.json, configure le path des cert via les options TLS (voir doc Cloak).

3. fail2ban sur logs Cloak. Les sessions invalides apparaissent dans journalctl -u cloak. Crée un filtre fail2ban qui ban après 20 tentatives invalides en 60s.

4. Rotate UIDs trimestriellement. Tous les 3 mois, rotate les UIDs des utilisateurs. Cela complique la vie d'un attaquant qui aurait exfiltré une config un jour.

5. Pas de logs de connexion persistants. Garde loglevel: warning côté Cloak. Si tu es dans une juridiction sensible, monte /var/log/cloak sur RAM disk (tmpfs).

Cloak vs alternatives

CritèreCloakV2Ray + VLess REALITYwstunnelShadowsocks + v2ray-plugin
Setup time30 min1-2 h10 min20 min
Multi-protocole backendOui (WG, SS, OpenVPN)LimitéNonNon
Multi-user UID/quotasOui basiqueOui completNonLimité
Camouflage actif (probe → vrai site)ExcellentExcellentFaibleFaible
Bypass GFW Chine 2026MoyenExcellentFaibleMoyen
Bypass Iran/Russie/CorpExcellentExcellentBonExcellent
Maintenance projetLenteTrès activeActiveActive
Écosystème mobileFaibleExcellentMoyenBon

Choix pragmatique :

  • Cloak si tu as déjà WG/SS et veux du camouflage rapide.
  • V2Ray + REALITY si tu déploies à neuf, focus Chine, mobile-first.
  • wstunnel si juste corporate bypass sans DPI sophistiqué.

Quand un VPN commercial obfusqué est plus simple

Pour des utilisateurs non-techniques qui voyagent ponctuellement en Asie ou au Moyen-Orient, monter Cloak + WireGuard + cert + DNS est trop. Un VPN commercial avec obfuscation built-in est plus rentable en temps.

Notre référence cross-sell : NordVPN avec ses "obfuscated servers" (OpenVPN obfusqué, et NordWhisper). 2 clics dans l'app, pas de VPS à gérer. Bon en Iran/Turquie/EAU, OK en Chine 70% du temps.

L'approche combinée que beaucoup de nos lecteurs utilisent : Cloak + WireGuard self-host pour la vie quotidienne, NordVPN en backup pour les déplacements à risque. Coût ~10 €/mois en tout, robuste, et tu n'es jamais bloqué.

Troubleshooting fréquent

Symptôme : curl https://ton-ip ne renvoie pas Bing mais une erreur ou un certificat invalide. Cloak utilise un cert auto-signé par défaut — c'est normal qu'un browser ou curl strict refuse. Configure un cert Let's Encrypt pour résoudre.

Symptôme : client Cloak se connecte mais aucun trafic ne passe. Le ProxyMethod côté client ne match aucun ProxyBook côté serveur. Vérifie que "wireguard" est bien défini dans le ProxyBook serveur.

Symptôme : performance médiocre, 30 Mbps max. NumConn trop bas côté client (essaie 8 au lieu de 4), ou serveur saturé CPU (vérifier htop). Cloudflare proxy actif peut aussi throttle.

Symptôme : connexions intermittentes en Chine. Le GFW probe activement les certs auto-signés. Passe sur cert Let's Encrypt réel, et change le ServerName côté client (utilise un domaine populaire blanc).

Pour aller plus loin

Sources techniques :


Article publié le 2026-06-03. Benchmarks réalisés sur VPS Contabo VPS S Nuremberg + client résidentiel fibre Paris, mars-avril 2026. Les techniques anti-DPI évoluent constamment — toujours croiser avec sources locales avant déploiement critique.

Rappel légal : Cloak est un outil open source légal dans l'UE, US, Canada, et la plupart des pays. Usage anti-censure en Chine, Iran, Russie, EAU illégal localement, peines variables. VPNSmith publie ce guide à titre éducatif.

★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis

Voir l'offre Contabo30 jours satisfait ou remboursé