Como posso configurar o Apache + mod_proxy para que, quando me conectar ao mod_proxy na interface X, ele envie o tráfego para essa interface específica?

Como posso configurar o Apache + mod_proxy para que, quando me conectar ao mod_proxy na interface X, ele envie o tráfego para essa interface específica?

Usamos um serviço que nos atribui um número X de solicitações por IP e nos permite configurar 5 IPs com esse limite (eu sei .. parece estúpido, eles não poderiam simplesmente aumentar o limite 5x em um IP).

Finja que tenho uma caixa Linux com o seguinte endereço na internet: 66.249.90.104 - esse é um IP do Google e não meu... então fique à vontade para tentar hackear :)

Eu configurei o Apache+mod_proxy como um proxy de encaminhamento (ProxyRequests On). ou seja, você pode configurar o Firefox para usar 66.249.90.104:8080 como proxy, e todo o tráfego do Firefox sai como 66.249.90.104.

Até agora tudo bem.

Problema:
agora adiciono mais interfaces de alias para que o total fique assim:

eth0: 66.249.90.104
eth0:1 66.249.90.105
eth0:2 66.249.90.106
eth0:3 66.249.90.107
eth0:4 66.249.90.108

Eu executo o apache + mod_proxy (instância única do apache) que se liga a todas as interfaces, mas não importa qual endereço eu conecte para usar o proxy de encaminhamento, todo o tráfego sai para a Internet como 66.249.90.104

Também tentei executar 5 apaches diferentes, cada um vinculado apenas à sua própria interface, mas que ainda envia a solicitação de saída por meio de 66.249.90.104.

Eu esperava que funcionasse da seguinte maneira:
eu me conecto a 66.249.90.108 e faço uma solicitação de proxy, e sai como 66.249.90.108.
Eu me conecto a 66.249.90.107 e faço uma solicitação de proxy, e sai como 66.249.90.107.
etc.

Alguém mais teve que lidar com esse problema? A solução alternativa seria apenas executar o Apache em 5 caixas separadas, mas eu preferiria que tudo funcionasse em uma caixa.

Obrigado!

Responder1

Parece que o mod_proxy não tem a opção de selecionar o IP de origem ao abrir o soquete. No entanto, você pode usar iptables para tráfego SNAT de um usuário para um conjunto de endereços.

iptables -A POSTROUTING -m owner --uid-owner httpd -j SNAT --to-source 66.249.90.104-66.249.90.108

O IIRC será distribuído pelo pool com cada conexão sendo mapeada, portanto, as coisas devem ser divididas igualmente. Se você realmente precisa controlar quais solicitações vão para onde, você pode tentar executar várias instâncias do Apache sob diferentes usuários e combinar regras separadas.

Responder2

Dê uma olhada no Linux Advanced Routing and Traffic Control HOWTO, em particular emessepágina. Talvez você queira deixar o roteamento para o kernel, que sabe disso, do que para o apache, que está cuidando do nível de "aplicativo".

informação relacionada