I want to redirect all traffic generated inside a docker container itself over proxy, to not exposure dock machines public IP.
Se isso é tudo que você quer, não é necessário NAT entre as duas instâncias do docker.
Você precisa ativar o encaminhamento na instância proxy
(por exemplo, via sysctl).
Se o IP público de proxy
for visible dentro de proxy
, será necessário fazer SNAT com esse IP público dentro de proxy
(não em dock
). Isso também é chamado de MASQUERADE. É uma configuração padrão, google de "masquerade".
Se o IP público de proxy
for não visível dentro de proxy
(ou seja, listado quando você faz ip addr
), porque o host de proxy
(ou até mesmo algum outro host mais acima) faz o NAT, então você deve evitar o NAT duplo e fazer com que dock
apareça como outro container para o host. Os detalhes dependem de como a rede está configurada no host (o que você não disse), mas basicamente o final do túnel em dock
terá que ter um IP na mesma sub-rede que os contêineres no host proxy
. / p>
Um túnel ipip
não é criptografado; você não deve usar este túnel a menos que o transporte esteja totalmente dentro de uma rede confiável (o que provavelmente não é o caso, porque você parece querer endereços IP públicos diferentes). Portanto, use OpenVPN
ou fácil de configurar alternativas como tinc . Libreswan
não é tão fácil de configurar.
Editar
Passo-a-passo:
1) Verifique se o túnel funciona. Em proxy
, faça ping 192.168.10.2
. Em dock
, faça ping 192.168.10.1
. Depure com tcpdump
em todas as interfaces de rede que você tem acesso. Se o ipip-tunnel não funcionar, use um túnel diferente e faça-o funcionar.
2) Remova todas as regras iptables
em dock
. Definir a rota padrão através do túnel. Teste com ip route get 8.8.8.8
se a rota funcionar.
3) Supondo que eth0
on proxy
tenha o IP público, exclua todas as regras iptables
, do:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o tun10 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth0 -i tun10 -j ACCEPT
Isso diz "encaminhar pacotes, mascarar todos os pacotes encaminhados saindo em eth0
dando a eles o endereço IP público em eth0
como endereço de origem e conexão rastreá-los. Pacotes de tun10
sempre podem ser encaminhados para eth0
, os pacotes recebidos em eth0
somente serão encaminhados para tun10
se a conexão foi estabelecida por dock
. "
Teste fazendo ping 8.8.8.8
em dock
, enquanto executa tcpdump
em tun10
e eth0
on proxy
. Você deve ver os pacotes encaminhados e a fonte sendo reescrita.
4) Quando tudo estiver funcionando, torne-o permanente: Edite /etc/sysctl.conf
ou um arquivo em /etc/sysctl.d
para ter net.ipv4.ip_forward = 1
. Use um script de inicialização para adicionar as regras iptables
ou use qualquer pacote que sua distribuição forneça para salvar as regras.