29.13. Traducción de direcciones de red

Escrito por Chern Lee.

29.13.1. Overview

El dæmon de FreeBSD que se encarga de traducir direcciones de red, más conocido como natd(8), es un dæmon que acepta paquetes IP, modifica la dirección IP fuente de dichos paquetes y los reinyecta en el flujo de paquetes IP de salida. natd(8) ejecuta este proceso modificando la dirección de origen y el puerto de tal forma que cuando se reciben paquetes de contestación natd(8) es capaz de determinar el destino real y reenviar el paquete a dicho destino.

El uso más común de NAT es para Compartir la Conexión a Internet.

29.13.2. Configuración

Debido al pequeño espacio de direccionamiento que se encuentra actualmente disponible en IPv4 y debido también al gran aumento que se está produciendo en cuanto a número de usuarios de líneas de conexión a Internet de alta velocidad como cable o DSL la gente necesita utilizar cada vez más la salida de Compartición de Conexión a Internet. La característica de poder conectar varios computadores a través de una única conexión y una única dirección IP hacen de natd(8) una elección razonable.

Cada vez con más frecuencia un usuario típico dispone de una máquina conectada mediante cable o DSL pero desearía utilizar dicha máquina como un “ router” de acceso para el resto de los ordenadores de su red de área local.

Para poder hacerlo la máquina (FreeBSD por supuesto) debe configurarse para actuar como pasarela. Debe tener al menos dos tarjetas de red, una para conectarse a la red de área local y la otra para conectarse con el “router” de acceso a Internet. Todas las máquinas de la LAN se conectan entre sí mediante un “hub” o un “ switch”.

Una configuración como esta se utiliza frecuentemente para compartir el acceso a Internet. Una de las máquinas de la LAN está realmente conectada a Internet. El resto de las máquinas acceden a Internet utilizando como “pasarela” la máquina inicial.

29.13.3. Configuración

Se deben añadir las siguientes opciones al fichero de configuración del núcleo:

options IPFIREWALL
options IPDIVERT

Además, según se prefiera, se pueden añadir también las siguientes:

options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE

Lo que viene a continuación se tiene que definir en /etc/rc.conf:

gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="fxp0"
natd_flags=""
gateway_enable="YES" Configura la máquina para que actúe como “router” o pasarela de red. Se puede conseguir lo mismo ejecutando sysctl net.inet.ip.forwarding=1.
firewall_enable="YES" Activa las reglas de cortafuegos que se encuentran definidas por defecto en /etc/rc.firewall y que entran en funcionamiento en el arranque del sistema.
firewall_type="OPEN" Especifica un conjunto de reglas de cortafuegos que permite el acceso a todos los paquetes que se reciban. Consulte /etc/rc.firewall para obtener información sobre el resto de tipos de reglas que se pueden configurar.
natd_interface="fxp0" Indica qué interfaz se utiliza para reenviar paquetes (la interfaz que se conecta a Internet).
natd_flags="" Define cualesquiera otras opciones que se deseen proporcionar a natd(8) en tiempo de arranque.

Si se definen las opciones anteriores, en el arranque del sistema el fichero /etc/rc.conf configurará las variables de tal forma que se ejecutaría natd -interface fxp0. Evidentemente esta orden también se puede ejecutar de forma manual.

Nota: También es posible utilizar un fichero de configuración para natd(8) en caso de que deseemos especificar muchos parámetros de arranque. Tendremos que declarar la ubicación del fichero de configuración mediante la inclusión de lo siguiente en /etc/rc.conf:

natd_flags="-f /etc/natd.conf"

El fichero /etc/natd.conf debe contener una lista de opciones de configuración una opción por línea. Por ejemplo, en el caso que se comenta en la siguiente sección se utilizaría un fichero de configuración con la siguiente información:

redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcp 192.168.0.3:80 80

Para obtener más información sobre el fichero de configuración se puede consultar la opción -f que se describe en la página del manual de natd(8).

Cada máquina (y cada interfaz) que se encuentra conectada a la LAN debe poseer una dirección IP perteneciente al espacio de direcciones IP privado tal y como se define en RFC 1918 y debe poseer como pasarela por defecto la dirección IP de la interfaz interna (la interfaz que se conecta a la LAN) de la máquina que ejecuta natd.

Por ejemplo los clientes A y B se encuentran en la LAN utilizando las direcciones IP Â192.168.0.2 y 192.168.0.3, respectivamente. La máquina que ejecuta natd posee la dirección IP 192.168.0.1 en la interfaz que se conecta a la LAN. El “router” por defecto tanto de A omo de B se establece al valor 192.168.0.1. La interfaz externa de la máquina que ejecuta natd, la interfaz que se conecta con Internet, no necesita de ninguna especial en relación con el tema que estamos tratando en esta sección.

29.13.4. Redirección de puertos

El incoveniente que se presenta con la utilización de natd(8) es que los clientes de la LAN no son accesibles desde Internet. Dichos clientes pueden establecer conexiones con el exterior pero no pueden recibir intentos de conexión desde pueden recibir intentos de conexion desde Internet. Esto supone un gran problema cuando se quieren ejecutar servicios de acceso global en una o varias máquinas de la red LAN. Una forma sencilla de solucionar parcialmente este problemma consiste en redirigir determinados puertos en el servidor natd hacia determinadas máquinas de la LAN.

Supongamos por ejemplo que en A se ejecuta un servidor de IRC y que en B se ejecuta un servidor web. Para que funcione lo que hemos comentado anteriormente se tienen que redirigir las conexiones recibidas en los puertos 6667 (IRC) y 80 (web) a dichas máquinas, respectivamente.

Se debe pasar la opción -redirect_port a natd(8) con los valores apropiados. La sintaxis es como sigue:

  -redirect_port proto IPdestino:PUERTOdestino[-PUERTOdestino]
                 [aliasIP:]aliasPUERTO[-aliasPUERTO]
		 [IPremota[:PUERTOremoto[-PUERTOremoto]]]

Continuando con el ejemplo anterior los valores serían:

    -redirect_port tcp 192.168.0.2:6667 6667
    -redirect_port tcp 192.168.0.3:80 80

Esto redirigirá los puertos tcp adecuados a las máquinas situadas en la LAN.

La opción -redirect_port se puede utilizar para indicar rangos de puertos en vez de puertos individuales. Por ejemplo, tcp 192.168.0.2:2000-3000 2000-3000 redirige todas las conexiones recibidas desde los puertos 2000 al 3000 a los puertos puertos 2000 a 3000 de la máquina A.

Estas opciones se pueden utilizar cuando se ejecute directamente natd(8) se pueden situar en la variable natd_flags="" en /etc/rc.conf y también se pueden pasar mediante un archivo de configuración.

Para obtener más información sobre opciones de configuración por favor consulte natd(8)

29.13.5. Redirección de direcciones

La redirección de direcciones es una característica útil si se dispone de varias direcciones IP pero todas ellas se ubican en una única máquina. Gracias a esto natd(8) puede asignar a cada cliente de la red LAN su propia dirección IP externa. natd(8) reescribe los paquetes que salen de la red LAN con la dirección IP externa adecuada y redirige todo el tráfico recibido de vuelta al cliente en función de la dirección IP de destino: esto se conoce como NAT estático. Por ejemplo las direcciones IP 128.1.1.1, 128.1.1.2 y 128.1.1.3 pertenecen al “ router” natd. 128.1.1.1 se puede utilizar como la dirección IP externa del natd, mientras que 128.1.1.2 y 128.1.1.3 se redirigen a los clientes A y B, respectivamente.

La sintaxis de la opción -redirect_address es la siguiente:

-redirect_address IPlocal IPpública
IPlocal La dirección IP interna del cliente de la LAN.
IPpública La dirección IP externa que se corresponde con un determinado cliente de la LAN.

En nuestro ejemplo esta opción se especificaría de la siguiente forma:

-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3

De forma semejante a la opción -redirect_port estos argumentos se pueden especificar directamente sobre la variable natd_flags="" del fichero /etc/rc.conf o también se pueden pasar vía archivo de configuración de natd. Si se utiliza redirección de direcciones ya no es necesario utilizar redirección de puertos ya que todos los paquetes que se reciben en una determinada dirección IP son redirigidos a la máquina especificada.

Las direcciones IP externas de la máquina que ejecuta natd se deben activar y deben formar parte de un alias configurado sobre la interfaz externa que se conecta a Internet. Consulte rc.conf(5) para aprender a hacerlo.

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.