Ho un container LXC ( 10.0.3.2
) in esecuzione su un host. Un servizio è in esecuzione all'interno del contenitore sulla porta 7000
.
Dall'host ( 10.0.3.1
, lxcbr0
), posso raggiungere il servizio:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Mi piacerebbe rendere il servizio all'interno del container accessibile al mondo esterno. Pertanto, desidero inoltrare la porta 7002
sull'host alla porta 7000
sul contenitore:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Che risulta in ( iptables -t nat -L
):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Tuttavia, non riesco ad accedere al servizio dall'host utilizzando la porta inoltrata:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Sento che mi manca qualcosa di stupido qui. Quali cose dovrei controllare? Qual è una buona strategia per il debug di queste situazioni?
Per completezza, ecco come iptables
sono impostati sull'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
catena. Controlla anche se l'IP forwarding è abilitato: cat /proc/sys/net/ipv4/ip_forward
.
ip_forward
è impostato su1
FORWARD
la politica è ancheACCEPT
INPUT
catena? Forse la politica èREJECT
lì.