Iptables

Bonjour,

J’ai un petit problème de redirection de trafic.

Actuellement, j’ai une machine A dans mon LAN qui fait serveur web. J’ai besoin, sur une machine B, de faire une redirection de tout le trafic vers le serveur web.

Ça fonctionne bien depuis le LAN avec ces règles iptables (quand je me connecte sur machineA:8080)

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10:8080 iptables -t nat -A POSTROUTING -d 192.168.0.10 -p tcp --dport 8080 -j MASQUERADE

Seulement, ces règles ne fonctionne pas en local (c’est à dire que depuis la machine B, quand je me connecte sur localhost, je reste sur la machine B)
J’ai compris que c’était normal, la règle PREROUTING ne traite que ce qui arrive vers la machine B.

J’ai donc ajouté la règle :

Seulement, cela ne fonctionne pas. Le navigateur local n’arrive pas à se connecter au site…

Quelqu’un aurait une idée ?

D’avance merci

Je ne suis pas certain à 100% de cette ligne, ça doit faire un an que j’ai pas touché à iptables

Merci, mais ça ne fonctionne pas…

J’ai toujours “Connexion HTTP à localhost” puis timeout. :frowning:

Problème d’effet de bord classique.
La séquence d’émission d’un paquet est :

  • décision de routage (sélection de l’interface de sortie et de l’adresse source si non spécifiée)
  • traversée des chaînes iptables OUTPUT
  • reroutage si nécessaire suite à l’étape précédente
  • traversée des chaînes iptables POSTROUTING

Le routage de Linux bloque tout paquet émis vers l’extérieur qui a une adresse source de loopback comme 127.0.0.1. C’est logique, car il serait impossible à une machine extérieure de répondre à un tel paquet, cette adresse n’étant valide que sur la machine elle-même.
Or quand un processus envoie un paquet à destination d’une adresse locale comme l’adresse de loopback, l’adresse source sélectionnée par défaut est identique à l’adresse destination. Ensuite la règle DNAT modifie l’adresse destination et le reroutage modifie en conséquence l’interface de sortie. Mais l’adresse source n’est pas modifiée, et la restriction énoncée ci-dessus s’applique donc. La règle MASQUERADE dans POSTROUTING arrive trop tard, le paquet a déjà été bloqué.

Conséquence : on ne peut pas utiliser iptables (du moins pas seul) pour rediriger une communication de l’adresse de loopback vers une adresse extérieure. On peut en revanche utiliser des programmes de redirection comme socat, 6tunnel, redir, rinetd… qui servent de relais et créent une nouvelle connexion vers la nouvelle destination. Si le port à rediriger est déjà en écoute, on peut en utiliser un libre et faire une redirection locale dessus avec iptables.

:frowning:

Merci pour l’info. Ça m’évite de perdre plus de temps !