| Made possible by PowerDNS | ||
|---|---|---|
| Anterior | Capítulo 15. Recetario | Siguiente |
Esta sección nos la envió el lector Ram Narula de Internet para la Educación (Tailandia).
La técnica habitual para conseguir esto en Linux probablemente es usar ipchains DESPUES de asegurarse que el tráfico de "salida" del puerto 80(web) se dirige al servidor que ejecuta el squid.
Hay 3 métodos comunes para asegurarse de que el tráfico "saliente" del puerto 80 se envía al servidor que ejecuta el squid, y aquí vamos a introducir una cuarta.
Si puede decirle a su pasarela que haga que los paquetes que salen hacia el puerto 80 sean enviados hacia la dirección IP del servidor squid.
PERO
Esto añadiría una carga adicional al router y algunos router comerciales podrían no soportarlo siquiera.
Los switchs de capa 4 pueden gestionar esto sin problemas.
PERO
El coste de este equipamiento suele ser muy alto. Un switch de capa 4 típico normalmente costará más que el router típico + un buen servidor linux.
Puede forzar que TODO el tráfico pase por el servidor caché.
PERO
Esto es muy arriesgado porque Squid utiliza gran cantidad de CPU y podría acabar ralentizando el rendimiento de la red entera o que el propio servidor se caiga, y nadie de la red podrá acceder a Internet si esto ocurre.
Con NetFilter se puede implementar otra técnica que usa NetFilter para "marcar" los paquetes con puerto de destino 80 e iproute2 para encaminar los paquetes marcados al servidor Squid.
|----------------| | Implementación | |----------------| Direcciones usadas 10.0.0.1 naret (Servidor NetFilter) 10.0.0.2 silom (Servidor Squid) 10.0.0.3 donmuang (Router conectado a Internet) 10.0.0.4 kaosarn (otro servidor de la red) 10.0.0.5 RAS 10.0.0.0/24 red principal 10.0.0.0/19 red total |---------------| |Diagrama de red| |---------------| Internet | donmuang | ------------hub/switch---------- | | | | naret silom kaosarn RAS etc.Primero, hagamos pasar todo el tráfico a través de naret asegurándonos de que es la pasarela por defecto excepto para silom. La pasarela por defecto de silom será donmuang (10.0.0.3) o crearíamos un bucle de tráfico.
(todos los servidores de mi red tienen como pasarela por defecto a 10.0.0.1, que era la anterior dirección IP del router donmuang, así que lo que he hecho es cambiar la dirección IP de donmuang a 10.0.0.3 y darle a naret la dirección ip 10.0.0.1)
Silom ----- -configurar squid e ipchains
Configuramos el servidor Squid de silom, y nos aseguramos de que soporte proxy/caché transparente; el puerto por defecto suele ser 3218, de manera que se tiene que redirigir localmente todo el tráfico hacia el puerto 80 al puerto 3128. Esto se puede hacer con ipchains con lo siguiente:
silom# ipchains -N allow1 silom# ipchains -A allow1 -p TCP -s 10.0.0.0/19 -d 0/0 80 -j REDIRECT 3128 silom# ipchains -I input -j allow1
O, en el idioma de netfilter:
silom# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
(nota: podría tener otras entradas también)
Si desea más información sobre configuración del servidor Squid, por favor, remítase a la página de las FAQ de Squid en http://squid.nlanr.net).
Nos aseguramos de que este servidor tiene activo el reenvío de ip (forwarding) y de que su pasarela por defecto es el router donmuang (NO naret).
Naret ----- -configurar iptables e iproute2 -desactivar los mensajes icmp REDIRECT (si es necesario)
"Marca" con el valor 2 los paquetes con destino al puerto 80
naret# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 \ -j MARK --set-mark 2
Configuramos iproute2 para que envíe los paquetes con la marca 2 a silom
naret# echo 202 www.out >> /etc/iproute2/rt_tables naret# ip rule add fwmark 2 table www.out naret# ip route add default via 10.0.0.2 dev eth0 table www.out naret# ip route flush cache
Si donmuang y naret están en la misma subred entonces naret no debería enviar mensajes icmp REDIRECT. En este caso, deberíamos desactivar los icmp REDIRECT así:
naret# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects naret# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects naret# echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
Hemos terminado el montaje, comprobemos la configuración
En naret: naret# iptables -t mangle -L Chain PREROUTING (policy ACCEPT) target prot opt source destination MARK tcp -- anywhere anywhere tcp dpt:www MARK set 0x2 Chain OUTPUT (policy ACCEPT) target prot opt source destination naret# ip rule ls 0: from all lookup local 32765: from all fwmark 2 lookup www.out 32766: from all lookup main 32767: from all lookup default naret# ip route list table www.out default via 203.114.224.8 dev eth0 naret# ip route 10.0.0.1 dev eth0 scope link 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 127.0.0.0/8 dev lo scope link default via 10.0.0.3 dev eth0 (hay que asegurarse de que silom aparece en una de las líneas anteriores, en este caso es la línea con 10.0.0.0/24) |-------| |-HECHO-| |-------|
|----------------------------------------------------| |Diagrama de flujo del tráfico tras la implementación| |----------------------------------------------------| INTERNET /\ || \/ -----------------router donmuang--------------------- /\ /\ || || || || || \/ || naret silom || *tráfico hacia el puerto 80==========>(caché) || /\ || || || \/ \/ \\===================================kaosarn, RAS, etc.
Tengan en cuenta que la red es asimétrica ya que hay un salto extra en la ruta general de salida.
Este es el camino seguido por los paquetes que atraviesan la red desde kaosarn hacia y desde Internet. Tráfico web/http: consulta http de kaosarn->naret->silom->donmuang->internet respuestas http desde Internet->donmuang->silom->kaosarn consultas no web/http (ej: telnet): datos salientes de kaosarn->naret->donmuang->internet datos entrantes de Internet->donmuang->kaosarn