Créer un tunnel VPN avec OpenSSH entre Debian 12 et Arch Linux
- Mise à jour le 20 juin 2025

Intro
Dans un de mes nombreux projets, j'avais besoin d'accéder à un réseau distant qui ne disposait que d'un serveur SSH. Je savais que les outils SSH permettaient de mettre en place un tunnel VPN, mais je n'avais jamais essayé. C'est finalement assez simple à mettre en œuvre et cela peut être utile dans de nombreux cas.
Dans cet article, je vais donc expliquer étape par étape comment configurer un tunnel VPN temporaire avec OpenSSH.
Schéma réseau

Debian (Destination)
- Configuration IP:
- eth0: 192.168.1.10/24
- tun0: 10.110.0.100/32
Prérequis
Éditer la configuration de sshd
- Éditez le fichier
/etc/ssh/sshd_config
et permettre le login root et la tunnelization:
PermitRootLogin yes
PermitTunnel yes
- Redémarrez ensuite le service SSH afin d'appliquer les modifications :
root@host:~# systemctl restart sshd
Configurer le NAT
Nous avons besoin d'une règle de masquerade pour permettre au client d'accéder au réseau distant. Nous allons voir comment faire cela en utilisant iptables ou nftables.
- Que vous utilisiez iptables ou nftables, vous devez activer l'IP forwarding (routage) :
root@host:~# echo 1 | tee /proc/sys/net/ipv4/ip_forward
- Avec iptables :
root@host:~# iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -o eth0 -j MASQUERADE
- Avec nftables :
root@host:~# nft add table ip NAT
root@host:~# nft add chain ip NAT my_masquerade '{ type nat hook postrouting priority 100; }'
root@host:~# nft add rule NAT my_masquerade ip daddr { 192.168.1.0/24 } oifname eth0 counter masquerade
Maintenant que nous avons terminé la pré-configuration de notre serveur Debian, nous devons démarrer le tunnel SSH depuis le client.
Source : Archlinux
- Configuration IP:
- eth0: 192.168.2.10/24
- tun0: 10.110.0.200/32
Commandes
-w local_tun[:remote_tun]
: Demande le transfert des périphériques tun(4) spécifiés entre le client (local_tun) et le serveur (remote_tun).
-N
: Ne pas exécuter de commande distante
-f
: Demande à SSH de passer en arrière-plan juste avant l'exécution de la commande
root@host:~# ssh -Nf -w 0:0 -p 22 root@1.1.1.1
- Définir l'adresse IP de l'interface
tun0
:
root@host:~# ip addr add 10.110.0.200/32 peer 10.110.0.100 dev tun0
- Activez l'interface :
root@host:~# ip link set tun0 up
- Ajoutez la route vers le réseau distant :
root@host:~# ip route add 192.168.1.0/24 via 10.110.0.100
Établissement du tunnel (Debian)
Avec la commande précédente (ssh -Nf -w 0:0
) exécutée depuis le client, le périphérique virtuel tun0
devrait apparaître sur le serveur Debian. La dernière étape consiste simplement à l'activer et à le configurer côté Debian.
- Définir l'adresse de
tun0
:
root@host:~# ip addr add 10.110.0.100/32 peer 10.110.0.200 dev tun0
- Configurer l'adresse IP de l'interface
tun0
:
root@host:~# ip link set tun0 up
Et voilà ! Le réseau 192.168.1.0/24
devrait maintenant être accessible depuis le client.
Références
- ubuntu.com: https://help.ubuntu.com/