Configuración de NAT Cisco y Linux
En este artículo, exploraremos la configuración de SNAT (Source Network Address Translation) y DNAT (Destination Network Address Translation) en escenarios con direcciones públicas, haciendo uso de routers en entornos Linux y dispositivos Cisco.
Escenario con maquinas debian
Preparación del entorno
Instalación de paquetes
Una vez colocadas las maquinas deberemos de descargarnos apache para los servidores web , para realizar esto conectaremos ambos servidores a un switch y este a la nube NAT para disponer de acceso a internet .
Ahora actualizaremos los repositorios haciendo un apt update :
A continuación ya podremos descargar los paquetes , para los servidores instalaremos apache :
Y para el router de casa descargaremos el servidor DHCP :
Al acabar la instalación saltara un código de error similar a este , esto es debido a que no hay una configuración valida en el servicio :
Por ahora ignoraremos esto y posteriormente configuraremos el servidor DHCP .
Con esto habríamos instalado todos los paquetes necesarios para instalar la practica así que podemos montar el escenario .
Configuración de las tarjetas de red
Nos encontraremos con un pequeño obstáculo a la hora de hacer el escenario ya que necesitamos que algunos routers tengan mas de una tarjeta de red .
Para añadir mas de una tarjeta con el dispositivo apagado y sin estar conectado a nadie , hacemos sobre el clic derecho y pulsamos sobre configure > network , y seleccionamos el numero de adaptadores que necesitamos tener en cada uno , por ejemplo para el router de casa necesito tener dos adaptadores :
Una vez hecho esto con las maquinas que necesitan mas de una tarjeta , montaremos el escenario y procederemos a configurar sus tarjetas .
Para modificar la configuración de las tarjetas de red lo haremos editando el fichero /etc/network/interfaces .Para que se aplique la configuración de las tarjetas de red que hemos realizado tenemos varias opciones .
Subir y bajar la tarjeta que hemos modificado :
También podemos ahorrar tiempo y reiniciar el servicio de networking , esto funcionara para todas las tarjetas simultáneamente así que nos ahorrara tiempo :
Router CASA:
Router R1:
Router ISP:
Router R2:
Así seria la relación de ips que tienen las tarjetas de red de los routers . Para aplicar esta configuración a las tarjetas de red tendremos que reiniciar la misma como indico al principio de este apartado .
Para que el escenario funcione debemos activar el bit de forwarding para estos 4 routers , en este caso lo haré de forma permanente para ello editamos el fichero /etc/sysctl.conf y descomentamos esta linea :
Rutas necesarias
Para mi esquema actual las rutas que necesitamos en los routers son :
Router R1:
Router ISP:
Router R2:
Router CASA:
Comprobación de conectividad
Vamos a hacer ping desde cada uno de los routers a su extremos “mas lejanos” para asegurarnos de que hemos realizado correctamente el enrutamiento .
Router R1 –> R2
Router R1 –> CASA
Router R2 –> R1
Router R2 –> CASA
Router CASA –> R1
Router CASA –> R2
Vemos que todos los dispositivos que tiene direcciónes ips publicas tienen conectividad entre si pero que pasa con los que tienen direcciónamiento privado en nuestro escenario , estos no tendrán conectividad ya que no se enrutan direcciónes privadas en los routers de internet .
Es decir si lanzamos un ping hacia una dirección privada que sea de otra red , por ejemplo del servidor1 al servidor2 este no llegara , ya que en las tablas de enrutamiento del router del ISP no existen rutas para direcciónes privadas .
Por lo que sera imposible alcanzar una red privada diferente a la que pertenezcamos .
Por ejemplo desde casa si le hacemos ping a google se lo hacemos a la dirección PUBLICA 8..8.8.8 no a la dirección privada que tiene el servidor , puede ser la 172.22.1.15
Configuración del servicio DHCP en router CASA
Retomando lo que habíamos hecho anteriormente en el apartado de instalación de paquetes ya hemos descargado el servidor DHCP para debian (isc-dhcp-server). Así que ahora vamos a configurarlo .
Lo primero que necesitamos hacer es decirle a nuestro servidor a través de que tarjeta de red queremos que este reparta direcciónes ip , en nuestro caso es la tarjeta ens5 .
Para ello editaremos el fichero /etc/default/isc-dhcp-server y añadiremos el nombre de la tarjeta en la sección de IPV4 :
Ahora vamos a indicarle a nuestro servidor DHCP que configuración queremos que le asigne a nuestros clientes para ello editamos el fichero /etc/dhcp/dhcpd.conf , podemos aprovechar uno de los ejemplos que vienen comentados y aplicar nuestra configuración :
Este es un ejemplo muy sencillo de un servidor dhcp pero con esto es suficiente para nuestro escenario .
Los campos significan :
- subnet : dirección de red de la cual queremos repartir direcciónes ip con este servicio .
- netmask : Mascara de red de la red la cual queremos configurar los dispositivos.
- range: Rango de direcciónes de la cual queremos repartir ips siendo la primera la inicial y la ultima la final .
- option routers: Seria la puerta de enlace de nuestra red
- option broadcast-address : dirección de broadcast de nuestra red .
Una vez configurado con los parámetros de nuestra red reiniciaremos el servicio :
Y comprobaremos que el servicio esta activo :
Ahora para que los clientes puedan recibir una dirección utilizando este servicio deberemos de configurar las tarjetas de red de PC1 y PC2 de la siguiente manera :
Reiniciamos el servicio para que esta se aplique y el servidor nos asigne automáticamente la configuración de red :
Comprobamos que efectivamente nos ha asignado la configuración de la red :
También podemos hacer un seguimiento de a quien le hemos asignado la ip través del servidor viendo el siguiente archivo /var/lib/dhcp/dhcpd.leases el cual guarda las concesiones que hemos realizado .
Podemos ver cuando empieza así como a quien se le ha asignado viendo su dirección MAC.
Configuración de NAT
Router CASA
Vamos a configurar el SNAT en el router de casa viendo el esquema actual la regla para hacer esto es :
Sin embargo así se eliminaría cuando reiniciase la maquina así que en este caso voy a añadirla al /etc/network/interfaces :
Así podemos ver que se han aplicado después de reiniciar el servicio networking :
Vamos a comprobar que funciona la regla viendo si lanzo un ping a otra red (R1) si este cambia mi dirección IP :
Vemos que haciendo la captura este me ha cambiado la dirección privada de la maquina por la publica del router de casa por lo que la regla de SNAT estaría funcionando correctamente .
Router R2
Vamos a configurar SNAT y DNAT para ello añadiré las reglas al /etc/network/interfaces :
Reiniciamos el servicio networking y vemos si se ha aplicado :
Comprobaremos que funciona el SNAT haciendo ping del servidor hacia fuera a una dirección publica :
Vemos que esta funcionando correctamente la regla de SNAT :
Ya que nos ha cambiado la dirección ip privada por la publica correspondiente al router . En los apartados posteriores probare el DNAT .
Router R1
Para este router vamos a realizar la creación de las reglas de una forma diferente , para ella crearemos un servicio que se encargue de levantar las reglas de DNAT y SNAT cuando la maquina se reinicie para evitar añadirlas al fichero interfaces .
Las reglas de DNAT y SNAT para esta maquina son :
Lo primero que tendremos que hacer sera crear un script con nuestras reglas , así que las volcare con el comando iptables-save > /etc/iptables/rules.v4 para volcar las reglas existentes .
Ahora crearemos un script en en el cual restauraremos las reglas que hemos volcado y lo crearemos en la siguiente ruta /usr/local/bin/ :
Nos tendremos que asegurar que tiene permisos de ejecución :
Crearemos un archivo de servicio de Systemd , este archivo debe tener permisos de lectura y escritura solo para root, por lo que se debe ejecutar el siguiente comando como root:
Dentro de este añadiremos el siguiente contenido , solo tendrías que añadir la ruta donde se encuentre tu script de iptables que restaura las reglas :
Le diremos al servicio que se inicie automáticamente al reiniciar la maquina :
Y lo iniciamos :
Si queremos asegurarnos de que ha realizado su cometido correctamente miraremos el estado del servicio :
Veremos que las reglas se han añadido automáticamente :
Comprobaremos que nos ha realizado el SNAT correctamente lanzando un ping :
Vemos que nos ha cambiado la dirección ip privada por la publica .
Comprobación de navegación y DNAT
Ahora vamos a comprobar que desde la red de casa podemos acceder a los servidores web .
Cliente Debian
Desde el cliente debian podemos hacer un curl para comprobar el correcto funcionamiento del DNAT en el Router R1:
Desde el cliente debian podemos hacer un curl para comprobar el correcto funcionamiento del DNAT en el Router R2:
Ahora vamos a comprobar que pasa si ponemos la dirección privada de los distintos servidores web :
Vemos que no podemos llegar a esa red ya que los routers de internet son incapaces de encaminarnos hacia esta red privada ya que puede haber miles de dispositivos con la misma ip :
Tampoco recibiríamos respuesta si hiciésemos una petición web .
Si interceptamos una petición http vemos que el SNAT se realiza correctamente , cambiando la ip privada del solicitante por la publica de su router :
Ahora voy a interceptar una petición en la que se haga DNAT para comprobar que este se realiza correctamente :
Podemos ver que el origen es una dirección ip publica mientras que el destino es una dirección ip privada podemos ver que el DNAT se ha realizado correctamente .
Ahora voy a pinchar un Firefox y volveré a comprobar que podemos acceder a los servidores web solo usando su dirección ip publica :
Server 1 :
Server 2:
Vemos que usando dirección ip publica podemos conectarnos , sin embargo no podremos usando las direcciónes ips privada de las maquinas :
Server 1 :
Server 2 :
Funciona correctamente ya que hemos conseguido que nuestros routers Linux sean capaces de hacer SNAT y DNAT pudiendo hacer que estos “utilicen” internet y puedan acceder a los recursos de otras redes . Ya que las direcciónes privadas no se enrutan en los mismos así que si comprobamos usando estas no obtendremos ningún resultado .
Depuración NAT
Para ver cuantos hits ha tenido una regla o para ver cuanta información ha “utilizado” cada regla utilizaremos el siguiente comando :
Para borrar los contadores de todas las cadenas y reglas usaremos iptables -Z :
Si nuestra cadena tiene hits la regla estará funcionando correctamente si por el contrario esta se mantiene en 0 , la regla no se esta aplicando así que tendremos que revisarla .
Escenario con routers Cisco
Volveremos a repetir el mismo escenario que con los routers Linux pero ahora usando routers cisco 7200.
Preparación del entorno
Configuración de las tarjetas de red
Lo primeros que haremos sera añadirle los slots necesarios a nuestros routers ya que necesitamos 2 tarjetas de red en R1,R2 y CASA . Edemas de 3 para el router ISP .
Para los primeros le añadiremos el slot PA-FE-TX , que nos añadirá una interfaz FastEthernet:
Mientras que para el router del ISP le añadiremos PA-2FE-TX que nos añadirá dos interfaces de red FastEthernet.
Ahora podemos arrancar los routers y comenzar con la configuración de las tarjetas de red . Usare las mismas direcciónes que en el escenario anterior .
Router CASA
Configuramos las tarjetas de red :
Quedando así nuestras interfaces :
Router R1
Configuramos las tarjetas de red :
Quedando así nuestras interfaces :
Router R2
Configuramos las tarjetas de red :
Quedando así nuestras interfaces :
Router ISP
Configuramos las tarjetas de red :
Quedando así nuestras interfaces :
Rutas necesarias
Rutas ISP:
Rutas CASA :
Rutas R2:
Rutas R1:
Seria necesario únicamente que añadamos las rutas por defecto en los Routers R1 , R2 y CASA .
Prueba de conectividad
R1 –> R2
R1 –> CASA
R2-→ R1
R2 –> CASA
CASA –> R1
CASA –> R2
Vemos que todos los dispositivos que tiene direcciónes ips publicas tienen conectividad entre si pero que pasa con los que tienen direcciónamiento privado en nuestro escenario , estos no tendrán conectividad ya que no se enrutan direcciónes privadas en los routers de internet .
Configuración del servicio DHCP en router CASA
Lo primero que haremos sera establecer el rango de IP´s excluidas del conjunto (pool) de direcciónes que podrá asignar el servicio indicando la ip inicial y final del rango, ambas incluidas:
Ponemos un nombre al rango del servicio DHCP:
Definimos la red a la que dará servicio de DHCP:
Incluimos la puerta de enlace que ofrecerá el servicio :
Con esto ya estaría configurado el servidor DHCP del router de CASA , nos salimos y guardamos los cambios . Ahora encenderemos nuestras maquinas y veremos que están recibirán automáticamente su configuración por DHCP , con el siguiente comando podemos ver las estadísticas del servicio :
Además podemos ver las concesiones con el siguiente comando :
Este nos sera útil para realizar un seguimiento de quien tiene asignada cada IP sin tener que ir individualmente a casa maquina .
Configuración del NAT
Router CASA
Lo primero que haremos sera crear una acl para permitir el trafico que queremos hacer SNAT :
Le asignaremos a la interfaz interna de nuestra red esta regla :
Ahora crearemos un pool con las ips publicas , el comando seria este no sale completo en la terminal :
ip nat pool ip_publica 102.168.0.2 102.168.0.2 netmask 255.255.255.0
Activamos el NAT :
Indicamos que interfaz es de “dentro” :
Indicamos la interfaz de “fuera”:
El SNAT estaría funcionando , así que vamos a comprobarlo :
Vemos que nos cambia correctamente la ip privada de nuestro host por la publica del router de casa .
Router R1
Lo primero que haremos sera crear una acl para permitir el trafico que queremos hacer SNAT :
Le asignaremos a la interfaz interna de nuestra red esta regla :
Ahora crearemos un pool con las ips publicas , el comando seria este no sale completo en la terminal :
ip nat pool ip_publica 101.168.0.2 101.168.0.2 netmask 255.255.255.0
Activamos el NAT :
Indicamos que interfaz es de “dentro” :
Indicamos la interfaz de “fuera”:
Y comprobaremos que se esta realizando correctamente :
Nos cambia la ip 172.22.1.1 por la 101.168.0.2 que es la publica del router al realizar un ping , por lo que esta funcionando correctamente el SNAT.
Ahora configuraremos la regla de DNAT , la sintaxis es la siguiente :
ip nat inside source static tcp ip_privada puerto ip_publica puerto
*Posteriormente comprobaremos que el DNAT funciona correctamente .
Router R2
Lo primero que haremos sera crear una acl para permitir el trafico que queremos hacer SNAT :
Le asignaremos a la interfaz interna de nuestra red esta regla :
Ahora crearemos un pool con las ips publicas , el comando seria este no sale completo en la terminal :
ip nat pool ip_publica 103.168.0.2 103.168.0.2 netmask 255.255.255.0
Activamos el NAT :
Indicamos que interfaz es de “dentro” :
Indicamos la interfaz de “fuera”:
Y comprobaremos que se esta realizando correctamente :
*Nos cambia la ip 10.0.0.1 por la 103.168.0.2 que es la publica del router al realizar un ping , por lo que esta funcionando correctamente el SNAT.
Ahora configuraremos la regla de DNAT , la sintaxis es la siguiente :
ip nat inside source static tcp ip_privada puerto ip_publica puerto
*Posteriormente comprobaremos que el DNAT funciona correctamente .
Comprobación de navegación y DNAT
Ahora vamos a comprobar que desde la red de casa podemos acceder a los servidores web .
Accederé usando curl desde un host de la red de casa . Primero me conectare al servidor 1 :
Vemos que este nos responde correctamente y se aplica el DNAT , ya que ha cambiado la ip publica del router por la privada del servidor web :
Ahora comprobaremos el servidor 2 :
Vemos que este nos responde correctamente y se aplica el DNAT , ya que ha cambiado la ip publica del router por la privada del servidor web :
Ahora comprobaremos que puedo acceder desde un Tiny Core con Firefox a ambos servidores :
Al servidor 1 :
Al servidor 2 :
Vemos que también podemos conectarnos ya que las reglas de NAT están funcionando correctamente .
Vamos a comprobar que ocurre si solicitamos la web a través de sus direcciónes ip privadas :
Pues que obviamente no recibimos respuesta ya que en nuestro escenario estamos simulando internet y en este no se pueden enrutar direcciónes ips privadas ya que están pueden estar repetidas en infinidad de redes .
Depuración de las reglas NAT
Además para asegurarnos de que las reglas de NAT están funcionando .
El primer comando nos permite ver la tabla de traducciones de direcciónes DNAT :
Con este comando podremos ver cuantos hits tienen nuestras reglas , si no tiene ninguno es que esta no esta funcionando salvo que nosotros hayamos inicializado este :
Si queremos poner los contadores a cero usaremos el comando clear ip nat statistics .
Si queremos ver en tiempo real los paquetes que muestra información sobre cada paquete que traduce el router :
Cuando decodifique el resultado de este comando, observe los significados de los siguientes símbolos y valores:
- * : el asterisco junto a NAT indica que la traducción se realiza en la ruta de switching rápido. Al primer paquete en una conversación siempre se aplica el switching de procesos, que es más lento. Si existe una entrada de caché, el resto de los paquetes atraviesan la ruta de switching rápido.
- S: Este símbolo hace referencia a la dirección IPv4 de origen.
- a.b.c.d→ w.x.y.z: este valor indica que la dirección de origen a.b.c.d se traduce a w.x.y.z.
- d: = Este símbolo hace referencia a la dirección IPv4 de destino.
- [xxxx] = El valor entre corchetes es el número de identificación IPv4. Esta información puede ser útil para la depuración, ya que habilita la correlación con otros seguimientos de paquetes realizados por los analizadores de protocolos.