Redirecionar solicitações de localhost para um contêiner do Linux

2

Eu corro alguns contêineres Linux, cada um executando uma aplicação web, no meu host Ubuntu. Para acessar as aplicações web, eu uso iptables para encaminhar porta:

sudo iptables -t nat -A PREROUTING -p tcp --dport <port> -j DNAT --to-destination #<container_ip>:<port>

Isso funciona bem se o tráfego vier de fora do meu host. Se a solicitação for feita por localhost, isso não funcionará:

 curl <host_ip>:<port>       #works (from outside the host)
 curl <container_ip>:<port>  #works (from inside the host)
 curl 127.0.0.1:<port>       #doesn't work (from inside the host)

Eu entendo que o pacote vindo do localhost não passa pela regra DNAT do iptables e é por isso que ele não está funcionando. Existe alguma maneira de fazer isso funcionar?

    
por rmonjo 31.07.2013 / 01:07

3 respostas

0

Se você estiver aberto a soluções que não envolvam iptables , basta executar um servidor proxy simples (como saldo ou haproxy ou caneta ou algo assim) para interceptar o tráfego para localhost e passá-lo para seus contêineres.

    
por 31.07.2013 / 01:29
0

@ Brigo: Isso está incorreto. A tabela nat pode conter uma cadeia OUTPUT. O problema é que a cadeia PREROUTING da tabela nat não é aplicada à interface de loopback.

@rmonjo, use a cadeia OUTPUT além da cadeia PREROUTING:

iptables -t nat -A OUTPUT -o lo -p tcp --dport <port> -j DNAT \
--to-destination #<container_ip>:<port>

Edit: isso não funciona. Eu estava pensando no alvo do REDIRECT que não resolveria esse problema.

    
por 31.07.2013 / 01:50
0

Eu gastei muito tempo tentando fazer o iptables fazer este truque, mas de alguma forma, se você adicionar um alvo dnat à cadeia de saída da tabela nat, o processamento adicional do pacote parece parar.

A depuração do iptables pode ser feita com este truque: link

Uma visão geral gráfica do fluxo de pacotes no Linux também ajuda: link

Recorri ao xinetd para resolver o meu problema, veja Encaminhando o terminal (no localhost) de um túnel SSH-L para outra máquina

    
por 30.09.2013 / 09:42