¿Cómo puedo configurar apache+mod_proxy para que cuando me conecte a mod_proxy en la interfaz X, envíe el tráfico a esa interfaz específica?

¿Cómo puedo configurar apache+mod_proxy para que cuando me conecte a mod_proxy en la interfaz X, envíe el tráfico a esa interfaz específica?

Usamos un servicio que nos asigna una cantidad X de solicitudes por IP y nos permite configurar 5 IP con ese límite (lo sé... parece estúpido que no puedan aumentar el límite 5 veces en una IP).

Imagina que tengo una máquina Linux con la siguiente dirección en Internet: 66.249.90.104 - esa es una IP de Google y no mía... así que siéntete libre de intentar hackearla :)

Configuré apache+mod_proxy como proxy de reenvío (ProxyRequests activado). es decir, puede configurar Firefox para que utilice 66.249.90.104:8080 como proxy y todo el tráfico de Firefox saldrá como 66.249.90.104.

Hasta ahora, todo bien.

Problema:
ahora agrego más interfaces de alias para que el total se vea así:

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

Ejecuto apache+mod_proxy (instancia única de apache) que se vincula a todas las interfaces, pero no importa a qué dirección me conecto para usar el proxy de reenvío, todo el tráfico sale a Internet como 66.249.90.104

También intenté ejecutar 5 apaches diferentes, cada uno vinculado solo a su propia interfaz, pero aún así envía la solicitud saliente a través de 66.249.90.104.

Esperaba que funcionara de la siguiente manera:
me conecto a 66.249.90.108 y hago una solicitud de proxy, y sale como 66.249.90.108.
Me conecto a 66.249.90.107 y hago una solicitud de proxy, y sale como 66.249.90.107.
etc.

¿Alguien más ha tenido que lidiar con este problema? La solución alternativa sería simplemente ejecutar Apache en 5 cajas separadas, pero preferiría que todo funcionara en una sola caja.

¡Gracias!

Respuesta1

Parece que mod_proxy no tiene una opción para seleccionar la IP de origen cuando abre el socket. Sin embargo, puede utilizar iptables para el tráfico SNAT de un usuario a un grupo de direcciones.

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

IIRC se distribuirá a través del grupo con cada conexión asignada, por lo que las cosas deben dividirse equitativamente. Si realmente necesita controlar qué solicitudes van a dónde, puede intentar ejecutar varias instancias de Apache con diferentes usuarios y hacerlas coincidir con reglas independientes.

Respuesta2

Eche un vistazo al CÓMO de control de tráfico y enrutamiento avanzado de Linux, en particular enestepágina. Quizás desee dejar el enrutamiento al kernel, que lo sabe, y no a Apache, que se ocupa del nivel de "aplicación".

información relacionada