Tengo un contenedor LXC ( 10.0.3.2
) ejecutándose en un host. Se está ejecutando un servicio dentro del contenedor en el puerto 7000
.
Desde el host ( 10.0.3.1
, lxcbr0
), puedo llegar al servicio:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Me encantaría hacer que el servicio que se ejecuta dentro del contenedor sea accesible para el mundo exterior. Por lo tanto, quiero reenviar el puerto 7002
en el host al puerto 7000
en el contenedor:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Lo que resulta en ( iptables -t nat -L
):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Aún así, no puedo acceder al servicio desde el host utilizando el puerto reenviado:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Siento que me estoy perdiendo algo estúpido aquí. ¿Qué cosas debo verificar? ¿Cuál es una buena estrategia para depurar estas situaciones?
Para completar, así es como iptables
se configuran en el host:
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
ACCEPT
FORWARD
cadena. También puedes ver si el reenvío de IP está habilitado: cat /proc/sys/net/ipv4/ip_forward
.
ip_forward
está configurado para1
FORWARD
la política también esACCEPT
INPUT
cadena? Tal vez la política estáREJECT
ahí.