sábado, 20 de octubre de 2012

Convertir un Linux (Debian) en Router

Very Buenos días/Tardes/Noches:

En esta entrada me voy a ocupar de la configuración de un servidor GNU/Linux para que funcione como un router. Uniremos dos redes diferentes, las unirá está máquina linux, que tendrá 2 (dos) tarjetas de red. 

Lo haremos con la distro Debian 6 Squeeze.

Vamos a presentar el escenario:

por un lado tenemos una red de ordenadores del rango 10.0.2.0/24 ---> La nombraremos como "red1"

y por otro tenemos otra red del tipo 192.168.1.0/24 --> llamada "red2"

Para unir las dos redes usaremos una máquina equipada con un Debian 6. A pelo, sin GUI ni nada. Pura terminal. Esta maquina la llamaremos RouterDebian6. Tendrá dos interfaces de red
  1. eth0 --- > conectada a 10.0.2.0/24  -- IP 10.0.2.30/24
  2. eth1  ---> conectada a 192.168.1.0/24 --> IP 192.168.1.1/24

vamos al tomate:

Una vez logueados en el sistema, tendremos que tener los privilegios suficientes para ejecutar estas tareas. En mi caso, las haré como root.

Primer paso: Activar el enrutamiento en  el sistema. Pondremos el bit de ip_forward a 1.

root@routerdebian6:~# echo "1" > /proc/sys/net/ipv4/ip_forward

Segundo paso: configuraremos las interfaces de red. Para ello editaremos los archivos de configuración.
Lo abrimos con nuestro editor favorito (yo uso nano). Y se queda tal cual. Si lo va usted a hacer, personalice las configuraciones IP en su caso particular.

root@routerdebian6:~# nano /etc/network/interfaces


# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface


allow-hotplug eth0

auto eth0
iface eth0 inet static
        address 10.0.2.254
        netmask 255.255.255.0
        network 10.0.2.0
        broadcast 10.0.2.255
        gateway 10.0.2.1

# Secondary interface eth1


allow-hotplug eth1

auto eth1
iface eth1 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 10.0.2.254

Tercer paso: Iptables. Vamos a hacer NAT  "hacia afuera" y los paquetes de ida y vuelta fluyan correctamente a cada una de las máquinas de la red interna "redtwo".



root@routerdebian6:~# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Si quieremos listar lo que acabamos de hacer:


root@routerdebian6:~# iptables -t nat -n -L

¡Ya está! He instalado un servidor de dhcp y conectado un par de XP y enruta correctamente. Capítulo aparte merecerá que nos fijemos en la seguridad por medio de iptables.

El único inconveniente es que con cada reinicio tendremos que realizar las operaciones otra vez, de manera que si las queremos hacer permanentes os presento dos opciones en forma de scripts en bash.

SCRIPT 1 = Hacer los cambios permanentes

creamos un script. Por ejemplo crearemos en /root/


root@routerdebian6:~# nano /root/iniciarenruta.sh


#!/bin/bash

echo "1" > /proc/sys/net/ipv4/ip_forward


iptables -F

iptables -X
iptables -Z
iptables -t nat -F

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE


exit 0



Entonces le daremos permisos de ejecución.

root@routerdebian6:~# chmod 700 /root/inicioenruta.sh


Ahora modificaremos el archivo /etc/init.d/rc.local, que lo que hace es al final de cada nivel de ejecución carga los scripts que se le indiquen.

root@routerdebian6:~# nano /etc/init.d/rc.local

Y añadiremos la linea siguiente antes del exit 0

/root/inicioenruta.sh

Prueben a reiniciar y ya verán que bien :)


SCRIPT 2:  Programa interactivo que comprueba y activa o desactiva el enrutamiento.

#!/bin/bash

# enrutame.sh // para activar o desactivar enrutamiento en linux
function vacia() {
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
}
function politica()
{
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
}
clear
RUTA="/proc/sys/net/ipv4/ip_forward"
ENR=`cat $RUTA`
if [ $ENR = "1" ];then
        echo "el enrutamiento esta ACTIVADO"
        read -p "desea desactivarlo?(s/n) >> " RESP
        case $RESP in
                s | S ) echo "0" > $RUTA
                if [ `cat $RUTA` = "0" ];then
                        # vaciamos las iptables
                        vacia
                        echo "operación completada"
                        exit 0
                else 
                        echo "operación no realizada. Saliendo"
                        exit 1
                fi
                ;;
                * ) echo "saliendo del programa sin cambios"
                exit 0
                ;;
        esac
else
        echo "el enrutamiento esta DESACTIVADO"
        read -p "desea activarlo? (s/n)" RESQ
        case $RESQ in
                s | S ) echo "1" > $RUTA
                if [ `cat $RUTA` = "1" ];then
                        # activamos las iptables
                        vacia
                        politica
                        iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
                        echo "operacion completada"
                        exit 0
                else
                        echo "operacion fallida. Saliendo."
                        exit 2
                fi
                ;;
                *) echo "saliendo del programa sin cambios"
                exit 0
                ;;
        esac
fi
exit 3

Podrán comprobar el estado del enrutamiento, y modificarlo si lo desean.

Y eso es todo amigos y amigas. Mi intención es que les sirva.
Iré actualizando.

Espero la  siguiente instrucción.

No hay comentarios:

Publicar un comentario