Obrigado a todos pelo seu tempo para responder. Basicamente, o que eu estou tentando fazer é fazer proxy no tráfego de saída / originado do segundo contêiner ( OBSERVAÇÃO: estou NÃO tentando Proxy o tráfego de entrada, portanto, não pode usar o Apache mod_proxy ou Nginx proxy_pass. Estes módulos funciona para o tráfego de entrada). O primeiro contêiner executa um serviço de proxy na porta 8080.
Como Thierno sugeriu, posso usar as variáveis ENV http_proxy e https_proxy para fazer proxy do tráfego de saída, mas infelizmente NÃO todos os aplicativos / serviços executados em seu sistema operacional respeitam essas variáveis ENV http_proxy e https_proxy. Existem aplicativos que forçam a ignorar as configurações de proxy. Essa é a razão pela qual eu queria usar iptables para impor as regras de tráfego . Assim, nenhum dos aplicativos / serviços podem pular o proxy.
O erro que cometi nas configurações anteriores na pergunta é que eu estava tentando rotear o tráfego de entrada para a porta 80 a 8080 do servidor proxy. Como o primeiro contêiner não tem nenhum tráfego de entrada, ele não funcionará e é logicamente errado PREROUTE / POSTROUTE o tráfego para alcançar o que eu estava procurando. Para rotear o tráfego originado / enviado, precisamos usar cadeia OUTPUT dos iptables.
Minha solução:
Eu usei RedSocks com a combinação iptables para impor o proxy para o tráfego de saída completo do servidor. Aqui está a configuração do iptables que usei:
# Crie uma nova cadeia para RedSocks
root# iptables -t nat -N REDSOCKS
# Ignora as LANs e alguns outros endereços reservados
root# iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
root# iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
root# iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
root# iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
root# iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
# Redirecionar todas as portas locais http para redsocks
root# sudo iptables -t nat -A REDSOCKS -p tcp --dport 80 -j REDIRECT --to-ports 12345
# para o tráfego https basta substituir a porta 80 por 443
# Use toda a cadeia REDSOCKS para todo o tráfego de saída em eth0
root# sudo iptables -t nat -A OUTPUT -p tcp -o eth0 -j REDSOCKS
Agora, configure os redsocks para ouvir a porta local 12345 do tráfego de entrada e encaminhá-la para o IP e a porta do servidor proxy. Para fazer isso edite o redsocks.conf como este,
redsocks {
local_ip = 127.0.0.1;
local_port = 12345;
ip = 172.17.0.4;
port = 8080;
type = http-relay;
}
salve o conf e reinicie o serviço redsocks . Agora todo o tráfego de saída originado do primeiro contêiner será imposto para usar o proxy. ( OBSERVAÇÃO: Eu usei o iptables-persistent para persistir as regras sobre reinicializações do servidor). Na verdade eu implementei o mesmo para o tráfego http e https adicionando outra linha à configuração do iptables. Embora não seja um proxy transparente, faz o trabalho para mim.