viernes, 30 de enero de 2009

Router en 10 minutos

Para hacer un router en una maquina linux, no es cosa complicada, simplemente necesita 2(dos) inerfaces fisicas de red, los servicios principales, y de acceso a internet en una de las interfaces. Los servicios principales son: DNS (Servicio de Resolucion de Nombre), y iptables (un de los componentes del paquete netfilter), y el servidor DHCP de direcciones IP.
Entonces, desde una de nuestras interfaces, la interface eth0 a la que llamaremos tambien, Interface WAN. Deberemos tener acceso a internet, por ende necesitamos los 4 numero magicos: Numero de IP, Mascara de Subred, Puerta de enlace y Servidor de Nombres.
Desde la interface eth1, a la que llamaremos Interface LAN, podemos declarar un numero de IP que queramos, pero por una cuestion de moral y etica, utilizaremos los numeros reservados para redes internas.
Mi maquina es una Notebook Dell, con una interface ethernet eth0 (o cableada) y una interface wireless eth1 (o inalambrica), pero tiene los mismo nombre que utilizare en este documento: eth0 (LAN) y eth1 (WAN).
Tiene instalada la distribucion Linux Mint (variante de GNU/Debian), por ende utilizare el metodo debian de instalacion de programas o paquetes.
Desde el lado WAN, las configuraciones son recibidas automaticamente cuando me conecto a un Access Point, por ende el unico numero que me es relevante es el numero de DNS (servidor de nombres). Este numero se puede obtener observando el archivo /etc/resolv.conf, con el siguiente comando:
# cat /etc/resolv.conf
Y podran observar que lo tiene declarado como "nameserver aaa.bbb.ccc.ddd".
En el lado LAN, declarare la subred 192.168.0.1, no debera de ser la misma subred que el recibido desde el lado WAN, es decir, que si en la eth1 tengo la subred 192.168.0.xxx declarada, debere de usar la subres 192.168.1.xxx en el lado LAN, para no generar conflictos de rutas.
Los paquetes necesarios para tenes un router completamente fucional, son el servidor de nombres BIND, el Servidor de direcciones IP DHCP3-SERVER, y configurar ambos correctamente.
Para instalar ambos deberan de ejecutar el siguiente comando:
# apt-get install dhcp3-server bind9
Una vez finalizada la instalacion, deberemos modificar los archivos para cargar con nuestras configuraciones personalizadas. Primero deberemos de modificar el servidor de nombres:
# vim /etc/bind/named.conf.options
Modificando las lineas que dicen "forwarders" para que figuren el servidor de nombres que se nos fue entregado de la siguiente manera:
forwarders {
aaa.bbb.ccc.ddd;
};

Deberemos de modificar luego las configuraciones del servicio de DHCP, agregando al archivo la descripcion de nuestra subred.
Al inicio del archivo hay que modificar la opcion del dns, a ser entregado para nuestros clientes, en el cual cambiamos por nuestra IP, ya que nosotros seremos el DNS de nuestros clientes.
# vim /etc/dhcp3/dhcpd.conf
Modificamos la linea en la que dice: "option domain-name-servers", reemplazando la continuacion por nuestro numero de IP del lado LAN
option domain-name-servers 192.168.0.1;
Luego crearemos una subred para nuestros clientes, agregando las siguientes lineas:
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.254;
option routers 192.168.0.1;
}

Una vez finalizado, deberemos reiniciar ambos servidores, para que cambien su configuracion:
# /etc/init.d/bind9 restart;
# /etc/init.d/dhcp3-server restart;

Luego, con dos simples reglas de iptables, el router estara finalizado:
# iptables -I FORWARD -s 192.168.0.0/24 -i eth0 -j ACCEPT;
# iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE;

Deberemos de activar el forwarding de paquetes a nivel del kernel, con el siguiente comando:
# echo "1" > /proc/sys/net/ipv4/ip_forward
A divertirse todos compartiendo internet!!