rss logo

Configurer un tunnel VPN avec OpenSSH sous Debian

Logo OpenSSH

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

Diagramme illustrant la configuration d'un tunnel VPN SSH entre un serveur Debian (Destination) et un client Arch Linux (Source), incluant les adresses IP, les rôles réseau et le flux de trafic à travers une connexion VPN SSL.

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 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
  • Activer l'interface :
root@host:~# ip link set tun0 up
  • Ajouter 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

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address