J'ai un service fonctionnant sur 127.0.0.1 avec le port 2222. Je dois transférer toutes les demandes vers 192.168.2.2:2222 (adresse IP extérieure) uniquement à partir du sous-réseau 192.168.1.0/24 à 127.0.0.1:2222.
J'essaie de l'utiliser, mais ça ne marche pas.
$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222
Comment puis-je le faire fonctionner?
UPD: Modifier le schéma d'adresse.
2222
sur l'interface de bouclage depuis un sous192.168.1.0/24
- réseau ? Ce n'est pas simplement un type de règle d'installation. Voir ici: debuntu.org/…Réponses:
La règle iptables que vous utilisez fonctionnera, mais vous devez apporter un changement supplémentaire:
(en remplaçant
eth0
par le nic192.168.2.2
réside sur)Par défaut, cette valeur est
0
ce qui indique au noyau de ne pas router le trafic externe destiné à127.0.0.0/8
. Ceci est juste pour la sécurité car un tel trafic n'est pas normal.Remarque supplémentaire: votre règle iptables actuelle est trop large. Votre règle spécifie
-d 192.168.1.0/24 --dport 2222
la correspondance de destination, ce qui signifie que si votre machine tente de communiquer avec un autre hôte sur le port 2222 (c.-à-d. Le trafic sortant), elle sera également redirigée. Vous devez soit changer le-d
match-d 192.168.2.2
, soit ajouter-i eth0
(ou quel que soit votre numéro de portable).la source
route_localnet
. Y a-t-il eu d'autres noms pour cela? (sous Linux 2.6.30)ls /proc/sys/net/ipv4/conf/lan/
: accept_redirects arp_accept arp_filter arp_notify disable_policy force_igmp_version log_martians medium_id proxy_arp secure_redirects shared_media accept_source_route arp_announce arp_ignore bootp_relay disable_xfrm expédition mc_forwarding promote_secondaries rp_filter send_redirects tagroute_localnet
est plus récent (7 juin 2012) que mon noyau (2.6.30-std-def-alt15 # 1 SMP Mon Dec 14 14:45:48 UTC 2009). Ok, je vais simplement réaliser la redirection de port souhaitée (de l’extérieur vers l’intérieur) avec un processus de redirection commenetcat
(nc
)xinetd
, ou les options de redirection de port dessh
(cette dernière option est inefficace et stupide, bien sûr, mais je le mentionne, parce que, eh bien, cette possibilité est là).sysctl -w net.ipv4.conf.all.route_localnet=1
Vous pouvez rediriger vers localhost mais pas vers le bouclage (127.0.0.0/8). Le bouclage est une échappatoire. Vous devez rediriger vers l'une de vos interfaces réelles. Essayez d'utiliser REDIRECT.
iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222
la source
-j DNAT --to-destination w.x.y.z:222
Que faire si la bonne réponse avec
route_localnet
ne fonctionne pas? ..Si votre noyau n'inclut pas le correctif
route_localnet
, alors ... mettez-le à niveau!Ou bien, il existe d'autres moyens de transférer le trafic arrivant d'une interface à un autre sur une autre interface (en particulier vers localhost) en exécutant un processus qui écoute sur l'interface externe et transfère le trafic.
netcat
(nc
),xinetd
etssh
(et peut-être davantage) sont tous des exemples de programmes capables de le faire (bien que choisirssh
serait étrange et inefficace).J'ai écrit une configuration
xinetd
pour cela. Maintenant, ce service est automatiquement mis en place:(
vaio.ob
correspond au nom de cet hôte sur l'interface réseau externe.)Après un
service xinetd reload
, vérifions qu'il écoute:Et en effet, les connexions passent!
la source