Eu tenho um container LXC ( 10.0.3.2
) em execução em um host. Um serviço está sendo executado dentro do contêiner na porta 7000
.
No 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 tornar o serviço em execução dentro do contêiner acessível ao mundo externo. 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
O 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
Sinto como se estivesse perdendo algo estúpido aqui. Que coisas devo verificar? Qual é uma boa estratégia para depurar essas situações?
Para completar, eis como iptables
são configurados 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
iptables
port-forwarding
lxc
Roberto Aloi
fonte
fonte
INPUT
corrente? Talvez a política estejaREJECT
lá.ACCEPT
FORWARD
corrente. Além disso, verifique se o encaminhamento IP está habilitado:cat /proc/sys/net/ipv4/ip_forward
.ip_forward
está definido como1
FORWARD
política também éACCEPT
Respostas:
Parece que você bloqueou a porta 7002 na 10.0.3.1, pois sua política padrão é DROP
Tente adicioná-lo às regras INPUT:
fonte
Eu tive o mesmo problema. Ainda não encontrei solução, mas a seguir, anoto algumas observações.
Eu tenho uma
${host}
máquina host (Ubuntu 12.04) e ela executa uma máquina convidada via LXC. O convidado estáIP 10.0.3.248
ativado e o gateway está10.0.3.1
. Eu executo um servidor Web no convidado e quero portar o tráfego de encaminhamento de${host}:8888
para10.0.3.248:80
. A seguir estão as entradas relevantes do iptables:Com a configuração atual, posso visitar com êxito o servidor da Web em 10.0.3.248:80 a partir 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 no LXC a partir de outra máquina.Meu entendimento é que, quando visito
${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${host}:8888
. Do wireshark, vejo que um RST é enviado recebido. Quando visito de outra máquina física, o pacote entra na cadeia PREROUTING e foi editado por DNAT conforme o esperado.Um post relacionado:
fonte
Eu precisava adicionar uma regra FORWARD
fonte
ok, meus 5 centavos a partir do ano 2018:
Eu instalei o LXC e brinquei com ele. O IP do meu contêiner é
10.0.0.10
Eu adicionei esta regra:
Não deu certo. Então percebi que mesmo a política do FORWARD é ACEITAR, existe uma regra que bloqueia todos os FORWARDs.
Então eu tive que injetar regra no topo:
Agora em frente
host:81
->10.0.0.10:22
funciona.fonte
Seu contêiner pode ser acessado da LAN através 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.
fonte