Como configuro um proxy transparente onde o servidor proxy é remoto?

3

O que estou tentando alcançar

Eu tenho uma caixa 1.1.1.1 do CentOS (6.8) e um servidor proxy squid remoto 2.2.2.2

Eu estou tentando emular os resultados de curl http://google.com -x 2.2.2.2:3128 com aplicativos que não têm uma opção de proxy HTTP e não respeito a variável http_proxy (como telegraf)

O que tentei até agora

Eu tentei configurar as regras do iptables para encaminhar o tráfego para o proxy:

iptables -t nat -A PREROUTING -i eth0 ! -s 2.2.2.2 -p tcp --dport 80 -j DNAT --to 2.2.2.2:3128
iptables -t nat -A POSTROUTING -o eth0 -s 1.1.1.1 -d 2.2.2.2 -j SNAT --to 1.1.1.1
iptables -A FORWARD -s 1.1.1.1 -d 2.2.2.2 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT

Descobri então que o DNAT não funciona corretamente se alguém enviar o tráfego para uma caixa remota, pois o tráfego de retorno não é roteado corretamente. Com base nisso, mudei o aplicativo para um contêiner docker (172.17.0.9) na caixa CentOS, e planejei manter a configuração do iptables no host, alterando assim a configuração do iptables:

iptables -t nat -A PREROUTING -i eth0 ! -s 2.2.2.2 -p tcp --dport 80 -j DNAT --to 2.2.2.2:3128
iptables -t nat -A POSTROUTING -o eth0 -s 172.17.0.0/16 -d 2.2.2.2 -j SNAT --to 1.1.1.1
iptables -A FORWARD -s 172.17.0.0/16 -d 2.2.2.2 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT

Eu também tentei o seguinte conjunto de regras:

iptables -t nat -A PREROUTING -i eth0 -s 172.17.0.0/16 -p tcp --dport 80 -j DNAT --to-destination 2.2.2.2:3128
iptables -t nat -A POSTROUTING -o eth0 -d 2.2.2.2/32 -j MASQUERADE

O resultado de ambos os conjuntos de regras foi que o tráfego HTTP ainda tentava ir diretamente para o destino, em vez de usar o proxy.

[root@host ~]# tcpdump -nnn host 216.58.201.35
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:26:24.536668 IP 1.1.1.1.38566 > 216.58.201.35.80: Flags [S], seq 3885286223, win 14600, options [mss 1460,sackOK,TS val 2161333858 ecr 0,nop,wscale 9], length 0

O gateway padrão no contêiner do docker está configurado corretamente para o host, o encaminhamento de IP está ativado no host.

[root@docker /]# ip route
default via 172.17.0.1 dev eth0

[root@host ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

Estou sentindo falta de algo óbvio aqui?

    
por Oliver Smith 04.10.2016 / 17:08

1 resposta

2

RESOLVIDO

Usando o conjunto de regras do iptables:

-A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 2.2.2.2:3128
-A POSTROUTING -s 172.17.0.0/16 -j SNAT --to-source 1.1.1.1

Parece que isso ocorreu porque a interface foi configurada incorretamente (deveria ter sido docker0) - removemos o sinalizador de interface das regras iptables e funciona bem agora

    
por 05.10.2016 / 13:21