Squid-openwrt-padres
De Guifi.net - Wiki Hispano
Contenido
Cambio de proxies con OpenWrt y Squid
Con este documento se pretende exlpicar cómo configurar un proxy para que se valide con otros proxies de la red.
Nota: Aquí está explicado para OpenWrt pero debería ser ideńtico (menos los paquetes) con cualquier linux.
Esquema
Navegador ----> Router OpenWrt -----> Proxy guifi externo -----> Internet
Ventajas, usos e inconvenientes
Ventajas y usos:
- Si un proxy deja de estar operativo, no hace falta modificar la configuración de los navegadores.
- No pide contraseñas de proxy en los navegadores.
- Si tenemos un proxy con Squid y se nos cae nuestra línea podemos redirigir nuestro tránsito a otros proxies mientras hacemos el mantenimiento.
Inconvenientes:
- Necesitamos un router capaz de gestionarlo.
- Tenemos que añadir un un proxy a nuestra red con el mantenimiento que ello supone
En los navegadores de nuestra red tenemos que configurar la IP del ROUTER y no la del proxy de guifi externo.
Si nuestro Squid tiene la IP 192.168.1.5 tenemos que configurar los navegadores como 192.168.1.5:3128
Squid
Paquetes necesarios:
root@OpenWrt: opkg update root@OpenWrt: opkg install squid iptables-mod-nat-extra
Configuració d'Squid:
Hacemos una copia de seguridad del fichero de configuración original
root@OpenWrt:~# cp /etc/squid/squid.conf /etc/squid/squid.conf.original
Reset del fichero de configuración
root@OpenWrt:~# echo > /etc/squid/squid.conf
Editamos el fichero de configuración con estos parámetros
root@OpenWrt:~# vi /etc/squid/squid.conf
Fichero de configuración
http_port 3128 transparent hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? cache deny QUERY acl apache rep_header Server ^Apache access_log /var/log/access.log squid hosts_file /etc/hosts refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 #solo permitimos conexiones desde el rango local acl all src 192.168.1.0/255.255.255.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 # https, snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT http_access allow all http_access allow manager all http_access allow localhost http_reply_access allow all icp_access allow all visible_hostname guifi-proxy-local # always_direct allow all nonhierarchical_direct off # si queremos que primero use los padres "prefer_direct off" prefer_direct off coredump_dir /var/spool/squid # No queremos caché (los openwrt suelen tener poco espacio!) cache deny all # Por si crea caché que lo haga a null cache_dir null /dev/nul # Si crees que te puedes quedar sin espacio puedes poner estas rutas a /dev/nul también cache_store_log /var/log/store.log cache_log /var/log/cache.log pid_filename /var/log/squid.pid #A partir de aquí proxies padres de guifi, hace falta mirar cuáles van mejor y ponerles un USUARIO:CONTRASEÑA #Yo lo tengo apuntado así en el fichero de configuración para saber cuál es cuál. #10.138.27.163 BCNSettProxy ONO - PING 23ms - 11.66Mb / 4.85Mb - 8 salts cache_peer 10.138.27.163 parent 3128 3128 proxy-only no-query no-digest default login=USUARIO:CONTRASEÑA #10.139.37.194 Vallcarca Telefonica - PING 32ms - 10Mb/5Mb - 3 salts cache_peer 10.139.92.131 parent 3128 3128 proxy-only no-query no-digest default login=USUARIO:CONTRASEÑA #10.138.27.98 BCNAragoOlostSrvr1 Jazztel - PING 45ms - 9Mb / 2Mb - 6 salts cache_peer 10.35.125.163 parent 3128 3128 proxy-only no-query no-digest default login=USUARIO:CONTRASEÑA #10.139.36.66 agricultura 3128 ONO - PING 34ms - 7.79Mb / 4.48Mb - 9 salts cache_peer 10.139.36.66 parent 3128 3128 proxy-only no-query no-digest default login=USUARIO:CONTRASEÑA
pulsa aquí para ver un squid.conf alternativo mucho más simple (también mucho menos seguro)
Script de inicialización
AYUDA: Hay que mejorarlo!
root@OpenWrt:~# vi /etc/init.d/squid
#! /bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=squid DESC="Squiq web proxy" #If lan LAN="br-lan" #Ruta donde está el iptables IPT=/usr/sbin/iptables LOGPATH=/var/log PIDPATH=/var/log/squid.pid #Rango de la red de área local LOCAL_LAN="192.168.1.0/24" SQUID_SERVER="127.0.0.1" SQUID_PORT="3128" # Abrimos puerto en iptables $IPT -A INPUT -i $LAN -p tcp --dport $SQUID_PORT -j ACCEPT # Miramos si existe $LOGPATH test -d $LOGPATH || mkdir -p $LOGPATH || chmod 744 $LOGPATH case "$1" in start) # Comprobando que no esté iniciado. if [ -e $PIDPATH ]; then echo "$DESC: $NAME ya iniciado." exit 0 fi echo -n "Iniciando $DESC: $NAME" $NAME -d 9 echo "." ;; stop) if [ ! -e $PIDPATH ]; then echo "$DESC: $NAME no está funcionando." exit 0 fi echo -n "Parando $DESC: $NAME" $NAME -k shutdown #Es muy lento el apagado, esperamos 5 segons sleep 5 rm -f $PIDPATH echo "." ;; restart) if [ ! -e $PIDPATH ]; then $0 start exit 0 fi echo -n "Restart $DESC: $NAME" $NAME -k shutdown sleep 15 rm -f $PIDPATH count=1 while [ -e $PIDPATH ] do $NAME -k shutdown sleep 10 rm -f $PIDPATH count=$((count+1)) if [ $count -eq 4 ]; then echo "no puedo matar el proceso, intenta hacerlo con force-reload" exit 1 fi done if [ ! -e $PIDPATH ]; then $0 start exit 0 fi echo -n "Iniciando $DESC: $NAME" $NAME -d 9 echo "." ;; force-reload) if [ ! -e $PIDPATH ]; then $0 start exit 0 fi echo -n "Restart $DESC: $NAME" $NAME -k shutdown sleep 10 rm -f $PIDPATH count=1 while [ -e $PIDPATH ] do killall -9 $NAME sleep 10 rm -f $PIDPATH count=$((count+1)) if [ $count -eq 4 ]; then echo "no puedo matar el proceso" exit 1 fi done if [ ! -e $PIDPATH ]; then $0 start exit 0 fi ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 ;; esac exit 0
root@OpenWrt:/etc/init.d# chmod 755 /etc/init.d/squid
root@OpenWrt:/etc/init.d# ln -s /etc/init.d/squid /etc/rc.d/S99squid
Problemas típicos
- Si no funciona mira qué puerta de enlace tienes configurada (comando route y mirar el que está por defecto) y que tengas enrutamiento hasta el servidor Squid padre. Intenta hacer un ping y ver si responde, a veces hay nodos caídos que hacen que no se pueda llegar al proxy.
Comandos básicos de Squid
Parar
root@OpenWrt:/# squid -k shutdown
Lanzar en modo debug
root@OpenWrt:/# squid -d 9
Debug + No comprobar DNS (por si no tenemos enrutamiento DNS)
root@OpenWrt:/# squid -d 9 -D