Català  

Squid-openwrt-padres

De Guifi.net - Wiki Hispano

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

Configuración en los navegadores

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
Herramientas personales