J'ai un conteneur LXC ( 10.0.3.2
) en cours d'exécution sur un hôte. Un service s'exécute à l'intérieur du conteneur sur le port 7000
.
Depuis l'hôte ( 10.0.3.1
, lxcbr0
), je peux accéder au service:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
J'aimerais rendre le service accessible à l'intérieur du conteneur accessible au monde extérieur. Par conséquent, je veux transférer le port 7002
sur l'hôte vers le port 7000
sur le conteneur:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Ce qui donne ( iptables -t nat -L
):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Pourtant, je ne peux pas accéder au service depuis l'hôte en utilisant le port redirigé:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
J'ai l'impression de manquer quelque chose de stupide ici. Quelles choses dois-je vérifier? Quelle est une bonne stratégie pour déboguer ces situations?
Pour être complet, voici comment iptables
sont définis sur l'hôte:
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
chaîne. Vérifiez également si le transfert IP est activé: cat /proc/sys/net/ipv4/ip_forward
.
ip_forward
est fixé à1
FORWARD
la politique est aussiACCEPT
INPUT
chaîne? Peut-être que la politique estREJECT
là.