¿Como hago para que Squid y Nat trabajen juntos.?
Es común que los proveedores de Internet asignen solo un rango de direcciones a empresas que contratan algún tipo de conexión al Internet, en algunos casos solo 10 o 14 direcciones validas de Internet. Esto en parte por que las direcciones validas se están terminando.
Existen implementaciones para lograr que una LAN con muchas maquinas pueda salir al Internet con una sola IP valida.
Una de estas implementaciones es NAT, (Network Adress Translation), que lo que hace es toma una ip de la intranet, para luego convertirla en una ip de Internet. Cisco (Fabricante de enrutadores) tiene esta funcionalidad en su recientes sistemas operativos.
Básicamente lo que el NAT hace es trasladar un ip en otra, por ejemplo si el cliente tiene una ip así: 172.16.0.2 y el NAT es 148.202.26.1, todos en el exterior "verían" a los clientes con la ip del NAT; El servidor se encarga de destramanar la ip cuando esta regresa.
Ahora el caso que nos ocupa, FreeBSD, que es una distribución de UNIX libre (o BSD), tiene esta característica. Puedes conseguirlo en www.freebsd.org.
Antes de continuar, los requisitos son (En un servidor de prueba) 2 tarjetas de red, una conectada al Internet la otra a la intranet, FreeBSD. En un servidor de producción, la más memoria que se pueda. Y el micro más nuevo que se tenga.
Bien, una ves instalado lo primero que debemos de hacer es modificar el núcleo (Kernel), esto es necesario para habilitar el NAT.
0.- Tener instalado el fuente del núcleo de freebsd, para hacer esto ejecutamos.
/stand/sysinstall
Después seleccionamos, Configure, Distributions, con barra espaciadora prendemos Sources for everetyng but DES, y llegaremos aqui:

con barra espaciadora encendemos /usr/src/sys (FreeBSD Kernel), luego damos OK, y de esta manera se instala el fuente del núcleo, necesario para recompilarlo.
1.- Nos cambiamos de directorio, a:
cd /usr/src/sys/i386/conf
aquí encontraras un archivo de texto que se llama GENERIC, que es el kernel que trae el FreeBsd, ahora para comenzar a compilar lo que tenemos que hacer es copiar este archivo con otro nombre Ej.:
cp GENERIC miKernel
Con esto tendremos una copia del núcleo original, para modificarlo sin mucho riesgo, ya que si algo sale mal, podríamos regresar al núcleo GENERIC.
Bien, para agregar el soporte de nat al FreeBsd agregamos algunas líneas al núcleo. Edita el archivo (con vi o, pico o, ee) miKernel (o como le pusiste) y en la sección de options agrega las siguientes líneas:
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_FORWARD
Ahora, con los dos primeras líneas es suficiente para que funcione el nat, pero si queremos darle forward hacia algún otro lado tendremos que agregar la 3, que nos permitirá pasar el trafico de nat hacia squid.
Ahora que esta esas tres líneas guarda el archivo, con el mismo nobre ahora lo que sigue es sencillo, ejecutamos:
/usr/config/miKernel
cd ../../compile/miKernel
make depend
make
make install
Tal cual, línea tras línea. Con esto quedara el núcleo listo para usar el nat, después de este proceso reinicia el FreeBsd, con reboot o con halt, si el servidor no arranca es que algo salió mal. Debes de arrancar con boot kernel.GENERIC con esto arrancara con la versión previa del kernel. Es lo bueno de FreeBSD :)
Después de que arranque valdría la pena checar el manual de nat, para hacerlo ejecutamos man natd Esto para irnos dando una idea de como funciona. Aunque aun hoy me parece complejo.
Tenemos que modificar unas líneas en /etc/rc.conf Algo sencillo, solo esto:
firewall_enable="YES"
firewall_type="open"
natd_enable="YES"
natd_interface="fxp0"
Por lo pronto así, nota que la ultima línea hace referencia a la tarjeta que esta conectada al Internet, y que es la que tienen IP valida. Luego podremos agregar reglas que se carguen al momento que inicie el servidor.
También vale la pena echarle un ojo a: /etc/rc.firewall aunque no hay nada que hacer ahi, (en este caso).
Bien ahora es el turno de Squid:
Lo primero que tenemos que hacer es descargarlo:
1.-Descargar la versión mas nueva de http://www.squid-cache.org/Versions/v2/2.4/ (esto a la fecha de este manual)
otra opción directamente en el servidor es entrar al directorio* /usr/ports/www/squid23 y ejecutar:
make install
y con eso se instala el Squid.
*Este directorio existe solo si desde la instalación seleccionamos instalar la colección de ports. De lo contrario tendrá que hacer como el primer paso o instalarlos.
Bien, sino tiene ese directorio siga estos pasos... ja ja ja como receta:
1.-Por razones de orden crear un directorio así:
/usr/local/squid/src
2.-Descomprimir:
gunzip -dv squid-version.tar.gz /usr/local/squid/src
3.- Desempaquetar:
tar xvf squid-version.tar /usr/local/squid/src
4.- Compilar dentro del directorio /usr/local/squid/src
./configure --enable-err-language=Spanish --prefix=/usr/local
Nótese el punto al inicio. Si marca algun tipo de error sera basicamente problema del Sistema operativo que estemos utilizando. A veces falta el compilador de C, o problemas con los derechos, cosas asi.
Con esto se genera un script para crear el binario para el sistema operativo en cuestión.
Es posible bajar el binario para un sistema operativo en especifico, pero se disfruta mas de este método.
Existe un binario para Windows NT, pero fuchi. Si aun así te animas vista la pagina:
http://www2.idesoft.com/squid/
5.-Crear el binario:
make install
Listo, ya esta instalado pero no configurado..!!!!
0-.Bien, necesitamos modificar algunas cosas en la configuración del Squid, en /usr/local/squid/squid.conf en este archivo esta lo necesario. Necesitamos editarlo. Con pico o con ee o con vi. y dejamos asi:
http_port 80 httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
Buscamos las sección donde esta.
cache_effective_group
cache_effective_user
Debe de quedar así para poderle dar forward del NATD hacia el Squid, de manera transparente. El NATD, actúa como Firewall entre el exterior y nuestra red local, y el Squid como Proxy de Nuestra red local hacia el exterior.
1.- Guardamos los cambios.
Dentro de este archivo existen infinidad de directivas que controlan la manera en como se comporta el squid, pero escapan de esta mini guía. :(
2.- Arrancamos por primera vez el squid con el comando
/usr/local/squid -z
Con este se crean los directorios donde se grabara el cache de los clientes, aquí es donde el hardaware toma importancia, de hacho los fabricantes recomiendo disco SCSI Ultra Wide 2, con las más memoria RAM que se pueda.
3.- Arrancar el Squid
/usr/local/squid/bin/squid
Algo asi aparece:
1999/06/12 19:16:20| Starting Squid Cache version 2.2.DEVEL3 for i586-pc-linux-gnu...
1999/06/12 19:16:20| Process ID 4121
Si así ocurrió ya esta... Si marca algún tipo de acceso denegado es por el usuario y el grupo. Por omisión debería de funcionar con el usuario nobody y con el grupo nogroup Asi es que los directorios deben de pertenecer a ese usuario.
Por ultimo las reglas del NATD debed de quedar asi:
00049 allow ip from 148.202.26.1 to any
00050 fwd 127.0.0.1 tcp from any to any 80
00100 divert 8668 ip from any to any via ed0
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
65000 allow ip from any to any
65535 deny ip from any to any