[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: redireccionamiento hacia squid



El 10 de octubre de 2008 12:20, Federico Alberto Sayd <fsayd@uncu.edu.ar> escribió:
Julián Esteban Perconti escribió:

saludos lista:

Tengo problemas para redireccionar a squid transparente peticiones desde el 80/tcp.

tengo un squid en una pc (192.168.0.6) funcionando correctamente, un gateway (192.168.0.1) funcionando correctamente con esta regla con respecto al problema:

iptables -t nat -A PREROUTING -i eth1 -s 192.168.0.2 -d 0/0 -p tcp --sport 1024:65535  --dport 80 -j DNAT --to 192.168.0.6:3128

y sin embargo el cliente (yo: 192.168.0.2) no navega; pero ocurre que si especifico en el navegador quien es el proxy, entonces si puedo navegar correctamente.

datos adicionales del GW y squid:

eth1 es la iface del GW que  va a la lan.

En el GW el bit forwarding esta activo y el 3128/tcp esta abierto hacia la lan.

tabla route de squid:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.0.1    0.0.0.0         UG    0      0        0 eth0

tabla route de GW:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
default         *               0.0.0.0         U     0      0        0 ppp0

¿ por que razon puede ser que el cliente no pueda navegar sin tener que especificar que pc es el proxy?

   Gracias de antemano, Julian.


Tienes que fijarte en el algoritmo de ruteo.

Cuando la maquina cliente tiene que ir a alguna ip al puerto 80 por defecto busca el gateway a menos que esa ip de destino esté en la red local. Una vez que el paquete llega al router para ser reenviado, el router reescribe la dirección de destino (DNAT) para que la petición la acepte otra máquina (192.168.0.6), la petición, o el paquete es enviado al proxy en esa otra máquina. Pero cuando tu proxy transparente tiene que responder la conexión ¿a quién le responde? ¿le responde al router? no, porque lo único que se reescribe es la ip de destino, la de origen no se reescribe y por lo tanto el proxy va a tratar de responder directamente al cliente, y como está en la red local no tiene por qué pasar por el router. Cuando a tu cliente le llega la respuesta del proxy transparente no tiene idea de la conexión (el nunca inició una conexión a 192.168.0.6) y por eso la descarta.

Sin embargo el cliente estaba esperando una respuesta de otra máquina (por ejemplo un host en Internet), que si todo anduviera como debe ser, sería en relidad el proxy que estaría respondiendo a través del router que hace un rastreo de la conexión y devuelve el paquete del proxy a la maquina de origen y el proxy transparente funcionaría.

Qué queda por hacer? Bueno, si nateaste el destino de la conexión, puedes natear el origen (SNAT) para que el proxy transparente hable directamente con el gateway que va a llevar el conteo de la conexión (connecction tracking)  y te que lo devoverá a tu máquina cliente.

En relidad te envitarías todo el dolor de cabeza si el proxy transparente estuviera montado en router-firewall que es lo más común, pero de la otra forma también se puede hacer.

Se entiende? Y si estoy equivocado que alguien me corrija. Porque al menos a mi no me funcionaba y lo solucioné con el SNAT

Saludos

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport http -j DNAT --to "192.168.0.6:8080" con esa regla redireccionas todas las peticiones http que vengan por la tarjeta de red eth0.

--
"Al principio, el Hombre creó a Dios; y lo creó a su imagen y semejanza.
Y el Hombre dio a Dios multitud de nombres, y el poder de que fuera el Señor de toda la tierra cuando al Hombre le conviniere."

Reply to: