Este documento tiene por objeto introducir al lector en los principios

Anuncio
NAT
Este documento tiene por objeto introducir al lector en los
principios básicos de la traducción de direcciones de red para
habilitar una conexión a Internet de una red privada a través de un
servidor de red. En sistemas Windows se verá la Conexión
compartida a Internet y el servicio Acceso remoto. En sistemas Linux
se presentará detalladamente el sistema netfilter y su gestión a
través de iptables para NAT.
NAT by Rafael Lozano is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual
3.0 España License.
Información técnica
Nivel de usuario: Avanzado
Escenario: La instalación y configuración de un servidor FTP se ha realizado y probado sobre dos
redes locales virtuales independientes creadas en VirtualBox v4.2. En la primera se ha utilizado
un servidor Windows Server 2012 y un cliente Windows 8 con la siguiente configuración:
Hostname
Máquina
Virtual
SO
Conexiones de Red
Hardware
Red NAT
Dinámica en
172.16.0.0/16
Red Interna
red_windows
Servidores
Puerta de
de Nombres Enlace
Software
adicional
192.168.20.1/24
172.16.0.1
Ninguno
SeWiPr
WS 2012
HD 30GB
RAM 1,5GB
172.16.0.1
SeWiSe
WS 2012
HD 30GB
RAM 1,5GB
192.168.20.10/24 192.168.20.1 192.168.20.1 Ninguno
reservada DHCP
CW
W8
HD 15GB
RAM 1 GB
Dinámica en
192.168.20.0/24
192.168.20.1 192.168.20.1 Ninguno
En la siguiente red se ha empleado un servidor Lubuntu 13.04 y un cliente con el mismo sistema
operativo, según la siguiente configuración
Hostname
Máquina
Virtual
SO
Conexiones de Red
Hardware
Red NAT
Red Interna
red_linux
Servidores
Puerta de
de Nombres Enlace
Software
adicional
172.16.0.1
Ninguno
SeLiPr
Lubuntu
13.04
HD 5GB
Dinámica en
RAM 512MB 172.16.0.0/16
192.168.21.1/24
172.16.0.1
SeLiSe
Lubuntu
13.04
HD 5GB
RAM 256 MB
192.168.21.10/24 192.168.21.1 192.168.21.1 Ninguno
reservada DHCP
CL
Lubuntu
13.04
HD 5GB
RAM 256 MB
Dinámica en
192.168.21.0/24
192.168.21.1 192.168.21.1 Ninguno
Para que los clientes de una red privada puedan acceder a Internet a través de un servidor NAT
es necesario que los servidores DHCP estén configurados correctamente y funcionando para que los
clientes puedan obtener una configuración de red. También, es fundamental que los servidores DNS
estén habilitados como caché DNS, tal y como se vio en el capítulo dedicado a DNS. Así, los clientes
podrán disponer de direccionamiento IP y resolución de nombres.
Conocimientos previos: Es necesario tener conocimientos teóricos y prácticos de la
configuración TCP/IP de una interfaz de red, en plataformas Windows y Linux. Para la parte de
Linux se necesita saber el uso de un editor de texto plano, como nano o vi, además de los
comandos básicos de Unix en gestión de archivos y directorios.
Fecha del documento: Julio 2013
I
Esquema de red: La conexión de red es la siguiente
II
Tabla de contenido
Tabla de contenido
1. Introducción la traducción de direcciones de red.....................................................................1
1.1 Tipos de NAT.................................................................................................................................................3
2. NAT en Windows Server...................................................................................................................4
2.1 Conexión compartida a Internet..............................................................................................................5
2.2 Enrutamiento y acceso remoto................................................................................................................8
2.2.1 Servidor DHCP en Enrutamiento y acceso remoto.........................................................................11
2.2.2 Resolución de nombres en NAT........................................................................................................... 12
2.2.3 Conjunto de direcciones........................................................................................................................ 13
2.2.4 DNAT........................................................................................................................................................... 14
3. Iptables.............................................................................................................................................. 16
3.1 Flujo de paquetes......................................................................................................................................16
3.2 Sintaxis de iptables...................................................................................................................................18
3.2.1 Tablas.......................................................................................................................................................... 18
3.2.2 Comandos................................................................................................................................................. 18
3.2.3 Cadenas...................................................................................................................................................... 19
3.2.4 Reglas.......................................................................................................................................................... 20
3.3 NAT con iptables........................................................................................................................................24
3.3.1 Opciones específicas de iptables para NAT......................................................................................25
3.3.2 Activar el enrutamiento en el kernel................................................................................................... 25
3.3.3 Enmascaramiento IP............................................................................................................................... 26
3.3.4 SNAT............................................................................................................................................................ 26
3.3.5 DNAT........................................................................................................................................................... 27
3.3.6 Redirección................................................................................................................................................ 27
3.4 Script de inicio de servicio.......................................................................................................................28
4. Bibliografía........................................................................................................................................33
Índice I
Rafael Lozano
NAT
NAT
1. Introducción la traducción de direcciones de red
El número de usuarios en hogares y pequeños negocios que quiere usar Internet está en
continuo incremento. Al principio, un usuario se conectaba a Internet mediante una línea teléfonica
básica, lo que significa que estaba conectado durante un período de tiempo específico. Un ISP con un
bloque de direcciones podía asignar dinámicamente una dirección a este usuario. Pero actualmente la
situación es distinta. Los usuarios en hogares y pequeños negocios pueden estar conectados
mediante una línea ADSL o un cable MODEM. Además, muchos no son felices con una dirección;
pueden haber creado redes pequeñas con varios nodos y necesitan una dirección IP para cada uno.
Con la escasez de direcciones, esto representa un serio problema.
Una solución rápida para este problema es la traducción de direcciones de red (NAT). NAT
permite a un usuario tener internamente un gran conjunto de direcciones y una dirección, o un
conjunto de pequeñas direcciones, de cara al exterior. El tráfico interior puede usar el conjunto
grande; el tráfico exterior el conjunto pequeño.
Para separar las direcciones usadas dentro del hogar o el negocio y las usadas para Internet, las
autoridades de Internet han reservado tres rangos de direcciones como direcciones privadas, como
se muestra en la siguiente tabla.
Clase
A
B
C
Dirección inicial
10.0.0.0/8
172.16.0.0/16
192.168.0.0/24
Dirección final
10.255.255.255/8
172.31.255.255/16
192.168.255.255/24
Nº de Hosts
224 = 16777216
216 x 16= 1048576
216 = 65536
Cualquier organización puede usar direcciones de estos conjuntos sin permiso de las
autoridades de Internet. Todo el mundo sabe que estas direcciones reservadas son para redes
privadas. Son únicas dentro de la organización, pero no globalmente. Ningún enrutador reenviará al
exterior un paquete que tiene esta dirección como dirección de destino.
La siguiente figura ilustra una red privada que tiene conexión a Internet a través de un
Página 1
Rafael Lozano
NAT
dispositivo NAT.
Figura 1.- NAT
Como muestra la figura, la red privada usa direcciones privadas. El enrutador que conectará
redes a la dirección global usa una dirección privada y una dirección global. La red privada es
transparente al resto de Internet; el resto de Internet es sólo el enrutador NAT con la dirección
200.24.5.8.
Todos los paquetes de salida pasan a través del enrutador NAT, que sustituye la dirección
origen en el paquete con la dirección global NAT. Todos los paquetes de entrada pasan también a
través del enrutador NAT, que sustituye la dirección destino en el paquete (la dirección global del
enrutador NAT) con la dirección privada apropiada. La figura muestra un ejemplo de traducción de
direcciones.
Figura 2.- Traducción de direcciones
La traducción de la dirección origen para los paquetes que salen es directa. Pero ¿cómo sabe el
enrutador NAT la dirección destino para un paquete que llega de Internet? Puede haber decenas o
cientos de direcciones privadas IP, cada una de las cuales pertenece a uno específico. El problema se
resuelve si el enrutador NAT tiene una tabla de traducción.
Figura 3.- Tabla de traducción
En su forma más sencilla, cuando se tiene una sola dirección IP externa, la tabla de traducción
tiene sólo dos columnas: la dirección privada y la dirección externa (dirección destino del paquete).
Cuando el enrutador traduce la dirección origen del paquete que sale, también toma nota de la
dirección destino, dónde va el paquete. Cuando llega la respuesta del destino, el enrutador usa la
Página 2
Rafael Lozano
NAT
dirección origen del paquete (como la dirección externa) para hallar la dirección privada del paquete.
La figura anterior muestra la idea. Obsérvese que las direcciones que cambian (son traducidas) se
muestran en gris.
Con esa estrategia, la comunicación siempre debe ser iniciada por la red privada. El mecanismo
NAT descrito necesita que la red privada comience la comunicación. Como veremos, NAT se usa
principalmente por los ISP que asignan una única dirección a un cliente. Sin embargo, el cliente puede
ser miembro de una red privada que tiene muchas direcciones privadas. En este caso, la
comunicación con Internet siempre es iniciada desde el lado del cliente, usando un programa cliente
como HTTP o FTP para acceder al correspondiente programa servidor.
1.1 Tipos de NAT
La traducción de direcciones de red es un término que habitualmente se refiere al cambio de la
dirección IP origen de un paquete proveniente de la red privada y que antes de salir a Internet, o a
una red más externa, es cambiada por la dirección IP de la interfaz de red por la que va a ser
expedido.
Sin embargo, podemos encontrarnos con los siguientes tipos de NAT
✔
Enmascaramiento.- En este caso la dirección IP origen de los paquetes de la red privada se
cambia por la dirección IP de la interfaz de red del equipo NAT conectada a Internet o a una
red más externa. Esta dirección IP está asignada dinámicamente.
✔
SNAT o NAT en el origen.- Similar al anterior, pero en este caso la dirección IP del equipo NAT
está asignada estáticamente.
✔
DNAT o NAT en el destino. En este caso lo que se cambia en el paquete es la dirección de
destino en lugar de la de origen. Esta traducción se emplea cuando un servicio que se está
ejecutando en un equipo de la red privada quiere ser puesto a disposición de los usuarios de
Internet.
Para explicar mejor estos conceptos consideremos la siguiente red
Figura 4.- Red con equipo NAT
Disponemos de un servidor NAT que tiene dos tarjetas de red. La primera está conectada a
Internet y tiene dirección IP 217.216.164.166, mientras que la segunda está conectada a la red
privada 192.168.20.0/24. Todos los paquetes de los clientes de la red privada, cuya dirección origen
está en 192.168.20.0/24, serán traducidos cambiando su dirección origen por la dirección IP de la
tarjeta de red del equipo NAT por la que van a salir a Internet, en este caso, 217.216.164.166.
Si esta dirección IP hubiera sido asignada dinámicamente, entonces estaríamos ante
Página 3
Rafael Lozano
NAT
enmascaramiento. Pero si esta dirección IP estuviera asignada estáticamente sería un SNAT.
Para explicar ahora DNAT supongamos que un PC de la red privada está ejecutando el servicio
WWW y quisiéramos que los clientes que están conectados a Internet pudieran acceder a este
servicio a través del equipo NAT. Estos clientes solamente tienen acceso al equipo NAT y para ellos es
como si este equipo fuera el servidor web. Sin embargo, se puede configurar NAT para que todos los
paquetes que le llegan destinados a él (dirección IP 217.216.166.164) y van dirigidos al servidor WWW
(puerto TCP 80) se les cambie la dirección IP de destino por la 192.168.20.5 y posteriormente son
reenviados al servidor web. La respuesta del servidor web será enviada al equipo NAT que volverá a
hacer una traducción (enmascaramiento o SNAT) para posteriormente reexpedirla a su destino en
Internet.
2. NAT en Windows Server
Para configurar una conexión a Internet traducida, se puede usar uno de estos métodos.
✔
Compartir conexión a Internet de Conexiones de red en Windows XP, Windows Server 2003,
Standard Edition o Enterprise Edition.
✔
Protocolo de enrutamiento NAT proporcionado con el servicio Acceso remoto en los
servidores que ejecutan Windows Server.
Tanto Compartir conexión a Internet como el servicio Acceso remoto suministran servicios de
traducción, direccionamiento y resolución de nombres a los PC’s de la red privada.
La característica Compartir conexión a Internet está diseñada para proporcionar una
configuración sencilla y rápida, a fin de suministrar una conexión traducida a Internet para todos los
equipos de la red privada. Sin embargo, una vez habilitada, no permite más configuración que la de
los servicios y puertos de la red privada a los que se puede acceder desde fuera.
El servicio Acceso remoto está diseñado para proporcionar la máxima flexibilidad en la
configuración del servidor para proporcionar una conexión traducida a Internet. Este servicio dispone
de una configuración más compleja, aunque la mayor parte de la misma se puede realizar mediante
un asistente. Admite intervalos de direcciones IP de un ISP y la configuración del intervalo de
direcciones IP asignadas a los PC’s de la red privada.
En la tabla siguiente se resumen las características y capacidades de Compartir conexión a
Internet y del servicio Acceso remoto.
Conexión compartida a Internet
Configuración con una única casilla de verificación
Dirección IP pública única
Intervalo fijo de direcciones para PC’s de la red
privada
Interfaz de red privada única
Traducción de direcciones de red
Configuración manual
Varias direcciones IP públicas
Intervalo configurable de direcciones para PC’s
de la red privada
Varias interfaces de red privada
Además, existe la posibilidad de establecer un filtrado del tráfico que se intercambian la red
privada y la red publica mediante un cortafuegos por filtrado IP.
Página 4
Rafael Lozano
NAT
2.1 Conexión compartida a Internet
Con la característica Conexión compartida a Internet (ICS, Internet Connection Sharing) de
Conexiones de red, se puede conectar la red privada a Internet. Al habilitar ICS en el servidor
conectado a Internet, estamos proporcionando los siguientes servicios a los equipos de la red privada:
✔
Traducción de direcciones de red (NAT).
✔
Asignación de direcciones IP (DHCP) en la red privada 192.168.137.0/24
✔
Resolución de nombres (Proxy DNS).
Si se ha habilitado ICS en una conexión de red,
aparecerá Compartido en el icono de Conexiones de red.
Después de habilitar ICS los usuarios pueden acceder a
Internet como si estuvieran conectados directamente al ISP. El equipo ICS se conecta al ISP y crea la
conexión para que el usuario pueda tener a Internet.
ICS se ha diseñado para su uso en un entorno doméstico o de oficina pequeña en el que la
configuración de la red y la conexión a Internet se administran en el equipo en el que reside la
conexión compartida. Se supone que ese equipo tiene la única conexión a Internet de la red, la única
puerta de enlace a Internet y que ICS configura todas las direcciones de red internas.
ICS requiere dos tarjetas de red para poder funcionar: una conexión pública y una conexión
privada. La conexión privada conecta el equipo ICS a los equipos de la red privada. La conexión
pública, que suele ser un módem ADSL, por cable o de acceso telefónico, conecta la red a Internet.
Al habilitar ICS en la tarjeta de red que conecta a Internet seleccionará automáticamente la
tarjeta de red conectada a la red privada, en el caso de que solamente haya una. Si hay dos o más
conexiones a la red, debe realizar una de las acciones siguientes para habilitar ICS:
1. Seleccionar una conexión de red que será la parte privada de la conexión compartida a
Internet. En este caso solamente los PC’s de la red privada conectada a la conexión de red
seleccionada podrán acceder a Internet a través de la conexión compartida.
2. Si disponemos en nuestro sistema de varias tarjetas de red y queremos habilitar ICS para que
todas las redes privadas conectadas a ellas puedan utilizar la conexión compartida a Internet
deberemos previamente construir un puente de red para incluir todas las conexiones privadas
de la red, de forma que el puente de red actúe como parte privada de la conexión compartida
a Internet. Si se configura el puente de red para incluir todas las conexiones de la red, el
puente de red se selecciona automáticamente como la conexión privada al habilitar ICS.
Al habilitar ICS, el adaptador de red conectado a la red privada recibe una nueva configuración
de dirección IP estática (192.168.137.1). En consecuencia, al habilitar ICS, las conexiones TCP/IP
establecidas entre un equipo de la red privada y el equipo ICS se pierden y deben establecerse de
nuevo.
También, cuando se habilita ICS, ciertos protocolos, servicios, interfaces y rutas se configuran
automáticamente. Una configuración importante es la conversión automática del equipo ICS en un
servidor DHCP para la red privada. DHCP distribuye direcciones IP a los usuarios cuando inician los
equipos.
Página 5
Rafael Lozano
NAT
En la siguiente tabla se describe cada uno de los protocolos, servicios, interfaces y rutas que se
configuran automáticamente al habilitar ICS.
Elemento configurado
Dirección IP
192.168.137.1
Servicio ICS
Asignador DHCP
Proxy DNS
Acción
Se configura con la máscara de subred 255.255.255.0 en el adaptador
de LAN que está conectado a la red privada.
Iniciada
Se habilita con el intervalo predeterminado de 192.168.137.0 y la
máscara de subred 255.255.255.0. Se asignan direcciones únicas en el
intervalo comprendido entre 192.168.137.2 y 192.168.137.254 a los
clientes de la red privada.
Habilitado
Para configurar ICS seguir los siguientes pasos:
1. En el equipo que actuará como NAT abrir Conexiones de red en Redes e Internet del Panel de
Control.
2. Sobre la conexión de red que está conectada a Internet o a la red pública hacer clic con el
botón derecho del ratón y seleccionar la opción Propiedades.
3. Hacer clic en la pestaña Uso compartido.
4. Activar la casilla Permitir que los usuarios de otras redes se conecten a través de la conesión a
Internet de este equipo.
Página 6
Rafael Lozano
NAT
Figura 5.- Habilitar ICS
5. Aparecerá un cuadro de dialogo que nos informa sobre la asignación de la dirección IP
192.168.137.1 a la tarjeta de red conectada a la red privada. Hacer clic en el botón Si.
Figura 6.- Asignación dirección IP a la tarjeta de red privada
A partir de ahora los PC's de la red privada pueden salir a Internet. Si arrancamos el cliente de
Windows y obtenemos las propiedades de red vemos que ha obtenido una dirección IP y demás
parámetros de red del servidor con la conexión compartida a Internet activada, y naturalmente,
puede acceder a Internet a través de éste.
Página 7
Rafael Lozano
NAT
Figura 7.- Configuración de la conexión de red en el cliente
Como se puede apreciar en la figura anterior, el cliente ha obtenido una dirección IP en la
subred 192.168.137.0/24 del servidor DHCP que incluye ICS. La puerta de enlace y el servidor DNS
también son el servidor ICS.
La característica ICS está disponible en todas las versiones de Windows, inclusive aquellas
destinadas a PC's domésticos como Windows 7 y 8.
En versiones server de Windows existe la posibilidad de que esté instalado y en funcionamiento
los servicios DHCP y DNS, que sustituirían a sus homólogos incorporados en ICS. En este caso,
solamente habría que configurar la conexión de red privada del servidor ICS con la dirección IP
adecuada, en lugar de la 192.168.137.1 que automáticamente asigna Windows.
2.2 Enrutamiento y acceso remoto
ICS es una solución para redes pequeñas en las que no hay funcionando un servidor que
incluya los componentes necesarios para dar salida a Internet a los clientes de la red. Sin embargo,
tiene unas limitaciones que impide su aplicación en redes corporativas mayores. En estos casos, es
aconsejable utilizar el servicio de Enrutamiento y acceso remoto.
Este servicio no solo se emplea para realizar traducción de direcciones entre dos redes. Esta es
una de sus múltiples funciones. Además permite a los usuarios remotos acceder de forma segura a
recursos compartidos de la red interna sin necesidad de conectarse a una red privada virtual (VPN).
También incluye un enrutador software para regular el tráfico entre varios segmentos de red y acceso
remoto a los equipos mediante redes privadas virtuales.
Página 8
Rafael Lozano
NAT
En el caso que nos ocupa, se puede configurar una red privada de casa o de la oficina para
compartir una única conexión a Internet. NAT consta de los siguientes componentes:
✔
Componente para la traducción.- El servidor con Enrutamiento y acceso remoto donde NAT
está habilitado traduce las direcciones IP y los números de puerto TCP/UDP de los paquetes
que se envían entre la red privada e Internet.
✔
Componente para el direccionamiento.- El equipo NAT proporciona configuración TCP/IP a los
demás equipos de la red. Si no está instalado un servidor DHCP, puede utilizarse este
componente. El componente de direccionamiento es un servidor DHCP simplificado que
asigna una dirección IP, una máscara de subred, una puerta de enlace y la dirección IP de un
servidor DNS.
✔
Componente para la resolución de nombres.- El equipo NAT se convierte en un servidor DNS
para los demás equipos de la red privada. Cuando el equipo NAT recibe las peticiones de la
resolución de nombres, las reenvía al servidor DNS que tiene configurado y devuelve las
respuestas al equipo de la red privada.
Para la instalación de este servicio hay que seguir los siguientes pasos:
1. Abrir Administrador del servidor.
2. En el Panel hacer clic en Agregar roles y características.
3. En Antes de comenzar hacer clic en el botón Siguiente.
4. En Tipo de instalación activar Instalación basada en características o roles y hacer clic en el botón
Siguiente.
5. En Selección de servidor seleccionar el servidor y hacer clic en el botón Siguiente.
6. En Seleccionar roles de servidor activar Acceso remoto.
7. En el cuadro de diálogo Asistente para agregar roles y características nos informa de las
herramientas necesarias para el servicio que se está instalando y haremos clic en el botón
Agregar características. Posteriormente hacer clic en el botón Siguiente.
8. En Seleccionar características haremos clic en el botón Siguiente.
9. En Acceso remoto nos informa sobre la funcionalidad de este servicio. Hacer clic en el botón
Siguiente.
10. En Seleccionar servicios de rol activar Enrutamiento. Posteriormente hacer clic en el botón
Siguiente.
11. En Confirmar selecciones de instalación haremos clic en el botón Instalar.
12. Cuando acabe la instalación hacer clic en el botón Cerrar.
Cuando termine de instalarse el servicio será necesario configurarlo como NAT. Antes de nada
hay que deshabilitar ICS, en el caso de que estuviera habilitada, ya que ambos componentes ofrecen
el mismo servicio. Tendremos que ir a la pestaña Uso compartido de las propiedades de la conexión
de red externa y desactivar la casilla Permitir que los usuarios de otras redes se conecten a través de la
Página 9
Rafael Lozano
NAT
conesión a Internet de este equipo.
Posteriormente, para configurar el servicio de Enrutamiento y acceso remoto seguiremos los
siguientes pasos:
1. Abrir Enrutamiento y acceso remoto en Herramientas de Administrador del servidor.
2. En el complemento de administración del servicio de enrutamiento y acceso remoto vemos
que el servidor no está configurado y si lo seleccionamos aparece en el panel derecho un
aviso al respecto. Hacemos clic con el botón derecho del ratón y seleccionamos Configurar y
habilitar Enrutamiento y Acceso remoto.
3. En la pantalla de bienvenida hacemos clic en el botón Siguiente.
4. En Configuración debemos elegir la segunda opción Traducción de direcciones de red NAT.
Posteriormente hacemos clic en el botón Siguiente.
5. Ahora debemos elegir la conexión de red por la que los clientes de la red privada se
conectarán a Internet. En este caso es la conexión externa. La seleccionamos y hacemos clic
en el botón Siguiente.
6. Hacer clic en el botón Finalizar.
Figura 8.- Función NAT en la configuración de Enrutamiento y acceso remoto
Página 10
Figura 9.- Conexión de red externa
Rafael Lozano
NAT
Una vez configurado el servicio iremos al cliente y comprobaremos que puede navegar por
Internet.
2.2.1 Servidor DHCP en Enrutamiento y acceso remoto
El componente Enrutamiento y acceso remoto configurado para NAT incluye un sencillo
servidor DHCP para el caso de que la red no disponga de uno y se desee habilitar el direccionamiento
a los clientes de la red privada. De esta forma no será necesario tener que configurar estáticamente
cada uno de estos clientes. Para configurarlo seguir los siguientes pasos:
1. Abrir el complemente Enrutamiento y acceso remoto en Herramientas de Administrador del
servidor.
2. Desplegar el árbol de la consola hasta llegar a NAT en IPv4. Hacer clic con el botón derecho del
ratón y seleccionar la opción Propiedades.
3. Hacer clic la ficha Asignación de direcciones y activar la casilla de verificación Asignar
automáticamente direcciones IP usando el asignador DHCP.
Figura 10.- Servidor DHCP en NAT
4. Para asignar direcciones IP a clientes DHCP en la red privada, en Dirección IP y Máscara,
configurar el intervalo de direcciones IP.
5. Para excluir direcciones de la asignación a clientes DHCP en la red privada, hacer clic en el
botón Excluir .
Página 11
Rafael Lozano
NAT
6. Por cada dirección IP a excluir hacer clic en el botón en Agregar y, a continuación, escribir la
dirección IP.
Deberemos tener presente dos cosas:
✔
No es necesario activar el servidor DHCP si ya tenemos instalado en el servidor el role DHCP.
✔
Si no tenemos instalado el role DHCP en el servidor y activamos el servidor DHCP en NAT,
tendremos que asignar la primera dirección IP de la subred configurada a la conexión de red
que conecta a la red privada.
2.2.2 Resolución de nombres en NAT
Al igual que antes, podemos habilitar la resolución de nombres para los clientes de la red
privada en el caso de que no tengamos ningún servidor DNS en esta red. En realidad, en el
Enrutamiento y acceso remoto no se instala un servidor DNS, sino que todas las consultas procedentes
de la red privada se reenvían al servidor DNS al que está conectado el servidor NAT y este se encarga
de devolver el resultado al cliente que hizo la consulta originalmente.
Para habilitar la resolución de nombres para la traducción de direcciones de red seguir los
siguientes pasos:
1. Abrir el complemente Enrutamiento y acceso remoto en Herramientas de Administrador del
servidor.
2. Desplegar el árbol de la consola hasta llegar a NAT en IPv4. Hacer clic con el botón derecho del
ratón y seleccionar la opción Propiedades.
Página 12
Rafael Lozano
NAT
Figura 11.- Resolución de nombres en NAT
3. Para la resolución de nombres de host en un servidor DNS, en la ficha Resolución de nombres,
activar la casilla de verificación Clientes que usan el Sistema de nombres de dominio (DNS).
Al igual que ocurría con el servidor DHCP, si tenemos instalado el role de servidor DNS no es
necesario activar la resolución de nombres.
2.2.3 Conjunto de direcciones
Supongamos que tenemos conectado nuestro equipo NAT a Internet y nuestro ISP nos ha
asignado varias direcciones IP estáticas. En esta situación podemos configurar este conjunto de
direcciones para que la traducción de la dirección origen en los paquetes que provienen de la red
privada se haga alternativamente sobre estas direcciones públicas.
Para crear un conjunto de direcciones IP estáticas
1. Abrir el complemente Enrutamiento y acceso remoto en Herramientas de Administrador del
servidor.
2. Desplegar el árbol de la consola hasta llegar a NAT en IPv4. Hacer clic con el botón derecho del
ratón sobre la interfaz de red conectada a Internet en el panel derecho y seleccionar la opción
Propiedades.
Página 13
Rafael Lozano
NAT
3. Hacer clic en la ficha Conjunto de direcciones y, después, en el botón Agregar.
Figura 12.- Conjunto de direcciones
4. En Dirección de inicio, escribir una dirección IP inicial y, a continuación, la máscara de red y una
dirección IP final para el intervalo en Dirección final.
5. Hacer clic en el botón Aceptar, y repetir los pasos anteriores para tantos intervalos como se
necesite agregar.
También podemos hacer que los paquetes que provienen de PC's específicos de la red privada
sean traducidos siempre con una dirección IP concreta del intervalo de direcciones. Para ello
hacemos clic en el botón Reservas... y posteriormente hacemos clic en el botón Agregar para incluir un
par dirección IP privada – direccion IP pública.
2.2.4 DNAT
La interfaz de red externa o de Internet tiene habilitado el servidor de seguridad básico para
impedir que los usuarios externos a la organización puedan acceder a servicios y aplicaciones de la
red privada. Sin embargo, existe la posibilidad de que tengamos varios PC’s de nuestra red privada
como servidores de diversos servicios, como un servidor web, ftp, correo electrónico, etc. Esto
significa que los usuarios de Internet deben poder acceder a estos PC’s de la red privada y para ello es
necesario modificar el servidor de seguridad básico para permitir el acceso.
Página 14
Rafael Lozano
NAT
Esto se consigue haciendo un NAT del destino, en el que tenemos que redirigir la dirección IP
del destino de los paquetes que llegan a nuestro servidor y desviarlas a las direcciones IP de cada PC
de la red privada que están prestando estos servicios. Además, también podemos redireccionar
puertos de las solicitudes para enviar estos paquetes a los puertos donde están escuchando las
aplicaciones de estos servicios.
Para configurar servicios y puertos seguir los siguientes pasos:
1. Abrir el complemente Enrutamiento y acceso remoto en Herramientas de Administrador del
servidor.
2. Desplegar el árbol de la consola hasta llegar a NAT en IPv4. Hacer clic con el botón derecho del
ratón sobre la interfaz de red conectada a Internet en el panel derecho y seleccionar la opción
Propiedades.
3. Hacer clic en la ficha Servicios y puertos y realizar una de las acciones siguientes:
a) Si el puerto está asociado a un servicio de red común, examinar la lista incluida en
Servicios y seleccionarlo. Se abrirá el cuadro de diálogo Editar servicio y se tiene que
introducir la dirección IP del PC de la red privada al que se enviará el paquete.
Posteriormente hacer clic en el botón Aceptar.
b) Si el puerto no está asociado a un servicio de red común, o no figura en la lista de Servicios,
hacer clic en el botón Agregar… Introducir una descripción del servicio, el puerto de
entrada, la dirección IP del PC de la red privada que se encarga de atender las solicitudes
para este servicio y el puerto de salida. Posteriormente hacer clic en el botón Aceptar.
Para deshabilitar un puerto que está asociado a un servicio de red común, examinar la lista
incluida en Servicios y desactivar la casilla de verificación correspondiente.
Para deshabilitar un puerto previamente agregado, examinar la lista incluida en Servicios y
desactivar la casilla de verificación correspondiente al servicio que hemos agregado.
Página 15
Rafael Lozano
NAT
Figura 13.- Servicios www redireccionado a 192.168.20.10
Para quitar un puerto previamente agregado, examine la lista incluida en Servicios, seleccione el
servicio que se desea quitar y hacer clic en el botón Eliminar.
3. Iptables
Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular
paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del
procesamiento. El componente más popular construido sobre Netfilter es iptables, una
herramienta de cortafuegos que permite no solamente filtrar paquetes, sino también realizar
traducción de direcciones de red (NAT) para IPv4 o mantener registros de log.
Iptables es el nombre de la herramienta mediante la cual el administrador puede definir
políticas de manipulación de paquetes que circula por la red. Estas políticas se emplean para construir
un cortafuegos por filtrado IP o configurar el NAT. No es un servicio, ni una aplicación. Iptables
manipula los paquetes mediante reglas que residen en el núcleo del sistema operativo.
3.1 Flujo de paquetes
Antes de construir un enrutador NAT es necesario saber y comprender como los paquetes
recorren el sistema. El siguiente gráfico muestran los diferentes caminos que pueden recorrer un
paquete que ha entrado en el sistema por una interfaz de red o se ha generado localmente.
Página 16
Rafael Lozano
NAT
Figura 14.- Flujo de paquetes en un sistema
En el gráfico anterior el sistema tiene dos interfaces de red, eth0 y eth1. El tráfico puede llegar y
salir por ambas, pero para facilitar su compresión el gráfico representa tráfico que llega por eth0 y
sale por eth1. Cuando un paquete llega por eth0 hay dos posibilidades en cuanto a su destino:
1. El paquete está dirigido al propio sistema. Entonces es un paquete de entrada (INPUT) y se
entrega el proceso local al que está destinado.
2. El paquete no tiene como destino el sistema, sino que está transitando hacia otro a través de
éste. El paquete es encaminado (FORWARD) por la interfaz eth1 y sale del sistema.
3. Además, un proceso local puede generar tráfico de salida. En este caso los paquetes
generados localmente son de salida (OUTPUT) y es enviado al exterior a través de la interfaz
eth1.
Los mismo sería aplicable si el tráfico entrará por eth1 y saliera por eth0.
En el diagrama anterior, los cuadros grises representan fases por las que tienen que pasar los
paquetes que transitan por el sistema. Las fases INPUT, OUTPUT Y FORWARD se les conoce como
cadenas o conjuntos de reglas por los que pasan los paquetes y que se emplean para construir un
cortafuegos ya que permiten filtrar los paquetes que transitan por estas cadenas. Los dos primeros
trabajan exclusivamente con paquetes con destino u origen en el servidor local. La cadena FORWARD
se utiliza sólo para paquetes que vayan de una interfaz de red a otra.
Los cuadros PREROUTING y POSTROUTING son cadenas que se emplean para NAT y
enmascaramiento IP que nuestro objetivo principal.
El funcionamiento básico de iptables es muy simple. Con este comando creamos reglas de
filtrado que se asocian a las cadenas. Cada regla tiene dos componentes: criterio de la regla y acción u
objetivo. El primero consiste en un conjunto de condiciones que el paquete tiene que cumplir para
aplicarle el segundo. Estas condiciones generalmente hacen referencia a valores de la cabecera del
paquete. Por ejemplo, que el paquete tenga un protocolo determinado (TCP, UDP, etc), que la
dirección origen o destino sea una específica, que el puerto de origen o destino sean uno concreto,
etc.
Página 17
Rafael Lozano
NAT
Si el paquete cumple la regla se le aplica la acción. Esta puede ser desechar el paquete (caso de
un cortafuegos), cambiar sus direcciones de origen o destino (caso del NAT) y algunas más que
veremos mas adelante.
Cuando un paquete entra en el sistema, irá pasando por las diferentes cadenas y se le aplicarán
las reglas hasta que encuentre una que cumpla con sus condiciones. Entonces se realiza la acción u
objetivo sobre el paquete y no se le aplica ninguna regla más en esa cadena. Pasaría a la siguiente.
3.2 Sintaxis de iptables
La sintaxis de iptables es la siguiente:
iptables [–t tabla] comando cadena especificación_de_regla [opciones]
Esta sintaxis está muy simplificada ya que iptables cuenta con numerosas opciones. Para
comprender como trabaja vamos a ver cada componente por separado.
3.2.1 Tablas
El primer argumento de iptables consiste en indicar la tabla que se va a manipular. La
arquitectura iptables agrupa en tablas las reglas de proceso de paquetes según su función (filtrado
de paquetes, traducción de direcciones de red y otras modificaciones de paquetes). Estas tablas son:
filter
Esta tabla se emplea para el filtrado de paquetes. Establece políticas para los paquetes que
entran en el sistema (INPUT), pasan a través del sistema con dirección a otros (FORWARD) y
salen del sistema (OUTPUT). A menos que hagamos referencia explícitamente a otra tabla,
iptables funcionará por defecto con las cadenas de esta tabla. Sus cadenas integradas son
FORWARD, INPUT y OUTPUT
mangle
Se usa para la alteración especializada de paquetes, como quitarles sus opciones de IP. Sus
cadenas integradas son FORWARD, INPUT, OUTPUT, POSTROUTING y PREROUTING.
nat
Esta tabla se emplea para el enmascaramiento de direcciones de red y la traducción de
direcciones, normalmente basándose en las direcciones de origen y destino. Se verá en el
siguiente apartado.
3.2.2 Comandos
Cada ejecución de la utilidad iptables puede contener un comando, que realiza una
operación en una tabla (y, en algunos casos, una cadena) determinada. Las opciones para especificar
comandos son las siguientes:
­A, ­­append cadena regla
Añade una regla a una cadena.
­D, ­­delete cadena [índice | regla]
Elimina la regla que se encuentra en la posición índice o que cumple la regla de cadena.
­X, ­­delete­chain [cadena]
Página 18
Rafael Lozano
NAT
Elimina la cadena definida por el usuario o todas las cadenas definidas por el usuario si no se
especifica una.
­E, ­­rename­chain cadena nuevacadena
Renombra cadena a nuevacadena.
­F, ­­flush [cadena]
Desecha (elimina) todas las reglas de cadena (o de todas las cadenas, si no se especifica una
cadena).
­I, ­­insert cadena [índice] regla
Inserta regla en cadena, delante de la cadena o delante de la regla, en la posición índice.
­L, ­­list [cadena]
Enumera las reglas de cadena (o de todas las cadenas, si no se especifica una cadena)
­N, ­­new­chain cadena
Crea una nueva cadena definida por el usuario.
­P, ­­policy cadena objetivo
Establece la política predeterminada de la cadena integrada para objetivo (sólo se aplica a
las cadenas integradas y a los objetivos).
­R, ­­replace cadena índice regla
Sustituye a la regla que se encuentra en la posición índice de cadena por la nueva regla.
­V, ­­version
Muestra la versión de iptables.
­Z, ­­zero cadena
Pone a cero los contadores de paquetes y bytes para cadena (o de todas las cadenas, si no se
especifica una cadena).
3.2.3 Cadenas
En la mayoría de los comandos hay que indicar una cadena donde se aplicará la regla. Una
cadena es una lista de reglas agrupadas lógicamente. Cada regla de la cadena contiene una
especificación o criterios que tienen que cumplir la cabecera del paquete IP para que se le aplique la
regla.
Los paquetes atraviesan cadenas, exponiéndose a las reglas de la cadena de uno en uno y en
orden. Si el paquete no cumple los criterios de la regla, continúa hasta la siguiente regla de la cadena.
Si un paquete llega a la última regla de la cadena y todavía no cumple ninguna, se le aplica la política
por defecto de la cadena. La política por defecto de una cadena se usa para determinar el destino de
los paquetes que llegan al final de la cadena sin que se los haya enviado a un destino determinado.
Existen las siguientes cadenas predefinidas para aplicar a los filtros:
✔
INPUT (Cadena de ENTRADA) — Todos los paquetes destinados a este sistema atraviesan esta
cadena.
Página 19
Rafael Lozano
NAT
✔
OUTPUT (Cadena de SALIDA) — Todos los paquetes creados por este sistema atraviesan esta
cadena.
✔
FORWARD (Cadena de REDIRECCIÓN) — Todos los paquetes que pasan por este sistema para
ser encaminados a su destino recorren esta cadena.
Además, existen las dos siguientes cadenas para aplicar al NAT que son:
✔
PREROUTING (Cadena de PREENRUTAMIENTO) — Los paquetes entrantes pasan a través de
esta cadena antes de que se consulte la tabla de encaminamiento local, principalmente para
DNAT (destination-NAT o traducción de direcciones de red de destino)
✔
POSTROUTING (Cadena de POSTENRUTAMIENTO) — Los paquetes salientes pasan por esta
cadena después de haberse tomado la decisión del encaminamiento, principalmente para
SNAT (source-NAT o traducción de direcciones de red de origen)
3.2.4 Reglas
Una regla iptables consta de uno o más criterios, para determinar a qué paquetes de red
afectará, y una especificación de objetivo o acción, que determina cómo afectará a los paquetes de
red. Todas las opciones del criterio de una regla deben cumplirse para que se considere que un
paquete cumple una regla.
El sistema mantiene contadores de paquetes y bytes para cada regla. Cada vez que un paquete
llega a una regla y cumple los criterios de la regla, el contador de paquetes aumenta en uno y el
contador de bytes se incrementa con el tamaño de ese paquete.
Tanto la parte de criterio como la parte del objetivo o acción de la regla son opcionales. Si no
hay un criterio, se considera que todos los paquetes concuerdan. Si no se especifica un objetivo, no se
hace nada con los paquetes (el procesamiento continuará como si la regla no existiera, excepto que
se actualizarán los contadores de paquetes y de bytes).
El orden en el que se ponen las reglas de filtrado es determinante. Normalmente cuando hay
que decidir que se hace con un paquete se va comparando con cada regla del cortafuegos hasta que
se encuentra una cuyo criterio coincide, y se hace lo que dicte el objetivo de esta regla (aceptar o
denegar); después de eso no se continuarán comprobando reglas para ese paquete. Este detalle es
sumamente importante, porque si ponemos reglas muy permisivas entre las primeras del
cortafuegos, puede que las siguientes no se apliquen y no sirvan de nada.
Hay una amplia variedad de criterios disponibles para su uso con iptables, aunque algunas
sólo están disponibles para núcleos con ciertas funciones. Las concordancias genéricas del Protocolo
de Internet (IP) (como de protocolo u origen o dirección de destino) se pueden aplicar a cualquier
paquete.
Además de las criterios genéricos, iptables incluye muchos criterios especializados,
disponibles mediante extensiones que se cargan dinámicamente (usamos la opción iptables ­m o
­­match para indicar a iptables que queremos usar una de estas opciones).
Hay una extensión de criterio para ocuparse de una capa de red debajo de la capa IP La
extensión de criterio mac busca concordancias basándose en las direcciones del Controlador de
acceso a medios (MAC) Ethernet.
Página 20
Rafael Lozano
NAT
Existen muchas opciones para construir el criterio de la regla. Donde se tenga que especificar
una máscara de dirección puede hacerse con /N o con /N.N.N.N. Las direcciones también pueden
ser nombres de hosts. Los puertos pueden ser números o nombres de servicios. También, el símbolo
! puede usarse con varias opciones para invertir el significado.
Las opciones siguientes afectan a criterios del protocolo Ipv4:
­p, ­­protocol [!] protocolo
Indica el protocolo del paquete. Si se antepone ! el protocolo del paquete será distinto al
indicado. Se acepta all para indicar todos los protocolos. Los protocolos válidos son: tcp, udp,
icmp y all
­s, ­­source [!] dirección
Dirección origen. Puede ser un nombre de host, una dirección IP o una dirección de red con
una máscara. Si no se indica la opción –s equivale a utilizar –s 0/0 que se corresponde con
todas las direcciones.
­d, ­­destination [!] dirección
Dirección destino. Iguales criterios que -s.
­i, ­­in­interface [!] nombre
Nombre de la interfaz de entrada por la que el paquete se recibe (solo para cadena INPUT,
PREROUTING y FORWARD). Puede aceptar ! para invertir el sentido. También acepta el sufijo
+ en el nombre de interfaz indicando todas las interfaces que comienzan por ese nombre.
Esta opción se puede referir sólo a la interfaz de entrada, así que no se puede utilizar en la
cadena OUTPUT ni en la POSTROUTING.
­o, ­­out­interface [!] nombre
Nombre de interfaz de salida por la que el paquete va a salir (solo para cadenas OUTPUT,
POSTROUTING y FORWARD). Parecido a -i, pero se aplica sólo a la interfaz de salida y sus
correspondientes cadenas.
Existen opciones para establecer criterios relacionados con el control de acceso al medio MAC
Ethernet. Estas opciones se cargan con la extensión dinámica –m mac y son los siguientes:
­­mac­source [!] direccion
El campo MAC origen de la trama Ethernet coincide con dirección. El formato de la dirección
es XX:XX:XX:XX:XX:XX
Solamente debemos usarlo con reglas de las cadenas PREROUTING, FORWARD o INPUT, y
para paquetes que procedan de interfaces de red Ethernet.
Las siguientes opciones se emplean para establecer criterios del protocolo TCP, por tanto
tienen que ir con la opción –p tcp:
­sport, ­­source­port [!] puerto [:puerto]
Especifica un puerto origen o un rango de ellos (los rangos se especifican utilizando - o : para
separar el principio y el final del rango).También se puede utilizar con la extensión dinámica
multipuerto con la opción –m multipor con la que se pueden enumerar hasta 15 puertos
separados por comas. Los fragmentos de la regla pueden tener el siguiente aspecto:
­p tcp ­sport 0:1023 Página 21
Rafael Lozano
NAT
­m multiport ­p tcp ­sport 25,110
­dport, ­­destination­port [!] puerto [:puerto]
Parecido al-sport, previo, pero especifica el puerto(s) destino.
­­tcp­flags [!] indicadores indicadores­activos
Válido sólo con la opción -p tcp. Esta opción consulta a los indicadores enumerados en el
primer argumento. Los indicadores del segundo argumento deben estar activos y el resto
inactivo. Los indicadores posibles son: SYN, ACK, FIN, RST, URG, PSH, y ALL NONE. Si quiere
examinar los indicadores SYN, ACK, RST y FIN, pero aceptar sólo aquellos con los indicadores
SYN y ACK establecidos (respuesta a una conexión nueva) el fragmento de regla tendría este
aspecto:
­p tcp ­­tcp­flags SYN,ACK,RST,FIN SYN,ACK
[!] ­­syn.
Válido sólo siguiendo a la opción -p tcp. Esto es equivalente a lo siguiente:
­­tcp­flags SYN,RST,ACK SYN
Esta opción puede usarse para crear reglas que bloqueen las conexiones entrantes y
permitan las conexiones salientes.
­­tcp­option [!] numero
Válido si se ha establecido la opción número de TCP
Las siguientes opciones se emplean para el protocolo UDP por lo que deberán ir acompañadas
de la opción –p udp.
­sport, ­­source­port [!] puerto [:puerto]
Especifica un puerto origen o un rango de ellos (los rangos se especifican utilizando - o : para
separar el principio y el final del rango).También se puede utilizar con la opción de
correspondencia multiport (multi-puerto, con la que se pueden enumerar hasta 15 puertos).
­dport, ­­destination­port [!] puerto [:puerto]
Parecido al-sport, previo, pero especifica el puerto(s) destino.
Por último, los siguientes criterios se aplican al protocolo ICMP, por lo que deberán estar
acompañadas de la opción –p icmp.
­­icmp­type [!] tipo | codigo
Concuerda con el tipo ICMP indicado o con el código de tipo ICMP. Existen muchos tipos ICMP
válidos. Para obtener una lista de ellos se puede ejecutar el comando iptables –p icmp --help
Los objetivos o destinos se usan para especificar la acción que se ha de realizar cuando un
paquete cumple los criterios de las reglas y también para especificar las políticas por defecto de la
cadena. Hay cuatro objetivos integrados en iptables y existen módulos de extensión que
proporcionan más.
Para especificar un objetivo hay que indicar su nombre con la opción –j como muestra la
siguiente sintaxis
Página 22
Rafael Lozano
NAT
­j objetivo
Objetivo de la regla (nombre de cadena definido por el usuario o valor especial), si lo hay.
Valores especiales, ACCEPT, DROP, QUEUE o RETURN, terminan la cadena.
El objetivo de una regla puede ser el nombre de una cadena definida por el usuario o uno de
los destinos ya incorporados ACCEPT, DROP, QUEUE, o RETURN (aceptar, descartar, encolar o
retornar, respectivamente). Cuando un destino es el nombre de una cadena definida por el usuario, al
paquete se lo dirige a esa cadena para que sea procesado (tal como ocurre con una llamada a una
subrutina en un lenguaje de programación). Si el paquete consigue atravesar la cadena definida por el
usuario sin que ninguna de las reglas de esa cadena actúe sobre él, el procesamiento del paquete
continúa donde había quedado en la cadena actual. Estos llamados entre cadenas se pueden anidar
hasta cualquier nivel deseado. Existen los siguientes objetivos ya incorporados:
ACCEPT
Este destino hace se acepte el paquete. El significado de esto depende de cuál sea la cadena
que realiza esta acción. De hecho, a un paquete que se acepta en la cadena INPUT se le
permite ser recibido por la terminal (host), a un paquete que se acepta en la cadena OUTPUT
se le permite abandonar el sistema y a un paquete que se lo acepta en la cadena FORWARD
se le permite ser enrutado a través del sistema.
DROP Este objetivo descarta el paquete sin ningún otro tipo de procesamiento. El paquete
simplemente desaparece sin indicación de que fue descartado al ser entregado a la terminal
de envío o a una aplicación. Esto se le refleja al que envía, a menudo, como un
communication timeout (alcance del máximo tiempo de espera en la comunicación), lo que
puede causar confusión (aunque el descarte de paquetes entrantes no deseados se
considera a veces una buena política de seguridad, pues no da ni siquiera el indicio a un
posible atacante de que la terminal existe).
QUEUE
Este destino hace que el paquete sea enviado a una cola en el espacio de usuario. Una
aplicación puede usar la biblioteca libipq, también parte del proyecto netfilter/iptables, para
alterar el paquete. Si no hay ninguna aplicación que lea la cola, este destino es equivalente a
DROP.
RETURN
Hace que el paquete en cuestión deje de circular por la cadena en cuya regla se ejecutó el
destino RETURN. Si dicha cadena es una cadena de usuario, el paquete continuará por la
cadena superior como si nada hubiera pasado. Si por el contrario la cadena es una cadena
principal (por ejemplo la cadena INPUT), al paquete se le aplicará la política por defecto de la
cadena en cuestión (ACCEPT, DROP o similar).
Hay muchos destinos de extensión disponibles. Algunos de los más comunes son:
REJECT
Este destino tiene el mismo efecto que 'DROP', salvo que envía un paquete de error a quien
envió originalmente. Se usa principalmente en las cadenas INPUT y FORWARD de la tabla de
filtrado. El tipo de paquete se puede controlar a través del parámetro '--reject-with'. Un
paquete de rechazo puede indicar explícitamente que la conexión ha sido filtrada (un
paquete ICMP filtrado administrativamente por conexión), aunque la mayoría de los usuarios
prefieren que el paquete indique simplemente que la computadora no acepta ese tipo de
conexión (tal paquete será un paquete tcp-reset para conexiones TCP denegadas, un icmpport-unreachable para sesiones UDP denegadas o un icmp-protocol-unreachable para
Página 23
Rafael Lozano
NAT
paquetes no TCP y no UDP). Si el parámetro '--reject-with' no se especifica, el paquete de
rechazo por defecto es siempre icmp-port-unreachable.
LOG (bitácora) Este destino lleva un log o bitácora del paquete. Puede usarse en cualquier cadena en
cualquier tabla, y muchas veces se usa para depuración (análisis de fallos, como ver la
verificación de qué paquetes están siendo descartados).
ULOG Este destino lleva un log o bitácora del paquete, pero no de la misma manera que el destino
LOG. El destino LOG le envía información al log del núcleo, pero ULOG hace multidifusión de
los paquetes que coinciden esta regla a través de un socket netlink, de manera que
programas del espacio de usuario puedan recibir este paquete conectándose al socket.
Los siguientes objetivos se emplean para NAT:
DNAT
Este destino hace que la dirección (y opcionalmente el puerto) de destino del paquete sean
reescritos para traducción de dirección de red. Mediante la opción '--to-destination' debe
indicarse el destino a usar. Esto es válido solamente en las cadenas OUTPUT y PREROUTING
dentro de la tabla de nat. Esta decisión se recuerda para todos los paquetes futuros que
pertenecen a la misma conexión y las respuestas tendrán su dirección y puerto de origen
cambiados al original (es decir, la inversa de este paquete).
SNAT Este destino hace que la dirección (y opcionalmente el puerto) de origen del paquete sean
reescritos para traducción de dirección de red. Mediante la opción '--to-source' debe indicarse
el origen a usar. Esto es válido solamente en la cadena POSTROUTING dentro de la tabla de
nat y, como DNAT, se recuerda para todos los paquetes que pertenecen a la misma conexión.
MASQUERADE Esta es una forma especial, restringida de SNAT para direcciones IP dinámicas, como las que
proveen la mayoría de los proveedores de servicios de Internet (ISPs) para modems o línea
de abonado digital (DSL). En vez de cambiar la regla de SNAT cada vez que la dirección IP
cambia, se calcula la dirección IP de origen a la cual hacer NAT fijándose en la dirección IP de
la interfaz de salida cuando un paquete coincide con esta regla. Adicionalmente, recuerda
cuales conexiones usan MASQUERADE y si la dirección de la interfaz cambia (por ejemplo, por
reconectarse al ISP), todas las conexiones que hacen NAT a la dirección vieja se olvidan.
REDIRECT
Este destino sólo es válido para la tabla NAT y las cadenas OUTPUT y PREROUTING. Es un
caso especial del DNAT en el que se redirecciona el paquete a la dirección de la interfaz por
la que entró. Su uso principal es para cambiar el puerto de destino.
3.3 NAT con iptables
Linux realiza el NAT utilizando iptables, la cual también se emplea para filtrado de paquetes.
Básicamente, le permite reescribir las cabeceras de los paquetes según pasan por las cadenas. Estas
cabeceras pueden ser escritas según van saliendo del sistema (POSTROUTING) e implica el cambio de
la dirección original del sistema que inicia la conexión por la dirección externa del servidor. Un
servidor en Internet verá entonces una conexión que se origina en el sistema NAT Dado que la
dirección original es la que se cambia, se denomina NAT del origen o SNAT.
Página 24
Rafael Lozano
NAT
Una forma especializada de SNAT, el enmascaramiento de IP, se utiliza comúnmente para
permitir que una red con direcciones IP privadas (direcciones IP no encaminables hacia Internet) sea
capaz de acceder a Internet. Ambos mecanismos hacen lo mismo, y ambos se pueden utilizar con
direcciones IP privadas. Sin embargo, el enmascaramiento de IP está reservado, generalmente, para
direcciones IP dinámicas. Si no sabe qué dirección IP se le ha asignado cuando se conecta a su ISP,
esto es probablemente lo que tiene, así que necesitará emplear enmascaramiento en lugar de SNAT.
El otro tipo de NAT se llama NAT del destino o DNAT. Esta forma de alteración de la dirección se
hace antes del encaminamiento y se usa para tomar una conexión inicial al sistema NAT y redirigirla a
un sistema interno. En algunos círculos, a este mecanismo se le denomina reencaminamiento de
puertos, porque el reencaminamiento generalmente se basa en el puerto inicial de conexión. Esto le
permitiría tener sistemas independientes en su red de confianza capaces de manejar HTTP, FTP,
correo, DNS y demás, pero aparentando que la máquina NAT es la que está haciendo todo el trabajo.
Esta particular forma de alteración de direcciones requiere que disponga de una dirección IP
encaminable. Si tiene que utilizar enmascaramiento de IP entonces no podrá utilizar DNAT.
3.3.1 Opciones específicas de iptables para NAT
Cuando empleamos iptables para hacer NAT debemos emplear una serie de opciones que
nos permitirán alterar las direcciones de origen o destino de los paquetes, en función del tipo de NAT
que estemos haciendo. Para ello iptables contiene una serie de opciones que solamente se
emplean para este propósito y se añaden al comando detrás de la especificación del objetivo. Son las
siguientes:
­­to­source IP[­IP][:port][­port]
Se emplea con el destino –j SNAT y la cadena POSTROUTING. Especifica la dirección IP y
puerto al que se cambia la dirección de origen. Puede especificarse un rango de direcciones
IP de forma que se cambiará la dirección de origen de los paquetes alternativamente con las
direcciones especificadas en el rango. También se puede especificar un rango de puertos
para indicar los que se permiten en las conexiones al exterior.
­­to­destination IP[­IP][:port][­port]
Similar al anterior pero para el destino –j DNAT y la cadena PREROUTING. Especifica la
dirección IP y puerto al que se cambia la dirección de destino. Puede especificarse un rango
de direcciones IP de forma que se cambiará la dirección de origen de los paquetes
alternativamente con las direcciones especificadas en el rango. También se puede especificar
un rango de puertos para indicar los que se permiten en las conexiones al interior.
­­to­ports port[­port]
Se emplea para el destino –j MASQUERADE y la cadena POSTROUTING o con el destino –j
REDIRECT y la cadena PREROUTING o OUTPUT. Especifica el número de puerto al que se
cambia el campo puerto de origen.
3.3.2 Activar el enrutamiento en el kernel
Antes que nada, tenemos que asegurarnos de que el sistema tiene activado el IP forwarding
(reencaminamiento de IP). Para hacerlo, en las distribuciones Debian/Ubuntu, se puede cambiar la
variable net.ipv4.ip_forward en el fichero /etc/sysctl.conf de 0 a 1. También se puede
incluir una línea como la que sigue en su archivo que contiene el script para construir el
enrutamiento con NAT en /etc/init.d:
Página 25
Rafael Lozano
NAT
echo 1 > /proc/sys/net/ipv4/ip forward
Todas estas variantes hacen en el fondo lo mismo: cambiar la variable del kernel
/proc/sys/net/ipv4/ip_forward a 1 para permitir pasar paquetes de una interfaz a otra.
3.3.3 Enmascaramiento IP
Según este esquema los ordenadores de una red privada van a salir a Internet a través del
servidor. Supongamos que tenemos una red privada 192.168.21.0/24 a la cual vamos a dar salida a
Internet a través del servidor que tiene una dirección IP pública dinámica. El comando iptables que
habría que ejecutar sería el siguiente:
iptables ­t nat ­A POSTROUTING –s 192.168.21.0/24 ­j MASQUERADE
Analicemos el comando anterior. Estamos añadiendo una regla a la cadena POSTROUTING en la
tabla NAT. Todo el tráfico cuya dirección origen está en 192.168.21.0/24 será enmascarada su
dirección origen con la dirección IP pública del servidor.
Se podrían haber añadido más condiciones a la regla, pero en este caso solo necesitamos una:
la dirección origen de los paquetes. Tal y como está puesta, tenemos la certeza de que los paquetes
van a entrar por eth1, que es la interfaz de red conectada a la red privada, y saldrán por eth0 que es
la interfaz de red conectada a la red pública.
3.3.4 SNAT
El enmascaramiento IP visto en el apartado anterior es sólo un caso especial de NAT del origen.
Si resulta que disponemos de una dirección IP pública y estática, no es necesario enmascaramiento,
sino traducción de direcciones de la red origen (SNAT). Es más conveniente utilizar SNAT en lugar de
enmascaramiento, siempre que sea posible debido a alguna de las características que trae SNAT.
Supongamos la misma red anterior, pero la interfaz eth1 tiene una dirección IP estática
209.127.112.150. Para realizar el SNAT hay que ejecutar el siguiente comando iptables:
iptables ­t nat ­A POSTROUTING –s 192.168.21.0/24 ­o eth0 ­j SNAT ­­to­
source 209.127.112.150
La línea anterior dice que puede utilizar la tabla NAT ( ­t nat) y añadirse al final de la cadena
POSTROUTING (post-encaminamiento). Va a utilizar la interfaz de salida eth0 (ésta es la interfaz
conectada a Internet) y cambiar la dirección de origen del sistema de procedencia ( ­j SNAT) a la
dirección IP pública 209.127.112.150 ( ­­to­source 209.127.112.150). Nótese que hemos
tenido que añadir la opción ­o eth0, porque si tuvieramos otra tarjeta de red por la que algunos
paquetes pudieran salir se les asignaría una dirección IP que no corresponde a esa tarjeta. Así nos
aseguramos que a los paquetes que se les cambia la dirección de origen tendrán la dirección IP de su
correspondiente tarjeta de red.
Este sencillo ejemplo lleva a cabo exactamente la misma función que el ejemplo de
MASQUERADE anterior, pero se necesita saber la dirección IP, por tanto, esto no funciona con
direcciones IP asignadas dinámicamente.
Para poder continuar con los ejemplos, asumamos que disponemos de seis direcciones IP
utilizables, y queremos usar cuatro de ellas en el NAT El siguiente ejemplo muestra cómo utilizar
iptables para hacer que parezca que los mensajes vienen de una cualquiera de las cuatro
direcciones:
Página 26
Rafael Lozano
NAT
iptables ­t nat ­A POSTROUTING ­o eth0 ­j SNAT ­­to­source 209.127.112.150­209.127.112.153
La diferencia entre este ejemplo y el anterior de esta sección, está en la dirección indicada en
­­to­source. Cada conexión que salga utilizará el siguiente número IP Cuando se llegue al último
número IP, iptables volverá a utilizar las direcciones desde el primer número.
Asumamos también que hay usuarios díscolos en la red, que se han estado conectando a
puertos no estándar de fuera de la misma, presumiblemente para actividades no autorizadas (como
un chat IRC). Queremos permitirles utilizar sólo los puertos estándar del sistema operativo. Podemos
hacer esto también especificando un rango de puertos:
iptables ­t nat ­A POSTROUTING ­p tcp ­o eth0 ­j SNAT –to­source 209.127.112.150:0­1023
Ahora las conexiones TCP de salida destinadas a los puertos 0-1023 pasarán a través del NAT.
Será necesario añadir una regla UDP porque DNS utiliza el puerto 53 de UDP para la mayoría de las
consultas, pero las consultas grandes y las transferencias de zona, utilizarán el puerto TCP 53.
3.3.5 DNAT
Complementando la NAT del origen está la NAT del destino (DNAT). Este trabajo de traducción
funciona al revés. DNAT da la posibilidad de utilizar direcciones públicas para funciones como servidor
FTP, servidor web, servidor de correo, y demás, sin poner en gran riesgo a esos sistemas. Tras un
cortafuegos están mejor protegidos.
Supongamos a modo de ejemplo que un ordenador de la red privada con dirección IP
192.168.21.50 está ejecutando un servidor web y queremos que los usuarios conectados en Internet
accedan a ese servidor web. La regla iptables necesaria sería la siguiente:
iptables ­t nat ­A PREROUTING ­p tcp ­­dport 80 ­i eth0 ­j DNAT ­­to­
destination 192.168.21.50:80
Esta regla iptables hará una NAT de preencaminamiento. Esto permite que el cambio de
dirección de destino se aplique antes de que el paquete llegue a la tabla de encaminamiento del
kernel. Los únicos paquetes que se modifican son los paquetes TCP destinados al puerto 80 (donde
está nuestro servidor http) y que entren por eth0 (la tarjeta conectada a Internet). Nuestra regla de
NAT del destino (DNAT) dice que hay que redirigir todo el tráfico de esta interfaz en el puerto 80 al
puerto 80, asociado a la dirección 192.168.21.50.
3.3.6 Redirección
Hay un caso especial del NAT del destino (DNAT) llamado redirección, en el cual por
conveniencia se cambia la dirección de destino del paquete a la propia dirección de la interfaz por la
que entró. Por ejemplo, supongamos que todas las peticiones al servidor web que tenemos en
nuestro servidor queremos desviarlas del puerto 80 al 3128 que es el puerto en el que opera un
servidor proxy caché Squid. Tendríamos que escribir el siguiente comando
iptables ­t nat ­A PREROUTING ­i eth1 ­p tcp ­­dport 80 ­j REDIRECT ­­to­ports 3128
iptables ­t nat ­A PREROUTING ­i eth1 ­p tcp ­­dport 443 ­j REDIRECT ­­to­port 3128
Página 27
Rafael Lozano
NAT
3.4 Script de inicio de servicio
Activando el enrutamiento y creando las reglas para hacer el NAT conseguimos que los clientes
de una red privada salgan a Internet. No hace falta decir, que esto no es suficiente, ya que los clientes
necesitan tener un servidor DHCP para obtener sus parámetros de red y un servidor DNS para
resolver consultas.
Sin embargo, tanto la activación del enrutamiento como las reglas NAT se mantendrán mientras
el PC que actúa como servidor esté encendido. Si este PC se reinicia, el enrutamiento en el kernel
vuelve a desactivarse ya que el sistema de archivos /proc contiene una imagen del núcleo en
ejecución, y cuando se reinicia se crea otra nueva. Con las reglas iptables ocurre algo parecido ya
que estas también se mantienen en el núcleo.
Por tanto tenemos que buscar un método que permite mantener el enrutamiento y las reglas
NAT cuando el servidor se reinicia. La mejor opción es crear un script de inicio de servicio y guardarlo
en /etc/init.d. Posteriormente tendremos que crear los enlaces simbólicos a este script para que
se ejecute en los niveles de ejecución adecuados. El script que se muestra a continuación cumple los
siguientes requisitos:
1. Permite su ejecución durante el inicio del sistema en los niveles de ejecución 2, 3, 4 y 5
(multiusuario con soporte de red) y se para en los niveles de ejecución 0 (apagado del
sistema), 1 (monousuario sin soporte de red) y 6 (reinicio del sistema).
2. El script tendŕá un estilo LSB (Linux Standard Base)1 con una cabecera la configuración de los
niveles de ejecución. La cabecera puede tener el siguiente aspecto (solo se incluyen los
campos necesarios).
### BEGIN INIT INFO
# Provides: activar_nat
# Default­Start:
2 3 4 5
# Default­Stop:
0 1 6
# Short­Description: Activación del enrutamiento y las reglas NAT
# Description: Este script se emplea para permitir la salida a
#
Internet de los clientes de una red privada
### END INIT INFO
3. Asumimos que este script se ajusta para permitir la salida a Internet de los PCs de la red
interna a través del servidor tal y como se muestra en la figura del esquema de red al principio
de este documento. Nos circunscribimos a la red Linux.
4. Para ilustrar el uso del NAT en el destino, suponemos que en el servidor secundario (SeLiSe)
tiene un servidor web y se desea permitir su acceso desde la red externa.
5. Ya que el script se ejecuta al inicio sin intervención del usuario, consideramos adecuado que
los mensajes de información o error que se produzcan deberían almacenarse en el log del
sistema /var/log/syslog. Para ello se emplearán comandos logger.
El script /etc/init.d/activar_nat es el siguiente:
#!/bin/bash
### BEGIN INIT INFO
1
Para conocer con detalle el formato de la cabecera LSB se puede consultar https://wiki.debian.org/LSBInitScripts.
Página 28
Rafael Lozano
NAT
# Provides: activar_nat
# Default­Start:
2 3 4 5
# Default­Stop:
0 1 6
# Short­Description: Activación del enrutamiento y las reglas NAT
# Description: Este script se emplea para permitir la salida a
#
Internet de los clientes de una red privada
### END INIT INFO
function error() {
echo "Error en la invocación del servicio"
echo "Sintaxis: $0 start|stop|restart|status|force­reload"
}
function muestra_estado() {
echo "Estado del NAT"
ENRUTAMIENTO=$(cat /proc/sys/net/ipv4/ip_forward)
if [ "$ENRUTAMIENTO" = "0" ]; then
echo "El enrutamiento está desactivado"
else
echo "El enrutamiento está activado"
fi
echo "Reglas NAT"
iptables ­t nat ­L
}
function activa_nat() {
# ACTIVAR EL ENRUTAMIENTO ########################################
logger ­s ­t "INFO" "Activando el enrutamiento"
echo 1 > /proc/sys/net/ipv4/ip_forward
logger ­s ­t "INFO" "Enrutamiento activado"
##################################################################
# REGLAS NAT #####################################################
logger ­s ­t "INFO" "Creando la regla NAT"
# Enmascaramiento. La tarjeta eth0 tiene configuración dinámica iptables ­t nat ­A POSTROUTING ­s 192.168.21.0/24 ­j MASQUERADE
# NAT estático. Si la tarjeta de red eth0 tuviera configuración
# estática resultaría habría que utilizar esta regla.
iptables ­t nat ­A POSTROUTING \
­s 192.168.21.0/24 ­j SNAT ­­to­source 172.16.0.6
logger ­s ­t "INFO" "Regla NAT creada"
#NAT en el destino. #Las peticiones WWW desde fuera se redirigen SeLiSe (192.168.21.10)
logger ­s ­t "INFO" "Activando el DNAT para el servicio WWW"
iptables ­t nat ­A PREROUTING \
­i eth0 ­p tcp ­­dport 80 \
­j DNAT ­­to­destination 192.168.21.10:80
Página 29
Rafael Lozano
NAT
logger ­s ­t "INFO" "Servicio WWW con destino a SELISE"
}
function desactiva_nat() {
logger ­s ­t "INFO" "Desactivando el enrutamiento"
echo 0 > /proc/sys/net/ipv4/ip_forward
logger ­s ­t "INFO" "Enrutamiento desactivado"
logger ­s ­t "INFO" "Borrando la regla NAT"
iptables ­t nat ­F
logger ­s ­t "INFO" "Reglas NAT borradas"
}
clear
case "$1" in
start)
# Activamos enrutamiento y NAT
activa_nat
;;
stop)
# Desactivamos el enrutamiento y el NAT
desactiva_nat
;;
restart|force­reload)
# Reinicio del enrutamiento y el NAT
desactiva_nat
activa_nat
;;
status)
# Muestra el estado del enrutamiento
muestra_estado
;;
*)
# Error de sintaxis
error
;;
esac
Como se puede observar un script de inicio de servicio recibe un parámetro start cuando se
inicia en los niveles de ejecución 2, 3, 4 y 5. Por tanto se ejecuta la función activa_nat. Por el
contrario recibe un parámetro stop cuando se entra en los niveles de ejecución 0, 1 y 6, lo cual
provoca que se ejecute la función desactiva_nat.
Debemos añadir permisos de ejecución al script.
chmod a+x /etc/init.d/activar_nat
Por último, creamos los enlaces simbólicos al script anterior.
Página 30
Rafael Lozano
NAT
update­rc.d activar_nat defaults
Página 31
Rafael Lozano
NAT
4. Bibliografía
FOROUZAN, B. A., Transmisión de Datos y redes de comunicaciones – 4ª Edición. 2007 McGraw-Hill, ISBN
978-84-481-5617-6
VATUS, T., DAWSON, T., N. PURDY, G. Linux – Guía para administradores de redes. 2005 Anaya
Multimedia – O'reilly, ISBN 84-415-1868-8
Página 33
Descargar