Tengo un servicio que se ejecuta en 127.0.0.1 con el puerto 2222. Necesito reenviar todas las solicitudes a 192.168.2.2:2222 (fuera de IP) solo desde la subred 192.168.1.0/24 a 127.0.0.1:2222.
Estoy tratando de usar esto, pero no funciona.
$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222
¿Cómo puedo hacer que esto funcione?
UPD: Editar esquema de direcciones.
iptables
port-forwarding
network-interface
SimWhite
fuente
fuente
2222
en la interfaz de bucle invertido desde la subred192.168.1.0/24
? Ese no es solo un tipo de configuración de regla única. Ver aquí: debuntu.org/…Respuestas:
La regla de iptables que está utilizando funcionará, pero hay un cambio adicional que debe hacer:
(reemplazar
eth0
con el nic192.168.2.2
reside en)Por defecto, este valor es
0
, que le indica al núcleo que no enrute el tráfico externo destinado a127.0.0.0/8
. Esto es solo por seguridad ya que dicho tráfico no es normal.Nota adicional: su regla actual de iptables es demasiado amplia. Su regla se especifica
-d 192.168.1.0/24 --dport 2222
como la coincidencia de destino, lo que significa que si su máquina intenta comunicarse con otro host en el puerto 2222 (es decir, el tráfico de salida), también se redirigirá. Necesitas cambiar la-d
coincidencia-d 192.168.2.2
o agregar-i eth0
(o lo que sea que sea tu nic).fuente
route_localnet
. ¿Ha habido otros nombres para ello? (en 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 reenvío mc_forwarding promote_secondaries rp_filter send_redirects tagroute_localnet
es más reciente (7 de junio de 2012) que mi kernel (2.6.30-std-def-alt15 # 1 SMP Lun Dec 14 08:45:48 UTC 2009). Ok, simplemente lograré el reenvío de puertos deseado (de afuera hacia adentro) con un proceso de reenvío comonetcat
(nc
)xinetd
, o las opciones de reenvío de puertos dessh
(este último es ineficaz y estúpido, por supuesto, pero lo menciono, porque, bueno, esta posibilidad está ahí).sysctl -w net.ipv4.conf.all.route_localnet=1
Puede redirigir a localhost pero no a loopback (127.0.0.0/8). Loopback es una escapatoria. Tienes que redirigir a una de tus interfaces reales. Intenta usar REDIRECT.
iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222
fuente
-j DNAT --to-destination w.x.y.z:222
¿Qué pasa si la respuesta correcta con
route_localnet
no funciona? ..Si su kernel no incluye el parche para
route_localnet
, entonces ... ¡actualice el kernel!O bien, hay otras formas de reenviar el tráfico que llega a una interfaz a otro puerto en otra interfaz (en particular, a localhost) ejecutando un proceso que escuche en la interfaz externa y reenvíe el tráfico.
netcat
(nc
),xinetd
yssh
(y tal vez más) son todos ejemplos de programas capaces de hacer esto (aunque elegirssh
sería extraño e ineficaz).He escrito una configuración
xinetd
para esto. Ahora este servicio aparece automáticamente:(
vaio.ob
es el nombre de este host en la interfaz de red externa).Después de un
service xinetd reload
, verifiquemos que está escuchando:Y de hecho, las conexiones pasan.
fuente