Forum Linux.général Question de NAT (DNAT+SNAT) avec iptables

Posté par  .
Étiquettes : aucune
-1
13
déc.
2010

Salut, j'ai 2 machines qui peuvent causer entre elles par 2 adresses différentes:


+-----------+ 192.168.1.1 192.168.1.2 +-----------+
| Machine A +------------[...]-------------+ Machine B |
+----+------+ +---+-------+
| 10.0.0.1 10.0.0.2 |
| |
... ...

Ce que je voudrais faire:


  • La machine A possède un serveur TCP qui écoute sur le port 10000

  • Quand une connection arrive sur l'addresse en 192.168 de la machine B et sur ce même port 10000, la connection est NATée vers A en utilisant l'addresse en 10.0


Et je voudrais faire le ça avec iptables.

Sur A:

# on ouvre le port 10000 sur le firewall local
iptables -I INPUT -p tcp --dport 10000 -j ACCEPT

# on écoute sur le port 10000
nc -l 10000

Sur B:

# on active le routage
echo 1 > /proc/sys/net/ipv4/ip_forward

# on fait le DNAT et le SNAT
iptables -t nat -A PREROUTING -d 192.168.1.2 -p tcp --dport 10000 -j DNAT --to-destination 10.0.0.1
iptables -t nat -A POSTROUTING -d 10.0.0.1 -p tcp --dport 10000 -j SNAT --to-source 10.0.0.2



Maintenant, à partir de la machine A, j'essaye de contacter B sur son port 10000:

[machine A]# nc 192.168.1.2 10000

Le flux TCP devrait être routé vers A en utilisant l'addresse en 10.0.0.1. Or ça ne fonctionne pas et la machine A reçoit des ICM TYPE=3 CODE=10 (donc a priori "Hôte de destination administrativement interdit").



Alors où est-ce que je me plante ?



Si depuis la machine B, j'essaye de joindre la machine A sur le port 10000, pas de soucis. Donc c'est vraiment dans mon NAT que j'ai un soucis.

  • # forward

    Posté par  . Évalué à 1.

    Je me réponds à moi même: j'avais une règle dans la table filter qui droppait tous les packets en forward. Désolé pour le bruit.
  • # routeur donc pas la chaine input

    Posté par  (site web personnel) . Évalué à 2.

    Quelques éclairecissements:
    http://www.aptalaska.net/~jclive/IPTablesFlowChart.pdf

    Système - Réseau - Sécurité Open Source

    • [^] # Re: routeur donc pas la chaine input

      Posté par  . Évalué à 0.

      En fait c'est B qui fonctionne en mode routeur, pas A.
      Comme signalé précédemment, mon problème venait du fait que sur B, qui est donc un routeur, la règle par défaut pour le FORWARD était REJECT. En autorisant les flux adhoc pour le forward sur B, ça fonctionne bien.
      Note que pour que ton schéma éclaircisse, il faut avoir déjà bien allumé de partout, sinon on ne comprends pas plus ;) Merci quand même.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.