Back to all posts
DevOps

Abandonnez votre VPN : Créez un tunnel privé sans perte de paquets vers votre réseau domestique

Vous êtes assis dans un hôtel à l'autre bout du monde, fixant un terminal gelé. Vous appuyez sur Enter pour une simple commande SSH, et le curseur clignote devant vous. Cinq minutes plus tard : Operation timed out. Vous lancez le VPN de votre entreprise, réessayez, et maintenant vos appels API échouent à cause du géoblocage.

Soyons réalistes : les VPN commerciaux ne sont pas faits pour les développeurs. C'est un cauchemar de maintenance, leurs adresses IP sont signalées par tous les pare-feu de la planète, et la perte de paquets sur le routage international standard détruira votre flux de travail.

Voici l'affaire. Nous allons construire un pont solide comme le roc et anti-blocage. Nous utiliserons un VPS premium pour capter votre trafic sur une voie Internet VIP, et percer un trou directement vers un Raspberry Pi situé dans votre salon. Pas de terminaux gelés. Pas de géoblocage. Juste un accès brut et non bridé à votre réseau domestique.

Analyse approfondie : Pourquoi les VPN standards échouent

Si vous déployez simplement WireGuard ou OpenVPN sur un serveur cloud aléatoire, l'inspection approfondie des paquets (DPI) dans les régions fortement censurées signalera et limitera votre connexion en quelques heures.

Pour vaincre cela, nous avons besoin de deux choses :

  1. Routage Premium (AS9929/AS10099) : C'est la couche physique. Au lieu de rebondir sur des nœuds de réseau public congestionnés, vous achetez un VPS situé sur un câble d'entreprise d'élite à faible latence.
  2. VLESS-Reality : C'est le déguisement. Au lieu de ressembler à du trafic proxy, VLESS-Reality fait ressembler votre connexion exactement au trafic HTTPS standard frappant un site majeur (comme iCloud ou Windows Update). Le pare-feu voit juste un gars qui synchronise son calendrier, pas un développeur qui creuse un tunnel vers un réseau privé.

Allons construire ça.

Diagramme du système de tunnel privé


Phase 1 : Obtenez votre relais d'élite (SaltyFish VPS)

Pour construire un pont sans perte de paquets, vous avez besoin d'un VPS situé sur une "voie VIP" d'Internet. Nous utilisons SaltyFish comme exemple car ils se spécialisent dans le routage d'entreprise premium (AS9929 et AS10099), ce qui est essentiel pour vaincre la congestion internationale.

1. Inscription

Allez sur portal.saltyfish.io et créez un compte. Utilisez une vraie adresse e-mail car vous en aurez besoin pour les informations d'identification du serveur et la facturation.

2. Choisir le bon forfait

Connectez-vous et allez dans Services -> Order New Services.

  • Emplacement (Location) : Cherchez "San Jose - Premium" ou "Frankfurt - Premium".
  • Réseau (Network) : Assurez-vous que la description mentionne AS9929 ou AS10099. C'est la sauce secrète. Les routes "BGP" standards ne vous donneront pas la même stabilité.
  • Spécifications (Specs) : Le plus petit forfait 1vCPU / 1GB RAM est plus que suffisant pour un tunnel réseau.

3. Paiement

Choisissez Debian 12 comme système d'exploitation. Définissez un mot de passe root fort. Terminez le paiement. Une fois le statut devenu "Actif" (Active), copiez l'Adresse IP de votre serveur (Server IP Address).


Phase 2 : Déployer le pont cloud (VPS)

Le VPS agit comme notre station de relais stable. Il capte notre trafic sur ce câble premium et le transmet à notre domicile.

Ouvrez votre terminal, connectez-vous en SSH à votre nouveau VPS SaltyFish et lancez Docker. C'est extrêmement simple :

# connectez-vous au VPS et entrez le mot de passe
ssh root@[IP_ADDRESS]

Mettez à jour votre système et installez Docker en utilisant le script officiel :

# Mettre à jour les paquets et installer les prérequis
apt update && apt install -y ufw curl wget nano

# Télécharger le script d'installation officiel de Docker
curl -fsSL https://get.docker.com | sh

# Activer et démarrer le démon Docker
systemctl enable docker && systemctl start docker

Ensuite, verrouillez le pare-feu. Nous avons seulement besoin des ports 443 (pour votre client) et 7000 (pour le Pi).

ufw allow ssh
ufw allow 7000/tcp
ufw allow 443/tcp
ufw --force enable

Maintenant, nous déployons le serveur FRP (frps). Cela gère la magie du proxy inverse afin que nous n'ayons pas à modifier la redirection de port de votre routeur domestique.

mkdir -p /root/frp && cd /root/frp

# Créez le fichier de configuration AVANT d'exécuter Docker
nano frps.toml

Conseil de pro : NE SAUTEZ PAS la création du fichier frps.toml avant d'exécuter la commande Docker. Si vous passez un fichier inexistant à un montage de volume Docker, Docker supposera qu'il s'agit d'un répertoire et créera un dossier nommé frps.toml. Vous obtiendrez une méchante erreur OCI runtime create failed et devrez faire un rm -rf dessus. Évitez-vous ce mal de tête.

Collez ceci dans frps.toml :

# Configuration du VPS (ex: Saltyfish VPS)
serverAddr = "Your_VPS_Public_IP"
# Le port auquel votre Raspberry Pi se connectera
bindPort = 7000
# Changez ceci pour quelque chose d'introuvable
auth.token = "YOUR_SUPER_SECRET_PASSWORD" 

[[proxies]]
name = "xray-reality"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8443
remotePort = 443

Démarrez-le :

docker run -d --name frps --restart=always \
  --network host \
  -v /root/frp/frps.toml:/etc/frp/frps.toml \
  snowdreamtech/frps

Phase 3 : Verrouiller la base d'attache (Raspberry Pi)

Maintenant nous quittons le cloud et rentrons à la maison. Nous devons préparer votre Raspberry Pi pour agir comme le terminal de notre tunnel sécurisé.

3.1 Vérifier la connectivité

Avant d'essayer de vous connecter, assurez-vous que votre Pi est actif sur votre réseau local. Trouvez son adresse IP (généralement via la page d'administration de votre routeur) et faites un ping :

ping YOUR-PI-IP # ou utilisez directement l'IP

Si vous voyez 0.0% packet loss, tout va bien.

3.2 Se connecter en SSH au Pi

Ouvrez votre terminal et sautez dans le Pi. Si c'est la première fois que vous vous connectez, vous verrez un avertissement concernant "l'authenticité de l'hôte" (authenticity of host). Tapez yes pour l'ajouter à vos known_hosts.

ssh your_username@YOUR-PI-IP # utilisez votre adresse IP locale, ou le nom d'hôte de votre Raspberry Pi.

3.3 Le piège de la "Commande introuvable" (Command Not Found)

Beaucoup de développeurs essaient d'exécuter des commandes Docker immédiatement et sont frappés par -bash: docker: command not found. Pas de panique, cela signifie simplement que Docker n'est pas encore installé.

Exécutez le script de commodité officiel pour faire fonctionner le moteur :

curl -fsSL https://get.docker.com | sudo sh

3.4 Gestion des autorisations

Par défaut, Docker nécessite les privilèges root. Pour éviter de taper sudo toutes les cinq secondes, ajoutez votre utilisateur au groupe docker :

# Remplacez $USER par votre vrai nom d'utilisateur
sudo usermod -aG docker $USER
newgrp docker

3.5 Déploiement du panneau de contrôle 3X-UI

Maintenant nous déployons le cerveau de notre opération. Ce panneau gérera nos informations d'identification VLESS-Reality.

docker run -itd \
   -p 2053:2053 \
   -p 8443:8443 \
   --name 3x-ui \
   --restart=always \
   ghcr.io/mhsanaei/3x-ui:latest

3.6 Connexion du client FRP

Enfin, nous devons reconnecter le Pi au Cloud Bridge (VPS).

Conseil de pro sur les chemins d'accès : N'utilisez pas de chemins codés en dur comme /home/pi/frp. Selon votre configuration, votre répertoire personnel peut porter le nom de votre utilisateur (par exemple, /home/elvisli). Utilisez toujours ~/ pour vous référer à votre dossier personnel.

mkdir -p ~/frp && cd ~/frp
nano frpc.toml

Collez votre configuration (correspondant au token de votre VPS) :

serverAddr = "YOUR_VPS_PUBLIC_IP"
serverPort = 7000
auth.token = "YOUR_SUPER_SECRET_PASSWORD"

[[proxies]]
name = "xray-reality"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8443
remotePort = 443 

Attention au "Paste Garbage" (déchets de copier-coller) : Si vous voyez ^[[200~ apparaître dans votre terminal, c'est le signe d'un problème avec le "mode de collage entre crochets". Cela se produit souvent lors de la copie depuis un navigateur vers un terminal. Effacez simplement et supprimez ces caractères supplémentaires avant d'exécuter votre commande.

Lancez le client du tunnel :

docker run -d --name frpc --restart=always \
  --network host \
  -v ~/frp/frpc.toml:/etc/frp/frpc.toml \
  snowdreamtech/frpc

Le tunnel physique est maintenant établi. Votre Pi domestique est maintenant "visible" pour votre VPS Cloud.

Phase 4 : Configurer la cape VLESS-Reality

Ouvrez un navigateur sur votre réseau local et allez à http://YOUR_PI_LOCAL_IP:2053. Connectez-vous avec admin / admin.

  1. Allez dans Inbounds (Entrants) -> Add Inbound (Ajouter Entrant).
  2. Définissez Protocol (Protocole) sur vless, Port sur 8443.
  3. Définissez Flow (Flux) sur xtls-rprx-vision.
  4. Définissez Security (Sécurité) sur reality.
  5. Définissez uTLS sur chrome et Dest/Server Names sur www.icloud.com:443. (Cela fait ressembler notre tunnel de manière identique au trafic de synchronisation cloud d'Apple).
  6. Cliquez sur Get New Keys (Obtenir de nouvelles clés) et Generate (Générer) (pour ShortIds).
  7. Enregistrez.

Cliquez sur l'icône de code QR à côté de votre nouvelle règle et cliquez sur Copy Link (Copier le lien). Vous obtiendrez une chaîne désordonnée commençant par vless://....

Phase 5 : Configuration du client (Shadowrocket pour iPhone & Mac)

Maintenant que le tunnel fonctionne de votre Pi au VPS, nous devons connecter votre téléphone.

5.1 Exporter le nœud

  1. Accédez à votre panneau 3X-UI.
  2. Cliquez sur les trois points (menu) sur votre entrant VLESS.
  3. Sélectionnez "Export All URLs" (Exporter toutes les URL). Cela copie le lien vless:// dans votre presse-papiers.

5.2 Importer dans Shadowrocket

  1. Ouvrez Shadowrocket sur votre iPhone.
  2. Il devrait automatiquement détecter le lien dans votre presse-papiers et demander de l'ajouter. Cliquez sur Add (Ajouter).
  3. Si aucune fenêtre contextuelle n'apparaît, cliquez sur l'icône +, définissez Type sur URI, et collez le lien.

5.3 Configuration du pont

C'est l'étape la plus critique. Par défaut, le nœud pointe vers l'adresse IP locale de votre Pi. Nous devons le rediriger vers notre Cloud Bridge.

  1. Appuyez sur l'icône (i) à côté du nouveau nœud.
  2. Address (Adresse) : Supprimez l'adresse IP locale et entrez l'Adresse IP publique de votre SaltyFish VPS.
  3. Port : Changez-le en 443.
  4. Type : Assurez-vous qu'il indique VLESS.
  5. Cliquez sur Save (Enregistrer).

5.4 Test d'allumage

Pour prouver que l'architecture fonctionne depuis le monde extérieur :

  1. Désactivez le Wi-Fi. Assurez-vous d'utiliser les données cellulaires (5G/LTE).
  2. Dans Shadowrocket, sélectionnez votre nœud (un petit point orange apparaîtra).
  3. Basculez le commutateur principal sur Connected (Connecté).
  4. Visitez google.com. Si cela se charge, vous avez réussi à créer un tunnel dans votre réseau domestique à partir de l'internet public.

Phase 6 : Configuration développeur macOS

Pour un développeur, avoir simplement un proxy de navigateur ne suffit pas. Nous avons besoin que toute notre station de travail respecte le tunnel.

6.1 Installation

Si vous avez un Mac Apple Silicon (M1/M2/M3), vous pouvez installer la version macOS de Shadowrocket directement depuis le Mac App Store. C'est beaucoup plus efficace que d'utiliser des wrappers tiers.

6.2 Proxy de Terminal

Les applications de terminal macOS (Git, npm, curl) ignorent généralement les paramètres VPN du système. Nous devons les "câbler" manuellement.

  1. Vérifier le port local : Dans Shadowrocket Mac, allez dans Settings (Paramètres) -> Proxy. Notez le port HTTP/SOCKS5 (généralement 1082).

  2. Proxy immédiat : Exécutez ceci dans votre terminal pour proxifier la session en cours :

export http_proxy=http://127.0.0.1:1082
export https_proxy=http://127.0.0.1:1082

Testez-le : curl -I https://www.google.com. Si vous voyez HTTP/2 200, ça marche.

  • Alias persistants : Ajoutez ceci à votre ~/.zshrc pour un flux de travail élégant :

  • # Activer le proxy
    alias proxy="export http_proxy=http://127.0.0.1:1082; export https_proxy=http://127.0.0.1:1082; echo 'Terminal Proxy ON'"
    # Désactiver le proxy
    alias unproxy="unset http_proxy https_proxy; echo 'Terminal Proxy OFF'"
    

    Exécutez source ~/.zshrc. Maintenant vous n'avez qu'à taper proxy pour passer inaperçu.


    Phase 7 : Proxy Git SSH

    C'est le "piège" dans lequel tombent la plupart des développeurs. Si vous utilisez des clés SSH pour GitHub (git clone git@github.com...), il ignore complètement http_proxy car il utilise le protocole SSH.

    Pour corriger cela, nous devons configurer le client SSH lui-même pour utiliser notre tunnel local.

    1. Éditez votre configuration SSH : nano ~/.ssh/config.
    2. Ajoutez ce bloc en haut :
    Host github.com
        HostName github.com
        User git
        # Forcer le trafic SSH de GitHub à travers le port SOCKS5 de Shadowrocket
        ProxyCommand nc -X 5 -x 127.0.0.1:1082 %h %p
    
  • Enregistrez et quittez. Maintenant, vos commandes git push voleront à travers votre tunnel privé, peu importe où vous êtes.
  • En conclusion

    Vous n'êtes plus à la merci du Wi-Fi public ou des blocages VPN commerciaux. Vous disposez d'une voie de routage privée de niveau entreprise qui connecte votre station de travail distante directement à votre base domestique.

    Restez en sécurité. Restez rapide. Bon codage.