Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/08/2023, à 11:20

vilanele

Local forwarding avec iptables + tunnel ssh entre 2 interfaces tun0

Bonjour,

Je suis dans la situation suivante. J'ai un PC nommé "Skill" et un serveur nommé "Monster". Sur Skill, je crée une interface tuntap que je nomme tun0 et je lui associe l'ip 10.0.0.2/24 puis je l'active

sudo ip tuntap add mode tun tun0
sudo ip addr add 10.0.0.2/24 dev tun0
sudo ip link set tun0 up

Je fais de même sur Monster, en donnant cette fois ci l'adresse 10.0.0.1/24

sudo ip tuntap add mode tun tun0
sudo ip addr add 10.0.0.1/24 dev tun0
sudo ip link set tun0 up

Cela dans le but de créer un tunnel ssh en utilisant l'option -w entre les deux tun0, car je ne peux communiquer avec Monster que par le port 22, tout les autres sont bloqués. Je précise que je ne souhiates pas utiliser l'option -L de ssh car je souhaite rediriger du traffic udp entre autre, d'où la nécessité du tunnel entre les deux tun0.
Depuis Skill, j'initie le tunnel ssh:

ssh -vNT  monster_tunnel

et voici le Host monster_tunnel dans ~/.ssh/config sur la machine Skill

Host monster_tunnel
   HostName 192.168.2.5
   ProxyJump imac
   User john
   Tunnel point-to-point
   TunnelDevice 0:0

Comme vous voyez j'accède à Monster en faisant un ProxyJump sur une machine nommée imac mais je pense que ça n'a pas d'importance pour la suite.

Maintenant, sur Monster, j'ai un service qui tourne et écoute sur 10.0.0.1:8181 pour fournir un Web UI. Depuis Skill, dans un naviguateur je vais à http://10.0.0.1:8181 et je peux accéder au WebUI, donc mon tunnel ssh est bien fonctionnel.
Ce que je souhaite est de rediriger localhost:8181 sur Skill vers 10.0.0.1:8181 sur Monster pour pourvoir accéder au WebUI depuis SKill en allant à http://localhost:8181. Pour cela j'ai essayé avec iptables de la manière suivante

sudo iptables -t nat -A PREROUTING -i lo -p tcp --dport 8181 -j DNAT --to-destination 10.0.0.1:8181
sudo iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.1 --dport 8181 -j SNAT --to-source 10.0.0.2

Je précise que j'ai bien autorisé au niveau du noyau le ip forwarding

sudo sysctl -w net.ipv4.conf.all.forwarding=1
sudo sysctl -w net.ipv4.conf.all.route_localnet=1

Malheureusement cela ne fonctionne pas, l'accès à localhost:8181 depuis Skill est refusé. Je pense que mes règle de PREROUTING et POSTROUTING doivent avoir un problème mais je ne comprends pas où. C'est la première fois que j'utilise iptables et mets en place du nat, donc je me suis certainement trompé quelque part.
Je vous remercie pour toute aide.

Ah oui peut être que la table de routage sur Skill peut aider

sudo ip route show
default via 192.168.1.1 dev wlo1 proto static metric 600
10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.2 linkdown
192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.11 metric 600
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

Merci d'avance et désolé je débute en réseau wink

Dernière modification par vilanele (Le 07/08/2023, à 11:30)

Hors ligne

#2 Le 07/08/2023, à 15:59

vilanele

Re : Local forwarding avec iptables + tunnel ssh entre 2 interfaces tun0

Auto-résolu. Il fallait utiliser la chain OUTPUT en place de PREROUTING car le paquet envoyé sur localhost provient d'une application interne (en l'occurence mon naviguateur). Ce post m'a bien aidé:
Post sur INPUT et OUTPUT chains

Voici donc ce qu'il fallait faire à la place de mes deux règles iptables:

sudo iptables -t nat -A OUTPUT -o lo -p tcp --dport 8181 -j DNAT --to-destination 10.0.0.1:8181
sudo iptables -t nat -A POSTROUTING -p tcp --dport 8181 -j MASQUERADE

et ça marche à merveille wink

[Edit] Tant qu'à faire j'ajoute le schéma killer qui permet de tout comprendre
Schéma routage

Dernière modification par vilanele (Le 07/08/2023, à 17:03)

Hors ligne