Encaminhar o tráfego para o contêiner docker / VM

2

Eu tenho uma máquina bem robusta à minha disposição rodando o Ubuntu 16.04 Server. Ele está executando vários contêineres docker e máquinas virtuais (usando o VirtualBox) referidos como VMs daqui em diante. No momento, o host atribuiu um endereço IP (por exemplo, 192.168.1.10) e os serviços nas VMs são acessados por NAT (por exemplo, 192.168.1.10:80 - > 172.17.0.2:80), o que é insatisfatório.
Em vez disso, gostaria de vincular vários endereços IP (por exemplo, 192.168.1.100-110) à interface de hosts e encaminhar o tráfego para os endereços IP adicionais nas VMs. Que resulta em um mapeamento <public IP> <--> <private IP> .

Eu consegui realizar essa primeira parte adicionando %código% entradas no meu arquivo [...] up ip addr add 192.168.1.1xx/24 dev ens3 label ens3:0 down ip addr del 192.168.1.1xx/24 dev ens3 label ens3:0 [...] (onde /etc/network/interfaces obviamente é o nome da interface de rede do host). Isso significa que os endereços IP adicionais estão funcionando.

Mas a segunda parte me causa dores de cabeça. Até agora eu só considerei soluções baseadas em ens3 , como parece mais apropriado e todos os guias que eu li até agora também o usaram.
Então, o que fiz foi ativar o encaminhamento de IP, adicionando iptables a net.ipv4.ip_forward=1 .

Em seguida, emiti os seguintes comandos para fazer o encaminhamento: /etc/sysctl.conf
iptables -t nat -A POSTROUTING -d 172.17.0.2 -j SNAT --to-source 192.168.1.100 iptables -t nat -A PREROUTING -d 192.168.1.100 -j DNAT --to-destination 172.17.0.2 é o IP privado de uma das VMs. Ele está executando um servidor da Web na porta 8000. 172.17.0.2 estabelece uma conexão, o que me diz que o servidor está em execução. Mas telnet 172.17.0.2 8000 não funciona.
Quase todos os tutoriais sobre telnet 192.168.1.100 8000 lidam com o encaminhamento de uma porta ou um intervalo de portas, mas há poucos que lidam com todo o tráfego em uma interface. Alguém pode identificar meu erro? Ou alguém tem bons conselhos para ferramentas alternativas que realizam o trabalho?

    
por user401432 20.02.2017 / 12:44

2 respostas

0

Sua regra de NAT deve funcionar:

iptables -t nat -A PREROUTING -d 192.168.1.100 -j DNAT --to-destination 172.17.0.2

No entanto, você precisa adicionar outra regra se estiver solicitando algum serviço da mesma máquina (localmente):

iptables -t nat -A OUTPUT -d 192.168.1.100 -j DNAT --to-destination 172.17.0.2

A regra NAT pode ser aplicada a portas específicas de protocolo específico ou a todos os protocolos e portas (como no caso aqui).

    
por 20.02.2017 / 12:59
0

No lado do estivador, pelo menos, você deve conseguir fazer isso com a opção --publish , que pode levar, como opção, um ip do host.

por exemplo,

docker run -p 192.168.1.105:80:80 -d image
    
por 21.04.2017 / 06:21