de 2000 Linux 2.4 NAT COMO
 Rusty Russell, lista de correo [email protected]
 Traducido por Ricardo J. C�rdenes Medina [email protected]
 v1.0.1 Lunes 1 de Mayo 18:38:22 CST 2000, traducci�n del 25
 de Junio

 Este documento describe c�mo hacer el enmascarado (masqueradinq),
 proxy transparente, reenv�o de puertos (port forwarding), y otras for�
 mas de Network Address Translation (Traducci�n de Direcciones de Red)
 con los n�cleos 2.4 de Linux.
 ______________________________________________________________________

 �ndice general


 1. Introducci�n
 2. �D�nde est� el sitio web oficial y la lista?
    2.1 �Qu� es Network Address Translation?
    2.2 Razones para usar NAT

 3. Los dos tipos de NAT
 4. Puesta al d�a r�pida con respecto a los n�cleos 2.0 y 2.2
    4.1 �S�lo quiero enmascarar! �Ayuda!

 5. �Qu� pasa con ipmasqadm?
 6. Controlar qu� cosas pasar por NAT
    6.1 Selecci�n sencilla usando iptables
    6.2 Opciones m�s refinadas de selecci�n de paquetes a toquetear.

 7. C�mo modificar los paquetes
    7.1 Source NAT (Cambio de Origen)
       7.1.1 Enmascaramiento
    7.2 Destination NAT (Cambio de destino)
       7.2.1 Redirecci�n
    7.3 Correspondencias (mappings) en profundidad
       7.3.1 Selecci�n de m�ltiples direcciones de un rango dado
       7.3.2 Crear correspondencias NAT nulas
       7.3.3 Comportamiento NAT est�ndar
       7.3.4 Correspondencia impl�cita del puerto de origen
       7.3.5 Qu� sucede cuando NAT falla
       7.3.6 M�ltiples correspondencias (mappings), solapado y colisiones
       7.3.7 Alterar el destino de conexiones generadas de forma local

 8. Protocolos especiales
 9. Defectos del NAT
 10. Agradecimientos


 ______________________________________________________________________

 1.  Introducci�n

 Bienvenido, gentil lector.

 Est� a punto de sumergirse en el fascinante (y a veces horrendo) mundo
 del NAT (Network Address Translation), y este COMO va a ser su gu�a
 m�s o menos precisa para el n�cleo 2.4 de Linux y posteriores.

 En Linux 2.4, se ha introducido una infrastuctura para trastear con
 los paquetes, llamada �netfilter�. Hay una capa por encima que
 proporciona NAT, completamente reescrita con respecto a anteriores
 n�cleos.



 2.  �D�nde est� el sitio web oficial y la lista?

 Hay tres sitios oficiales:

 �  Gracias a Penguin Computing:
    http://antarctica.penguincomputing.com/~netfilter/.

 �  Gracias a el equipo Samba y a SGI http://www.samba.org/netfilter.

 �  Gracias a Jim Pick http://netfilter.kernelnotes.org.

 La lista oficial de correo de netfilter est� en el servidor de listas
 de Samba: http://lists.samba.org


 2.1.  �Qu� es Network Address Translation?

 Normalmente, los paquetes viajan en una red desde su origen (por
 ejemplo su ordenador) a su destino (como por ejemplo
 www.kernelnotes.org) a trav�s de varios enlaces diferentes: unos 19
 desde donde yo estoy en Australia (esto lo dice Rusty, claro). Ninguno
 de estos enlaces altera realmente el paquete: simplemente lo env�an un
 paso adelante.

 Si uno de estos enlaces hiciera NAT, podr�a alterar el origen o
 destino del paquete seg�n pasa a trav�s suyo. Como puede imaginar,
 �sta no es la funci�n para la que se dise el sistema, y por tanto NAT
 es siempre un tanto enrevesado. Normalmente, el enlace que est�
 haciendo NAT recordar� c�mo juguete� con el paquete, para hacer la
 acci�n inversa con el paquete de respuesta, de manera que todo
 funciona como se esperaba.


 2.2.  Razones para usar NAT

 En un mundo perfecto, no deber�a. Mientras tanto, las razones
 principales son:


    Conexiones con m�dem a Internet
       La mayor�a de los PSI (Proveedor de Servicios de Internet) le
       dan una sola direcci�n IP cuando se conecta con ellos. Puede
       enviar paquetes con cualquier direcci�n que le plazca, pero s�lo
       obtendr� respuestas a los paquetes con esa IP de origen. Si
       desea utilizar varias m�quinas diferentes (como una red casera)
       para conectar a Internet a trav�s de un enlace, necesita NAT.

       Este es, de lejos, el uso m�s com�n de NAT hoy en d�a, conocido
       normalmente como �enmascaramiendo� (masquerading) en el mundo de
       Linux. Yo lo llamo SNAT, porque se cambia la direcci�n de origen
       (source) del primer paquete.


    Varios servidores
       Puede que quiera cambiar el destino de los paquetes que entran
       en su red. Con frecuencia esto se debe (como antes), a que s�lo
       tiene una direcci�n IP, pero desea que la gente sea capaz de
       llegar a las m�quinas detr�s de la que tiene la IP �real�. Si
       reescribe el destino de los paquetes entrantes, podr�
       conseguirlo.

       Una variante com�n de esto es el balanceo de carga, en la cual
       se toma un cierto n�mero de m�quinas, repartiendo los paquetes
       entre ellas. Este tipo de NAT se llam� reenv�o de puerto (port-
       forwarding) en anteriores versiones de Linux.

    Proxy transparente
       Hay veces que desear� simular que cada paquete que pase por su
       m�quina Linux est� destinado a un programa en la propia m�quina.
       Esto se utiliza para hacer proxyes transparentes: un proxy es un
       programa que se pone entre su red y el mundo real, filtrando las
       comunicaciones entre ambos. La parte transparente se debe a que
       su red nunca tendr� por qu� enterarse de que est� comunic�ndose
       con un proxy, a menos, claro, que el proxy no funciones.

       Se puede configurar Squid para que trabaje de esta manera, y a
       esto se le llam� redirecci�n o proxy transparente en anteriores
       versiones de Linux.


 3.  Los dos tipos de NAT


 Yo divido NAT en dos diferentes tipos: Source NAT (SNAT, por origen),
 y Destination NAT (DNAT, por destino).

 Source NAT es cuando alteramos el origen del primer paquete: esto es,
 estamos cambiando el lugar de donde viene la conexi�n. Source NAT
 siempre se hace despu�s del encaminamiento, justo antes de que el
 paquete salga por el cable. El enmascaramiento es una forma
 especializada de SNAT.

 Destination NAT es cuando alteramos la direcci�n de destino del primer
 paquete: esto es, cambiamos la direcci�n a donde se dirige la
 conexi�n.  DNAT siempre se hace antes del encaminamiento, cuando el
 paquete entra por el cable. El port forwarding (reenv�o de puerto), el
 balanceo de carga y el proxy transparente son formas de DNAT.


 4.  Puesta al d�a r�pida con respecto a los n�cleos 2.0 y 2.2

 Lo siento por aquellos que todav�a est�n aturdidos por la transici�n
 desde 2.0 (ipfwadm) a 2.2 (ipchains). Hay buenas y malas noticias.

 Primero, puede seguir usando ipchains o ipfwadm como antes. Para
 hacerlo, necesita cargar los m�dulos del n�cleo �ipchains.o� o
 �ipfwadm.o� que encontrar� en la �ltima distribuci�n de netfilter. Son
 mutuamente exclusivos (est� advertido), y no deber�an combinarse con
 ning�n otro m�dulo de netfilter.

 Una vez haya instalado uno de estos m�dulos puede utilizar ipchains e
 ipfwadm con normalidad, excepto por las siguientes diferencias:


 �  Establecer los tiempos l�mite (timeout) con ipchains -M -S o
    ipfwadm -M -s no hace nada. Como los l�mites de tiempo con la nueva
    infrastructura NAT son m�s grandes, no deber�a haber problema.

 �  Los campos init_seq, delta y previous_delta en la lista ampliada de
    enmascaramiento (verbose masquerade listing) siempre son 0.

 �  Listar los contadores y ponerlos a cero al mismo tiempo �-Z -L� ya
    no funciona: los contadores no se pondr�n a cero.

 Los hackers tambi�n se dar�n cuenta de que:


 �  Ahora puede asociar un programa (bind) a los puertos 61000-65095
    incluso si est� haciendo enmascaramiento. El c�digo de enmascarado
    asum�a que no hab�a nada en este rango, de manera que los programas
    no lo pod�an usar.

 �  El parche (no documentado) de �getsockname�, que pod�an utilizar
    los programas de proxy transparente para averiguar el destino real
    de la conexi�n no funciona.

 �  El parche (no documentado) bind-to-foreign-address (asociado-a-una-
    direcci�n-externa) tampoco est� implementado; se usaba para
    completar la ilusi�n del proxy transparente.


 4.1.  �S�lo quiero enmascarar! �Ayuda!

 Esto es lo que la mayor�a de la gente quiere. Si tengo una conexi�n
 PPP con IP din�mica (si no sabe lo que es, entonces tiene una),
 simplemente querr� decirle a mi m�quina que todos los paquetes que
 vengan de la red interna deber�an aparentar venir de la m�quina que
 tiene el enlace PPP.



      # Cargue el m�dulo NAT (esto carga tambi�n los otros).
      modprobe iptable_nat

      # Agrega (-A) una regla a la tabla NAT (-t nat), despu�s del
      # encaminamiento (POSTROUTING) para todos los paquetes que salgan por
      # ppp0 (-o ppp0) enmascarando la conexi�n (-j MASQUERADE).
      iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

      # Ponga en marcha el reenv�o de IP (IP forwarding)
      echo 1 > /proc/sys/net/ipv4/ip_forward



 F�jese que no est� haciendo filtrado de paquetes: para eso, lea el
 COMO de Filtrado de Paquetes: �Mezclando NAT con Filtrado de
 Paquetes�.


 5.  �Qu� pasa con ipmasqadm?

 Este programa tiene un nicho de usuarios mucho m�s definido, de manera
 que no me he preocupado mucho de darle compatibilidad retroactiva.
 Puede usar �iptables -t nat� para hacer reenv�o de puertos. De manera
 que, por ejemplo, en Linux 2.2 podr�a haber hecho:



      #Linux 2.2
      #Reenv�a los paquetes TCP dirigidos al puerto 8080 de 1.2.3.4 al 80 de
      #192.168.1.1
      ipmasqadm portfw -a -P tcp -L 1.2.3.4 8080 -R 192.168.1.1 80



 Ahora deber�a hacer:



 # Linux 2.4
 # Agrega una regla previa al encaminamiento (-A PREROUTING) a la tabla NAT
 # (-t nat) de manera que los paquetes TCP (-p tcp) que vayan a 1.2.3.4
 # (-d 1.2.3.4), puerto 8080 (--dport 8080) tengan una correspondencia de
 # destino (-j DNAT) con 192.168.1.1, puerto 80 (--to 192.168.1.1:80).
 iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080 \
         -j DNAT --to 192.168.1.1:80



 Si desea que esta regla altere tambi�n las conexiones locales
 (aquellas que se originen en la propia m�quina que hace NAT), puede
 insertar la misma regla en la cadena OUTPUT (que es para los paquetes
 locales de salida):



      # Linux 2.4
      iptables -A OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 8080 \
              -j DNAT --to 192.168.1.1:80



 6.  Controlar qu� cosas pasar por NAT

 Necesita crear reglas NAT que le digan al n�cleo qu� conexiones
 cambiar, y c�mo hacerlo. Para ello, usaremos la muy vers�til
 herramienta iptables, y le diremos que altere la tabla de NAT usando
 la opci�n �-t nat�.

 La tabla de reglas NAT contiene tres listas llamadas �cadenas�: cada
 regla se examina por orden hasta que una coincide. Las tres cadenas se
 llaman PREROUTING (para Destination NAT, seg�n los paquetes entran),
 POSTROUTING (para SOURCE NAT, seg�n los paquetes salen), y OUTPUT
 (para Destination NAT con los paquetes generados en la propia
 m�quina).

 El siguiente diagrama lo ilustrar�a bastante bien si yo tuviese algo
 de talento art�stico:



            _____                                           _____
           /     \                                         /     \
         PREROUTING -->[Decisi�n de   ]----------------->POSTROUTING----->
           \D-NAT/     [Encaminamiento]                    \S-NAT/
                           |                                  ^
                           |                                __|__
                           |                               /     \
                           |                              | OUTPUT|
                           |                               \D-NAT/
                           |                                  ^
                           |                                  |
                           ----------> Proceso Local ----------



 En cada uno de los puntos anteriores, cuando un paquete pasa miramos
 la conexi�n a la que est� asociado. Si es una conexi�n nueva,
 comprobamos la cadena correspondiente en la tabla de NAT para ver qu�
 hacer con ella. La respuesta que obtenemos se aplicar� a cualquier
 paquete posterior de esa conexi�n.
 6.1.  Selecci�n sencilla usando iptables

 iptables toma cierto n�mero de decisiones est�ndar que se listar�n
 ahora. Todas las opciones con doble gui�n pueden ser abreviadas,
 siempre que iptables pueda distinguirlas de otras opciones posibles.
 Si el n�cleo tiene la implementaci�n de iptables como m�dulo,
 necesitar� cargar el m�dulo ip_tables.o antes: �insmod ip_tables�.

 La opci�n m�s importante aqu� es la opci�n de selecci�n de tabla,
 �-t�.  Para todas las operaciones de NAT, querr� usar �-t nat� para la
 tabla NAT.  La segunda m�s importante es �-A� para a�adir una nueva
 regla al final de una cadena (�-A POSTROUTING�), o �-I� para
 insertarla al principio (�-I PREROUTING�).

 Puede especificar el origen (�-s� o �--source�) y el destino (�-d� o
 �--destination�) de los paquetes sobre los que quiere hacer NAT. Estas
 opciones pueden ir seguidas por una IP sencilla (192.168.1.1), un
 nombre (www.kernelnotes.org), o una direcci�n de red (192.168.1.0/24 o
 192.168.1.0/255.255.255.0).

 Puede especificar qu� interfaz de entrada (�-i� o �--in-interface�) o
 de salida (�-o� o �--out-interface�) mirar, pero lo que puede
 especificar depende de en qu� cadena est� poniendo la regla: en
 PREROUTING s�lo puede elegir la interfaz de entrada, y en POSTROUTING
 (y OUTPUT) s�lo la de salida. Si usa la equivocada, iptables le
 avisar� con un mensaje de error.


 6.2.  Opciones m�s refinadas de selecci�n de paquetes a toquetear.

 Dije antes que se puede especificar una direcci�n de origen y destino.
 Si omite la opci�n de origen, entonces ser� cualquier direcci�n de
 origen. Si omite la de destino, ser� cualquier direcci�n de destino.

 Tambi�n puede indicar un protocolo espec�fico (�-p� o �--protocol�),
 como TCP o UDP; s�lo los paquetes de este protocolo coincidir�n con la
 regla.  La raz�n principal para hacer esto es que especificar uno de
 los protocolos tcp o udp permite m�s opciones: espec�ficamente las
 opciones �--source-port� y �--destination-port� (abreviadas �--sport�
 y �--dport�).

 Estas opciones le permiten especificar que s�lo los paquetes con un
 determinado origen y destino coincidir�n con la regla. Esto es �til
 para redireccionar peticiones web (puertos TCP 80 u 8080) y dejar los
 dem�s paquetes tranquilos.

 Estas opciones deben seguir a la �-p� (que tiene el efecto secundario
 de cargar la biblioteca compartida de extensi�n para ese protocolo).
 Puede usar n�meros de puerto, o un nombre de fichero /etc/services.

 Todos los diferentes par�metros por los que se puede seleccionar un
 paquete vienen enumerados con toda clase de dolorosos detalles en la
 p�gina de manual (man iptables).


 7.  C�mo modificar los paquetes

 De manera que ahora sabemos c�mo elegir los paquetes que queremos
 modificar. Para completar nuestra regla, necesitamos decirle al n�cleo
 exactamente qu� queremos que haga con los paquetes.


 7.1.  Source NAT (Cambio de Origen)

 Quiere hacer Source NAT; cambiar la direcci�n de origen de las
 conexiones a algo diferente. Esto se hace en la cadena POSTROUTING,
 justo antes de que sea enviado. Este es un detalle importante, ya que
 significa que cualquier otro servicio de la m�quina Linux
 (encaminamiento, filtrado de paquetes) ver� el paquete sin cambiar.
 Tambi�n significa que se puede utilizar la opci�n �-o� (interfaz de
 salida).

 El Source NAT se especifica indicando �-j SNAT�, y la opci�n �--to-
 source� especifica una direcci�n IP, un rango de direcciones IP, y un
 puerto o rango de puertos opcionales (s�lo con los protocolos UDP y
 TCP).



      ## Cambiar la direcci�n de origen por 1.2.3.4
      # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4

      ## Cambiar la direcci�n de origen a 1.2.3.4, 1.2.3.5 o 1.2.3.6
      # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6

      ## Cambiar la direcci�n de origen por 1.2.3.4, puertos 1-1023
      # iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023



 7.1.1.  Enmascaramiento

 Hay un caso especializado de Source NAT denominado �enmascaramiento�
 (masquerading): s�lo deber�a ser usado para direcciones IP asignadas
 de forma din�mica, tales como las de conexiones por llamada est�ndar
 (para direcciones IP est�ticas, utilize el SNAT descrito
 anteriormente).

 No es necesario escribir la direcci�n de origen de forma expl�cita con
 el enmascaramiento: utilizar� la direcci�n de origen de la interfaz
 por la que el paquete est� saliendo. Pero m�s importante a�n, si el
 enlace cae, las conexiones (que se iban a perder de todas maneras) se
 olvidan, lo que significa que habr� menos foll�n cuando la conexi�n
 vuelva a la normalidad con una IP diferente.



      ## Enmascarar todo lo que salga por ppp0.
      # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE



 7.2.  Destination NAT (Cambio de destino)

 Esto se hace en la cadena PREROUTING, seg�n entra el paquete; esto
 significa que cualquier otro servicio de la m�quina con Linux
 (encaminamiento, filtrado de paquetes) ver� el paquete yendo a su
 destino �real� (el definitivo). Esto significa que se puede utilizar
 la opci�n �-i� (interfaz de entrada).

 Para alterar el destino de un paquete generado de forma local (en la
 m�quina que hace el NAT), se debe usar la cadena OUTPUT, pero esto es
 m�s inusual.

 Destination NAT se especifica utilizando �-j DNAT�, y la opci�n �--to-
 destination� especifica una direcci�n IP, un rango de direcciones IP,
 y un puerto o rango de puertos opcionales (s�lo para los protocolos
 UDP y TCP).
      ## Cambia la direcci�n de destino por 5.6.7.8
      # iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8

      ## Cambia la direcci�n de destino por 5.6.7.8, 5.6.7.9 o 5.6.7.10.
      # iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8-5.6.7.10

      ## Cambia la direcci�n de destino del tr�fico web por 5.6.7.8,
      ## puerto 8080.
      # iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 \
              -j DNAT --to 5.6.7.8:8080

      ## Redirige los paquetes locales que van a 1.2.3.4 hacia el dispositivo
      ## loopback.
      # iptables -t nat -A OUTPUT -d 1.2.3.4 -j DNAT --to 127.0.0.1



 7.2.1.  Redirecci�n

 Hay un caso especializado de Destination NAT llamado redirecci�n: es
 una simple conveniencia que es exactamente lo mismo que hacer DNAT,
 pero con la direcci�n de la interfaz de entrada.



      ## Env�a el tr�fico que entra dirigido al puerto 80 (web) a nuestro
      ## proxy squid (transparente)
      # iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 \
              -j REDIRECT --to-port 3128



 7.3.  Correspondencias (mappings) en profundidad

 Hay algunas sutilezas de NAT con las que la mayor�a de la gente no
 tendr� que enfrentarse nunca. Las he documentado aqu� para los m�s
 curiosos.


 7.3.1.  Selecci�n de m�ltiples direcciones de un rango dado

 Si se da un rango de direcciones IP, la direcci�n a usar se elegir�
 bas�ndose en la menos utilizada para las conexiones de las que sabe
 nuestra m�quina. Esto nos permite hacer un balanceo de carga
 primitivo.


 7.3.2.  Crear correspondencias NAT nulas

 Puede utilizar el objetivo �-j ACCEPT� para dejar que una conexi�n
 pase sin que se produzca ninguna conversi�n NAT.


 7.3.3.  Comportamiento NAT est�ndar

 El comportamiento est�ndar es alterar la conexi�n lo menos posible,
 dentro de los l�mites de la regla dada por el usuario. Esto significa
 que no cambiaremos el puerto a menos que nos veamos obligados.



 7.3.4.  Correspondencia impl�cita del puerto de origen

 Incluso cuando no se pide NAT para una conexi�n, puede ser que haya un
 cambio de puerto de forma impl�cita, si otra conexi�n lo est� usando
 ya.  Consideremos el caso del enmascaramiento, que es lo m�s com�n:


 1. Se establece una conexi�n web entre la m�quina 192.1.1.1, puerto
    1024 y www.netscape.com, puerto 80.

 2. Esta conexi�n es enmascarada por otra m�quina para que utilice su
    direcci�n como origen (1.2.3.4).

 3. La m�quina enmascaradora intenta hacer la conexi�n web con
    www.netscape.com puerto 80, desde 1.2.3.4 (la direcci�n de su
    interfaz interna), puerto 1024.

 4. El c�digo de NAT alterar� la direcci�n de origen de una segunda
    conexi�n al puerto 1025, de manera que no pueda haber solapado.

 Cuando se produce este cambio impl�cito de origen, los puertos se
 dividen en tres clases:

 �  Puertos por debajo del 512.

 �  Puertos entre el 512 y el 1023 (inclusive).

 �  Puertos 1024 y superiores.

 Nunca se har� corresponder un puerto con otro de clase diferente.


 7.3.5.  Qu� sucede cuando NAT falla

 Si no hay manera de hacer corresponder una conexi�n de forma �nica tal
 como ha pedido el usuario, ser� descartada. Esto se aplica tambi�n a
 los paquetes que no pueden ser clasificados como parte de una
 conexi�n, porque est�n malformados, o nos hemos quedado sin memoria,
 etc.


 7.3.6.  M�ltiples correspondencias (mappings), solapado y colisiones

 Podemos tener reglas NAT que asignen paquetes dentro del mismo rango.
 El c�digo NAT es suficientemente inteligente para evitar colisiones.
 Por tanto, tener dos reglas que hagan corresponder las direcciones de
 origen 192.168.1.1 y 192.168.1.2 respectivamente con 1.2.3.4 es
 correcto.

 A�n m�s, se pueden hacer correspondencias sobre direcciones reales y
 en uso, siempre y cu�ndo estas direcciones pasen tambi�n a trav�s de
 nuestra m�quina. De manera que si tenemos una red asignada
 (1.2.3.0/24), pero tenemos una red interna que est� usando esas
 direcciones y otra con Direcciones Privadas de Internet
 192.168.1.0./24, podemos hacer NAT con las direcciones de origen
 192.168.1.0/24 dentro del rango de la red 1.2.3.0, sin temor a
 colisiones:



      # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 \
              -j SNAT --to 1.2.3.0/24



 La misma l�gica se aplica a las direcciones que usa la propia caja que
 hace NAT: �sta es la manera en que funciona el enmascaramiento
 (compartiendo las direcciones de la interfaz entre los paquetes
 enmascarados y los paquetes �reales� que vienen de la propia m�quina).

 A�n m�s, podemos direccionar los mismos paquetes a varios objetivos
 diferentes, y ser�n compartidos. Por ejemplo, si no queremos
 direccionar nada usando 1.2.3.5, podr�amos hacer:



      # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 \
              -j SNAT --to 1.2.3.0-1.2.3.4 --to 1.2.3.6-1.2.3.254



 7.3.7.  Alterar el destino de conexiones generadas de forma local

 Si se cambia el destino de un paquete generado de forma local (esto
 es, usando la cadena OUTPUT), y eso hace que el paquete salte a una
 interfaz diferente, entonces se cambia tambi�n la direcci�n de origen
 a la de esa interfaz. Por ejemplo, cambiar el destino de un paquete de
 loopback para que salga por eth0 tendr� como resultado que tambi�n se
 cambie la direcci�n de origen, 127.0.0.1, por la de eth0. Al contrario
 que con el resto de cambios, esto se hace de forma inmediata.
 Naturalmente, ambos cambios son invertidos cuando llega la respuesta
 del paquete.


 8.  Protocolos especiales

 A algunos protocolos no les gusta pasar por NAT. Se deben escribir dos
 extensiones para cada uno de ellos; uno para el seguimiento de las
 conexiones de ese protocolo, y otro para el propio NAT.

 Junto con la distribuci�n de netfilter, hay m�dulos para el ftp:
 ip_conntrack_ftp.o e ip_nat_ftp.o. Si inserta estos m�dulos en el
 n�cleo (o los compila de forma permanente), entonces podr� hacer NAT
 sobre conexiones FTP. Si no lo hace, entonces s�lo podr� utilizar FTP
 pasivo, e incluso eso no ser� del todo fiable si hace algo m�s que un
 sencillo Source Nat.


 9.  Defectos del NAT

 Si hace NAT sobre una conexi�n, todos los paquetes que pasen en ambas
 direcciones (dentro y fuera de la red) deber�n hacerlo a trav�s de la
 m�quina que hace NAT, ya que si no, no funcionar� de forma fiable. En
 particular, el c�digo de seguimiento de conexiones ensambla los
 fragmentos, lo que significa que no s�lo la conexi�n no ser� fiable,
 sino que los paquetes pueden terminar por no llegar, ya que los
 fragmentos quedar�n retenidos.


 10.  Agradecimientos

 Gracias antes que nada a WatchGuard, y a David Bonn, quien crey� en la
 idea de netfilter lo suficiente para darme soporte mientras trabajaba
 en ello.

 Y al resto del mundo que soport� mis cabreos mientras aprend�a sobre
 los horrores de NAT, especialmente a aquellos que leyeron mi diario.


 Rusty.