J'ai un petit problème avec iptables.
Je souhaite faire une chose simple (en théorie) avec bacula. Je cherche à rediriger tout ce qui arrive de l'extérieur du LAN
vers la machine 192.168.1.3, le tout en passant par ma machine qui me sert de routeur et donc qui a 192.168.1.2 sur eth0 et une ip publique sur eth1
Je cherche depuis quelque temps déjà sur le net quelques solutions mais j'avoue ne pas être un connaisseur d'iptables.
Voilà un petit schéma de l'install actuelle :
+---------------------+ __________ +---------------------+
| client | / \ | routeur |
| 88.191.10.10 - eth0 |---| internet |---| 78.230.10.10 - eth1 |
+---------------------+ \__________/ /-| 192.168.1.2 - eth0 |
| +---------------------+
|
| +--------------------+
\-| bacula |
| 192.168.1.3 - eth0 |
+--------------------+
Il n'y a pas de communication dans le sene "bacula" -> "client" mais le retour ne se fait pas.
Pour le moment à part un "iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE" c'est tout ce qu'il y a comme règle de définie.
Un grand merci d'avance pour votre aide :-)
Stéphane
# Michel Chevalet inside: Comment ça marche ?
Posté par nono14 (site web personnel) . Évalué à 1.
Cela ne fonctionne pas malgrès que tout est natté en sortie...
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
# NAT dans les deux sens
Posté par NeoX . Évalué à 2.
78.230.10.10: XXXX
pour faire un prerouting vers 192.168.1.3, port XXXX
2°) faire un POSTROUTING MASQUERADE de ce qui vient de ce client vers eth0
pour faire croire à 192.168.1.3 que la demande vient de ton routeur (et sera donc renvoyé à ton routeur
3°) evidemment tu as deja un postrouting masquerade pour faire du NAT et partager ta connexion entre tes deux machines (192.168.1.2 et 192.168.1.3)
il faudrait aussi que tu recherches sur internet il y a une image qui me sert de base pour mes reflexions autour d'iptables.
c'est un graphe qui indique les tables (INPUT/OUTPUT/FORWARD, PREROUTING/POSTROUTING...) en fonction d'ou vient le paquet reseau, et ou il doit aller
par ex :
http://www.csie.ntu.edu.tw/~b92035/cnl/hw1/Iptables.gif
http://www.rigacci.org/wiki/lib/exe/detail.php/doc/appunti/l(...)
[^] # Re: NAT dans les deux sens
Posté par Kerro . Évalué à 2.
http://jengelh.medozas.de/images/nf-packet-flow.png
[^] # Re: NAT dans les deux sens
Posté par NeoX . Évalué à 2.
[^] # Re: NAT dans les deux sens
Posté par stephane74 . Évalué à 1.
Les schémas données en exemple sont pas mal du tout (je les ai mis de côté). Me reste à voir l'écriture de la/les règles en question et c'est là aussi que ça bloque.
[^] # Re: NAT dans les deux sens
Posté par NeoX . Évalué à 2.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
avec juste cette ligne tout ce qui sort sur eth1 est MASQUE (c'est à dire mis à emetteur=78.230.10.10
ce qui te permet de partager ta connexion internet entre tes 2 machines (192.168.1.2 et 192.168.1.3)
si ce n'est pas le cas, alors tu as deja un probleme à ce niveau là, à regler avant de chercher ailleurs.
Le problème c'est surtout le retour des infos en direction du port 9103 qui se trouvent bloquées par le routeur.
le retour des infos, ce serait donc dans le sens bacula -> client
en direction du port 9103, le client est en ecoute de ce que doit lui envoyer bacula ?
je ne connais pas bacula, mais dans un systeme avec un client et un serveur, en general c'est le serveur qui ecoute sur un port donné (ici 9103)
et le client qui vient se connecter dessus.
donc si bacula fonctionne comme tous les autres services reseaux
il te faudrait deja que ton routeur fasse un renvoi de ce qui arrive sur 78.230.10.10:9103
vers 192.168.1.3:9103
[^] # Re: NAT dans les deux sens
Posté par stephane74 . Évalué à 1.
donc :
dans un premier temps bacula => client, et là c'est ok pour le moment
mais c'est la réponse du client qui ne passe pas le routeur client => bacula.
Voici un exemple du message d'erreur que je reçois :
Warning: bnet.c:853 Could not connect to Storage daemon on 78.230.10.100:9103. ERR=Connexion refusée
donc si bacula fonctionne comme tous les autres services reseaux
il te faudrait deja que ton routeur fasse un renvoi de ce qui arrive sur 78.230.10.10:9103
vers 192.168.1.3:9103
C'est exactement ce que je cherche à faire (et à écrire)
[^] # Re: NAT dans les deux sens
Posté par nono14 (site web personnel) . Évalué à 1.
http://www.netfilter.org/documentation/index.html#documentat(...)
cf: nat de destination
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
[^] # Re: NAT dans les deux sens
Posté par Ecran Plat (site web personnel) . Évalué à 1.
si c'est du tcp:
iptables -t nat -A PREROUTING -p tcp -d 78.230.10.10 --dport 9103 -j DNAT --to-destination 192.168.1.3:9103
si c'est de l'udp:
iptables -t nat -A PREROUTING -p udp -d 78.230.10.10 --dport 9103 -j DNAT --to-destination 192.168.1.3:9103
Voilà en espérant que ça puisse t'aider, tu peut même faire de la redirection de port avec cette règle.
[^] # Re: NAT dans les deux sens
Posté par stephane74 . Évalué à 1.
Voilà ce qui est actuellement défini :
serveur:/# iptables -L -v -t nat
Chain PREROUTING (policy ACCEPT 730K packets, 51M bytes)
pkts bytes target prot opt in out source destination
4 240 DNAT tcp -- any any anywhere 78.230.10.10 tcp dpt:bacula-sd to:192.168.1.3:9103
Chain POSTROUTING (policy ACCEPT 11472 packets, 1481K bytes)
pkts bytes target prot opt in out source destination
149 11809 MASQUERADE all -- any eth1 anywhere anywhere
Chain OUTPUT (policy ACCEPT 33638 packets, 3389K bytes)
pkts bytes target prot opt in out source destination
serveur:/# iptables -L -v
Chain INPUT (policy ACCEPT 29M packets, 13G bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 6619K packets, 3757M bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 22M packets, 21G bytes)
pkts bytes target prot opt in out source destination
[^] # Re: NAT dans les deux sens
Posté par nono14 (site web personnel) . Évalué à 1.
Les outils tcpdump/wireshark sont très pratiques. Activer les log des paquets ( target -j LOG )
permettent de s'assurer du cheminement du paquet traversant les règles.
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
[^] # Re: NAT dans les deux sens
Posté par stephane74 . Évalué à 1.
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 9103 -j DNAT --to 192.168.1.3:9103
iptables --table nat --append PREROUTING --destination 78.230.10.10 --protocol tcp --destination-port 9103 --jump DNAT --to-destination 192.168.1.3
iptables --table nat --append POSTROUTING --destination 192.168.1.3 --protocol tcp --destination-port 9103 --jump SNAT --to-source 78.230.10.10
et ça fonctionne nickel
Je vais quand même potasser la doc :-)
[^] # Re: NAT dans les deux sens
Posté par NeoX . Évalué à 2.
# REGLE 1 : tu prend ce qui arrive sur le port 9103 sur eth1 pour le renvoyer vers 192.1681.3:9103
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 9103 -j DNAT --to 192.168.1.3:9103
#REGLE 2 : tu fais exactement la meme chose que la premiere regle mais en prenant ce qui arrive sur l'adresse 78.230.10.10 (au lieu de te baser sur l'interface eth1)
iptables --table nat --append PREROUTING --destination 78.230.10.10 --protocol tcp --destination-port 9103 --jump DNAT --to-destination 192.168.1.3
# REGLE 3 : tu change la source de la demande par l'adresse externe de ton routeur
iptables --table nat --append POSTROUTING --destination 192.168.1.3 --protocol tcp --destination-port 9103 --jump SNAT --to-source 78.230.10.10
perso, je penses que les regles 1 et 2 font la meme chose
ensuite tu pourrais utiliser la meme "ecriture" pour mieux comprendre ce que tu fait
-t nat c'est pareil que --table nat
-A PREROUTING <==> --append PREROUTING
-j DNAT <==> --jump DNAT
-j SNAT <==> --jump SNAT
[^] # Re: NAT dans les deux sens
Posté par stephane74 . Évalué à 1.
[^] # Re: NAT dans les deux sens
Posté par NeoX . Évalué à 2.
quand tu dois jongler entre deux styles d'ecriture, c'est plus difficile à debugguer
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.