2 de des. 2009

Configuración de un gateway en Linux mediante IP Masquerading

http://www.elrincondelprogramador.com/default.asp?pag=articulos%2Fleer.asp&id=40



Índice de contenidos



* 1. ¿Qué es un gateway?
* 2. Configuración típica de un gateway en una LAN
* 3. Gateway frente a Proxy
* 4. Configuración, paso 1 de 3: Habilitar el forwarding
* 5. Configuración, paso 2 de 3: Configurar el forwarding
* 6. Configuración, paso 3 de 3: Asegurar el gateway
* 7. Configuración de un cliente Linux para trabajar con nuestro gateway
* 8. Configuración de un cliente Windows para trabajar con nuestro gateway
* 9. Prueba de funcionamiento




1. ¿Qué es un gateway?


Un gateway o puerta de enlace es normalmente un equipo informático configurado para dotar a las máquinas de una red local (LAN) conectadas a él de un acceso hacia una red exterior, generalmente realizando para ello operaciones de traducción de direcciones IP (NAT: Network Address Translation). Esta capacidad de traducción de direcciones permite aplicar una técnica llamada IP Masquerading, usada muy a menudo para dar acceso a Internet a los equipos de una LAN compartiendo una única conexión a Internet, y por tanto, una única dirección IP externa.




2. Configuración típica de un gateway en una LAN


Poniendo un ejemplo que pueda resultar más o menos típico, en una pequeña LAN donde tengamos tres estaciones de trabajo, cada una de ellas configurada con su dirección IP interna (no válida en internet) del estilo 192.168.x.x, podríamos tener un equipo con dos interfaces (uno para la red interna con una dirección del estilo 192.168.x.x y otro (por ejemplo, un módem) con una dirección válida en Internet) y conseguir que todos los equipos de esa LAN con direcciones IP privadas pudiesen conectarse a Internet usando la IP válida del equipo que funcionaría como gateway.

Podemos ver este ejemplo plasmado en la siguiente figura:




Esta técnica se denomina IP Masquerading (Enmascaramiento de IPs). Su funcionamiento básico, simplificado, podemos verlo en el siguiente diagrama, en el que se ejemplifica una transmisión desde A (una máquina de la red privada) hacia Z (una máquina en Internet), siendo G el gateway de la red:







3. Gateway frente a Proxy


Hasta ahora hemos visto la funcionalidad de un gateway y la utilidad que nos puede dar como punto de acceso a una red externa como Internet.

Sin embargo, muy a menudo habremos oído hablar de otro tipo de software que aparentemente nos ofrece la misma funcionalidad: los proxies.

Resulta importante aclarar que gateway y proxy no son lo mismo. Sin entrar en disquisiciones técnicas complicadas, podríamos esquematizas las diferencias más importantes de la siguientes manera:


Característica PROXY GATEWAY
Peticiones hacia el exterior Los clientes realizan las peticiones de conexión con la red externa al proxy (tanto a nivel de red como de transporte). Los clientes realizan las peticiones directamente al exterior a nivel transporte, pero a nivel de red se las entrega al gateway (lo utilizan como salto en la transmisión).
Protocolos El proxy debe entender el protocolo de nivel de aplicación al que pertenecen las peticiones (p.ej: HTTP) y puede hacer caché de los resultados obtenidos para cada petición (haciendo la navegación más rápida). Al gateway no le interesa el protocolo al que pertenecen las peticiones, ni intenta interpretarlas. Simplemente las reenvía hacia su destino.
Seguridad El proxy permite un mayor nivel de seguridad, ya que aísla más eficientemente (hasta el nivel de aplicación) la red interna de la externa. El gateway ofrece un menor nivel de seguridad, ya que el aislamiento entre redes no es tan grande, y resulta aconsejable acompañarlo de un firewall correctamente configurado para evitar problemas de seguridad.



Funcionalemente, la más directa diferencia entre proxy y gateway viene dada por lo que se puede ver en la característica protocolos de la tabla: el hecho de que el proxy necesite entender el protocolo de nivel de aplicación de las peticiones que pasen por él provoca que necesitemos obligatoriamente tener un proxy preparado para todos los protocolos que deseemos usar desde nuestros equipos de la red interna.

Desgraciadamente, la gran parte de los proxies disponibles hoy en día se centran en realizar caché de peticiones HTTP y HTTPS (así como las de resolución de nombres DNS). Con uno de estos proxies, no podremos usar desde nuestros clientes, por ejemplo, un lector de correo estilo Outlook, Eudora o Evolution (ya que usan los protocolos SMTP y POP3) para leer nuestro correo. Sin embargo, sí podremos hacer esto con un gateway (aunque puedan existir ciertos protocolos que necesiten módulos especiales para trabajar a través de un gateway, por ejemplo los que usan cierto juegos).




4. Configuración, paso 1 de 3: Habilitar el forwarding


El primer paso para configurar nuestro equipo Linux como gateway es habilitar la capacidad de forwarding (reenvío) de paquetes TCP/IP en la configuración de red de nuestro equipo.

Para hacer esto, tendremos que darle el valor 1 a la variable del sistema net.ipv4.ip_forward, añadiendo (o modificando, si ya existe) una línea como la siguiente en nuestro fichero /etc/sysctl.conf:



net.ipv4.ip_forward = 1



Tras lo cual tendremos que volver a inicializar la configuración de red de nuestro equipo, ejecutando el script de arranque adecuado en /etc/init.d. Por ejemplo, en Red Hat Linux haríamos:



$ service network restart



Podremos comprobar que el forwarding está activado con:



$ cat /proc/sys/net/ipv4/ip_forward



Si el contenido de este fichero virtual es 1, el forwarding está activado.




5. Configuración, paso 2 de 3: Configurar el forwarding


Una vez que hemos habilitado en nuestro equipo la característica de forwarding, debemos configurar nuestro sistema de filtrado de red (Netfilter) para que lo realice de manera efectiva.

Haremos esto mediante la herramienta iptables (para más información sobre cómo usar y configurar iptables, ver Configuración de un firewall en Linux con iptables), modificando el chain POSTROUTING de la tabla nat con la siguiente orden:



$ /sbin/iptables -t nat -A POSTROUTING -o [INTERFAZ_INTERNET] -j MASQUERADE



Donde [INTERFAZ_INTERNET] podría ser ppp0 si nos conectamos a través de un módem telefónico, eth1 si lo hacemos por el segundo interfaz ethernet... Esta regla indica a NetFilter que debe hacer IP Masquerading con los paquetes de los que haga forward hacia internet, esto es, que realice sobre ellos los cambios de IP adecuados.




6. Configuración, paso 3 de 3: Asegurar el gateway


Para que la configuración de forwarding que acabamos de realizar no se convierta en un potencial agujero de seguridad para nuestra máquina, resulta conveniente asegurar mediante reglas de nuestro firewall dicho forwarding.

Usando iptables para ello, como hicimos en el apartado anterior, para tener un nivel de seguridad mínimo sería suficiente con evitar que se puedan realizar conexiones desde el exterior a través de nuestro sistema de reenvío. Podríamos usar para esto las siguientes órdenes:



$ /sbin/iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$ /sbin/iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
$ /sbin/iptables -A FORWARD -j DROP



Siendo en este caso ppp0 nuestro interfaz de salida a Internet y eth0 nuestro interfaz ethernet de la red interna.
Es aconsejable leer la documentación de iptables previamente a la realización de este paso.




7. Configuración de un cliente Linux para trabajar con nuestro gateway


Para que una máquina de nuestra red interna, usando Linux, pueda conectarse al exterior mediante el gateway que acabamos de preparar, tendremos que configurar nuestro interfaz de red para que reconozca la dirección IP interna de nuestro gateway (en el ejemplo será 192.168.0.10) como puerta de enlace por defecto.

El lugar o fichero donde configurar esto difiere según la distribución Linux que estemos usando. En muchas distribuciones existen herramientas gráficas de administración para llevar a cabo estas tareas, y en otras tendremos que realizar dicho cambio en un fichero de configuración.

Como ejemplo, veamos los pasos a dar en dos distribuciones: Red Hat y Debian.

Red Hat

En Red Hat, podremos configurar la puerta de enlace de nuestro interfaz de red de tres maneras: La primera sería añadiendo las siguientes línea al fichero /etc/sysconfig/network:



GATEWAY='192.168.0.10'
GATEWAYDEV='eth0'



Una vez hecho esto, será necesario reiniciar los servicios de red como ya se ha explicado anteriormente (service network restart).
Hay que tener en cuenta que entre las últimas versiones de Red Hat (7.2, 7.3 y 8.0) se han producido cambios en la estructura de los ficheros de configuración de red, de modo que si esto no funciona es preferible buscar en el manual del sistema la forma que tiene nuestra versión concreta de Red Hat de configurar esto.

La segunda manera sería usar el apartado Network Configuration de la herramienta de administración en modo texto de Red Hat en /usr/sbin/setup.

Y por último también podremos usar, ahorrándonos problemas, la herramienta gráfica neat (que aparece en el menú Sistema como Network Configuration), mucho más cómoda. En ella, pulsaremos Modificar sobre nuestro interfaz de red interna (normalmente eth0) e introduciremos la dirección IP del gateway como Dirección de la Puerta de enlace predeterminada, como se puede ver a continuación:




Debian

Para configurar la puerta de enlace por defecto en Debian, tendremos que acudir al fichero /etc/network/interfaces, donde cada interfaz de red tiene una entrada con varios parámetros de configuración, y añadir el parámetro gateway de manera que la entrada de nuestro interfaz de red interna podría quedar algo similar a:



iface eth0 inet static
address 192.168.0.16
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.10



Y después reiniciar los servicios de red con el script de /etc/init.d adecuado.




8. Configuración de un cliente Windows para trabajar con nuestro gateway


Si el equipo de la red interna que deseamos que tenga acceso a Internet usa Windows, tendremos que configurar nuestro interfaz de red para que conozca la dirección IP de nuestro gateway como puerta de enlace predeterminada.

Esta operación dependerá un poco de la versión de Windows que usemos. Veamos cómo hacerlo para Windows 9x/Me y para Windows XP:

Windows 9x/ME

Para establecer la puerta de enlace por defecto en Windows 9x o Millenium, debemos dirigirnos a Panel de Control -> Red y pulsar Propiedades seleccionando el interfaz TCP/IP correspondiente a nuestra tarjeta de red.
Una vez obtengamos la ventana de propiedades, pulsaremos sobre la lengüeta Puerta de Enlace y añadiremos la dirección IP de nuestro gateway:




Windows XP

En Windows XP, esta operación es ligeramente diferente. Para configurar la puerta de enlace, debemos dirigirnos a Panel de Control -> Conexiones de Red y hacer click con el botón derecho sobre la conexión de red de la LAN. Del menú desplegable elegiremos Propiedades y seleccionaremos Protocolo Internet (TCP/IP), pulsando de nuevo Propiedades.
En la ventana de propiedades que obtendremos, podremos introducir la dirección IP de nuestro gateway en el apartado Puerta de Enlace predeterminada:






9. Prueba de funcionamiento


Una vez relizada toda la configuración del gateway, podremos probar su funcionamiento desde cualquiera de las máquinas de la red interna.

Sin embargo, antes de intentar navegar por Internet desde alguna de las máquinas de la LAN para comprobar si el gateway funciona, es más aconsejable probar con un simple ping hacia una máquina cualquiera de Internet (por ejemplo, www.google.com):



$ ping [MAQUINA EXTERNA]



Si dicho ping funciona correctamente (la máquina a la que lo hacemos responde a nuestros paquetes), el gateway estará en funcionamiento.

De esta manera nos ahorraremos hipotéticos problemas con navegadores mal configurados, etc...