En modo transparente, se utilizan las siguientes reglas de iptable para redirigir el tráfico a Squid.
iptables -I PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 3128
Según mi conocimiento, REDIRECT cambia la dirección IP de destino a la IP de la interfaz local.
Entonces, cuando el tráfico llega a Squid, ¿cómo llega Squid a dónde reenviarlo si la IP de destino ha cambiado ahora?
Respuesta1
Tiene razón en que con REDIRECT
Squid no puede ver la IP de destino original; en su lugar, resolverá el host proporcionado por el cliente en el Host:
encabezado HTTP, que es obligatorio en HTTP 1.1.
Respuesta2
Eso es muy similar a la puerta de enlace.
Cuando el host del cliente no sabe dónde reside el host de destino, envía el paquete a la puerta de enlace predeterminada. Y la puerta de enlace define dónde se debe enviar ese paquete.
El proxy transparente hace lo mismo. Todos los paquetes dirigidos a xxx.xxx.xxx.xxx:80 se desvían al puerto 3128 en lugar del puerto mencionado en el encabezado del paquete. Squid analiza el paquete y sus encabezados src
, dst
y los puertos correspondientes, y luego envía el paquete como lo hace la puerta de enlace, o envía inmediatamente una respuesta si se almacenó en caché antes.
La idea principal es que el puerto de destino se almacena dentro de cada paquete, mientras que el paquete se puede enrutar a los diferentes hosts/puertos en tránsito.