Parece que você bloqueou a porta 7002 em 10.0.3.1, já que sua política padrão é DROP
Tente adicioná-lo às regras de INPUT:
iptables -A INPUT -p tcp --dport 7002 -j ACCEPT
Eu tenho um contêiner LXC ( 10.0.3.2
) em execução em um host. Um serviço está sendo executado dentro do contêiner na porta 7000
.
Do host ( 10.0.3.1
, lxcbr0
), posso acessar o serviço:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Eu adoraria fazer o serviço rodando dentro do contêiner acessível ao mundo exterior. Portanto, desejo encaminhar a porta 7002
no host para a porta 7000
no contêiner:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Que resulta em ( iptables -t nat -L
):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Ainda assim, não consigo acessar o serviço do host usando a porta encaminhada:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Eu sinto que estou sentindo falta de algo estúpido aqui. Que coisas devo verificar? Qual é uma boa estratégia para depurar essas situações?
Para completar, veja como iptables
está definido no 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
Parece que você bloqueou a porta 7002 em 10.0.3.1, já que sua política padrão é DROP
Tente adicioná-lo às regras de INPUT:
iptables -A INPUT -p tcp --dport 7002 -j ACCEPT
Eu encontrei o mesmo problema. Ainda não encontrei solução, mas depois anotei algumas observações.
Eu tenho um host ${host}
machine (Ubuntu 12.04) e ele roda uma máquina convidada via LXC. O convidado está em IP 10.0.3.248
e o gateway é 10.0.3.1
. Eu executo um servidor da web no guest e quero encaminhar o tráfego de ${host}:8888
para 10.0.3.248:80
. A seguir estão as entradas relevantes do iptables:
-A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.248:80
-A POSTROUTING -j MASQUERADE
Com a configuração atual, posso visitar com êxito o servidor da Web em 10.0.3.248:80 de outra máquina física. No entanto, ele falha quando tento visitar 10.0.3.248:80 de ${host}
. Talvez você possa tentar visitar esse serviço dentro do LXC de outra máquina.
Meu entendimento é que, quando eu visito de ${host}
, o pacote passa pela interface de loopback e entra diretamente na cadeia INPUT. Embora eu permita tudo no INPUT, não há serviço escutando em ${host}:8888
. De wireshark, vejo um RST é enviado recebido. Quando eu visito de outra máquina física, o pacote entra na cadeia PREROUTING e foi editado como esperado.
Um post relacionado:
Eu precisava adicionar uma regra FORWARD
iptables -A FORWARD -p tcp -d 10.0.3.2 --dport 7002 -j ACCEPT
ok, meus 5 centavos do ano de 2018:
Eu instalei o LXC e toquei nele. O IP do meu contêiner é 10.0.0.10
Eu adicionei esta regra:
iptables -t nat -A PREROUTING -p tcp -i ens192 --dport 81 -j DNAT --to-destination 10.0.0.10:22
Não funcionou. Então percebi que mesmo a política FORWARD é ACCEPT, existe uma regra que bloqueia todos os FORWARD.
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * virbr0 0.0.0.0/0 10.0.0.0/24 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- virbr0 * 10.0.0.0/24 0.0.0.0/0
0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
5 268 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Então eu tive que injetar regra no topo:
iptables -I FORWARD -p tcp -d 10.0.0.10 --dport 22 -j ACCEPT
Agora, encaminhar host:81
- > 10.0.0.10:22
funciona.
Seu contêiner é acessível a partir da LAN por meio de uma interface de ponte de host e, portanto, conectado à mesma sub-rede que o host.
Você precisa que seu roteador encaminhe essas portas para o seu contêiner.
Tags port-forwarding iptables lxc