Instancias NAT - Amazon Virtual Private Cloud

Instancias NAT

Una instancia NAT proporciona traducción de direcciones de red (NAT). Puede usar una instancia NAT para permitir que los recursos de una subred privada se comuniquen con destinos fuera de la nube privada virtual (VPC), como Internet o una red en las instalaciones. Los recursos de la subred privada pueden iniciar el tráfico IPv4 saliente a Internet, pero no pueden recibir el tráfico entrante iniciado en Internet.

importante

NAT AMI se basa en la última versión de Amazon Linux AMI, 2018.03, cuya compatibilidad estándar llegó a su fin el 31 de diciembre de 2020 y su mantenimiento llegó a su fin el 31 de diciembre de 2023. Para obtener más información, consulte la siguiente entrada del blog: Amazon Linux AMI end of life.

Si utiliza una AMI NAT existente, AWS recomienda que migre a una gateway NAT. Las gateway NAT ofrecen una mejor disponibilidad, un mayor ancho de banda y que requieren menos esfuerzo administrativo. Para obtener más información, consulte Comparar las puertas de enlace NAT con las instancias NAT.

Si las instancias NAT coinciden mejor con su caso de uso que las puertas de enlace NAT, puede crear su propia AMI NAT de una versión actual de Amazon Linux como se describe en Creación de una AMI de NAT.

Conceptos básicos de las instancias NAT

El siguiente gráfico muestra los conceptos básicos de las instancias NAT. La tabla de enrutamiento asociada con la subred privada envía tráfico de Internet desde las instancias de la subred privada a la instancia NAT en la subred pública. La instancia NAT luego envía el tráfico a la puerta de enlace de Internet. El tráfico se atribuye a la dirección IP pública de la instancia NAT. La instancia NAT especifica un número de puerto alto para la respuesta; si la respuesta vuelve, la instancia NAT la envía a una instancia de la subred privada en función del número de puerto de la respuesta.

La instancia NAT debe tener acceso a Internet, por lo que debe estar en una subred pública (una subred que tiene una tabla de enrutamiento con una ruta a la puerta de enlace de Internet) y debe tener una dirección IP pública o una dirección IP elástica.

Configuración de la instancia NAT

Para empezar a utilizar las instancias NAT, cree una AMI de NAT, cree un grupo de seguridad para la instancia NAT y lance la instancia de NAT en su VPC.

Su cuota de instancias NAT depende de la cuota de instancias para la región. Para obtener más información, consulte Service Quotas de Amazon EC2 en Referencia general de AWS.

Crear una VPC para la instancia NAT

Utilice el siguiente procedimiento para crear una VPC con una subred pública y una subred privada.

Para crear la VPC
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. Seleccione Crear VPC.

  3. En Resources to create (Recursos para crear), elija VPC and more (VPC y más).

  4. En Generación automática de etiquetas de nombre, ingrese un nombre para la VPC.

  5. Para configurar las subredes, haga lo siguiente:

    1. En Number of Availability Zones (Número de zonas de disponibilidad), elija 1 o 2, según sus necesidades.

    2. En Number of public subnets (Número de subredes públicas), asegúrese de tener una subred pública por zona de disponibilidad.

    3. En Number of private subnets (Número de subredes privadas), asegúrese de tener una subred privada por zona de disponibilidad.

  6. Seleccione Crear VPC.

Crear un grupo de seguridad para instancias NAT

Cree un grupo de seguridad con las reglas que se describen en la tabla siguiente. Estas reglas permiten que su instancia NAT reciba tráfico vinculado a Internet de instancias en la subred privada, así como también tráfico SSH de su red. La instancia NAT también puede enviar tráfico a internet, lo que permite que las instancias de la subred privada obtengan actualizaciones de software.

A continuación, se muestran las reglas recomendadas.

Entrada
Fuente Protocolo Rango de puerto Comentarios
CIDR de subred privada TCP 80 Permite el tráfico HTTP entrante de servidores en la subred privada.
CIDR de subred privada TCP 443 Permite el tráfico HTTPS entrante de servidores en la subred privada.
Rango de direcciones IP públicas de su red TCP 22 Permite el acceso SSH entrante a la instancia NAT desde su red (a través de la puerta de enlace de Internet).
Salida
Destino Protocolo Rango de puerto Comentarios
0.0.0.0/0 TCP 80 Permite el acceso HTTP saliente a internet
0.0.0.0/0 TCP 443 Permite el acceso HTTPS saliente a internet
Para crear el grupo de seguridad
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación, elija Grupos de seguridad.

  3. Elija Create Security Group (Crear grupo de seguridad).

  4. Ingrese un nombre y una descripción para el grupo de seguridad.

  5. Para VPC, seleccione el ID de la VPC para su instancia NAT.

  6. Agregue reglas para el tráfico entrante en Reglas entrantes de la siguiente manera:

    1. Seleccione Agregar regla. Elija HTTP para Tipo e ingrese el rango de direcciones IP de su subred privada para Fuente.

    2. Seleccione Agregar regla. Elija HTTPS para Tipo e ingrese el rango de direcciones IP de su subred privada para Fuente.

    3. Seleccione Agregar regla. Elija SSH para Tipo e ingrese el rango de direcciones IP de su red para Origen.

  7. Agregue reglas para el tráfico saliente en Reglas salientes de la siguiente manera:

    1. Seleccione Agregar regla. Elija HTTP como Tipo e introduzca 0.0.0.0/0 como Destino.

    2. Seleccione Agregar regla. Elija HTTPS como Tipo e introduzca 0.0.0.0/0 como Destino.

  8. Elija Create Security Group (Crear grupo de seguridad).

Para obtener más información, consulte Grupos de seguridad.

Creación de una AMI de NAT

Una AMI de NAT está configurada para ejecutar NAT en una instancia de EC2. Debe crear una AMI de NAT y, a continuación, lanzar la instancia NAT con su AMI de NAT.

Si piensa utilizar un sistema operativo que no sea Amazon Linux para su AMI de NAT, consulte la documentación de este sistema operativo para obtener información sobre cómo configurar la NAT. Asegúrese de guardar esta configuración para que se mantenga incluso después de reiniciar la instancia.

Para crear una AMI de NAT para Amazon Linux
  1. Lance una instancia EC2 que ejecute AL2023 o Amazon Linux 2. Asegúrese de especificar el grupo de seguridad que creó para la instancia de NAT.

  2. Conéctese a la instancia y ejecute los comandos siguientes en la instancia para habilitar iptables.

    sudo yum install iptables-services -y sudo systemctl enable iptables sudo systemctl start iptables
  3. Haga lo siguiente en la instancia para habilitar el reenvío de IP de forma que persista después del reinicio:

    1. Mediante un editor de texto, como nano o vim, cree el siguiente archivo de configuración: /etc/sysctl.d/custom-ip-forwarding.conf.

    2. Agregue la siguiente línea al archivo de configuración.

      net.ipv4.ip_forward=1
    3. Guarde el archivo de configuración y salga del editor de texto.

    4. Ejecute el siguiente comando para aplicar el archivo de configuración.

      sudo sysctl -p /etc/sysctl.d/custom-ip-forwarding.conf
  4. Ejecute el siguiente comando en la instancia y anote el nombre de la interfaz de red principal. Necesitará esta información para el siguiente paso.

    netstat -i

    En el ejemplo de salida a continuación, docker0 es una interfaz de red creada por Docker, eth0 es la interfaz de red principal y lo es la interfaz de bucle invertido.

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg docker0 1500 0 0 0 0 0 0 0 0 BMU eth0 9001 7276052 0 0 0 5364991 0 0 0 BMRU lo 65536 538857 0 0 0 538857 0 0 0 LRU

    En el ejemplo de salida a continuación, la interfaz de red principal es enX0.

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enX0 9001 1076 0 0 0 1247 0 0 0 BMRU lo 65536 24 0 0 0 24 0 0 0 LRU

    En el ejemplo de salida a continuación, la interfaz de red principal es ens5.

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg ens5 9001 14036 0 0 0 2116 0 0 0 BMRU lo 65536 12 0 0 0 12 0 0 0 LRU
  5. Ejecute los comandos siguientes en la instancia para configurar  NAT. Si la interfaz de red principal no es eth0, reemplace eth0 por la interfaz de red principal que anotó en el paso anterior.

    sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo /sbin/iptables -F FORWARD sudo service iptables save
  6. Cree una AMI de NAT desde la instancia EC2. Para obtener más información, consulte Crear una AMI de Linux desde una instancia en la Guía del usuario de Amazon EC2 para instancias de Linux.

Lanzamiento de una instancia NAT

Utilice el siguiente procedimiento para lanzar una instancia NAT mediante la VPC, el grupo de seguridad y la AMI de NAT que ha creado.

Para lanzar una instancia NAT
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel, elija Iniciar instancia.

  3. En Nombre, ingrese un nombre para la instancia NAT.

  4. Para las imágenes de aplicaciones y sistemas operativos, seleccione su AMI de NAT (elija Buscar más AMI, Mis AMI).

  5. En Tipo de instancia, elija un tipo de instancia que proporcione los recursos de computación, memoria y almacenamiento que necesita su instancia NAT.

  6. (Opcional) En Par de claves, seleccione un par de claves existente o elija Crear nuevo par de claves.

  7. En Network settings (Configuración de red), haga lo siguiente:

    1. Elija Editar.

    2. En VPC, elija la VPC que ha creado.

    3. En Subred, elija la subred pública que creó para la VPC.

    4. En Auto-assign public IP (Autoasignar IP pública), elija Enable (Habilitar). Como alternativa, después de lanzar la instancia NAT, asigne una dirección IP elástica y asígnela a la instancia NAT.

    5. En Firewall, elija Seleccionar un grupo de seguridad existente y, a continuación, elija el grupo de seguridad que creó.

  8. Seleccione Iniciar instancia. Elija el ID de la instancia para abrir la página de detalles de la instancia. Espere a que el estado de la instancia cambie a En ejecución y a que las comprobaciones de estado se realicen de forma correcta.

  9. Deshabilite las comprobaciones de origen o destino para la instancia NAT (consulte Deshabilitar las comprobaciones de origen/destino).

  10. Actualice la tabla de enrutamiento para enviar tráfico a la instancia NAT (consulte Actualización de la tabla de enrutamiento).

Deshabilitar las comprobaciones de origen/destino

Cada instancia EC2 realiza las comprobaciones de origen/destino de forma predeterminada. Esto significa que la instancia debe ser el origen o el destino de todo tráfico que envíe o reciba. No obstante, una instancia NAT debe poder enviar y recibir tráfico cuando el origen o el destino no sea la propia instancia. Por lo tanto, debe deshabilitar las comprobaciones de origen/destino en la instancia NAT.

Para deshabilitar las comprobaciones de origen o destino
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, seleccione Instances (Instancia[s]).

  3. Seleccione la instancia NAT.

  4. Elija AccionesRedesCambiar verificación de origen/destino.

  5. Para comprobar el origen o el destino, seleccione Detener.

  6. Elija Guardar.

  7. Si la instancia NAT tiene una interfaz de red secundaria, selecciónela en Network interfaces (Interfaces de red) en la pestaña Networking (Redes). Elija el ID de interfaz para ir a la página de interfaces de red. Elija Actions (Acciones), Change source/des. check (Cambiar comprobación de origen y destino), borrar Enable (Habilitar) y elija Save (Guardar).

Actualización de la tabla de enrutamiento

La tabla de enrutamiento para la subred privada debe tener una ruta que envíe tráfico de Internet a la instancia NAT.

Para actualizar la tabla de enrutamiento
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación, elija Tablas de enrutamiento.

  3. Seleccione la tabla de enrutamiento de la subred privada.

  4. En la pestaña Rutas, elija Editar rutas y luego elija Agregar ruta.

  5. Ingrese 0.0.0.0/0 para Destino y el ID de instancia de la instancia NAT para Destino.

  6. Elija Guardar cambios.

Para obtener más información, consulte Configurar tablas de enrutamiento.

Pruebe su instancia NAT

Una vez que haya lanzado una instancia NAT y haya completado los pasos de configuración anteriores, puede probar si una instancia en su subred privada puede acceder a Internet a través de la instancia de NAT mediante el uso de la instancia NAT como servidor bastión.

Paso 1: Actualizar el grupo de seguridad de la instancia de NAT

Para permitir que las instancias de la subred privada envíen tráfico de ping a la instancia de NAT, añada una regla que permita el tráfico ICMP entrante y saliente. Para permitir que la instancia de NAT sirva como servidor bastión, agregue una regla que permita el tráfico SSH saliente a la subred privada.

Para actualizar el grupo de seguridad de su instancia de NAT
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación, elija Grupos de seguridad.

  3. Seleccione la casilla de verificación del grupo de seguridad asociado a la instancia NAT.

  4. En la pestaña Reglas de entrada, seleccione Editar reglas de entrada.

  5. Seleccione Add rule (Agregar regla). Seleccione All ICMP IPv4 (Todos los ICMP IPv4) para Type (Tipo). Elija Personalizado para Origen e ingrese el rango de direcciones IP de su subred privada. Seleccione Guardar reglas.

  6. En la pestaña Reglas de salida, elija Editar reglas de salida.

  7. Seleccione Add rule (Agregar regla). Seleccione SSH para Type (Tipo). Elija Personalizado para Destino e ingrese el rango de direcciones IP de su subred privada.

  8. Seleccione Add rule (Agregar regla). Seleccione All ICMP IPv4 (Todos los ICMP IPv4) para Type (Tipo). Seleccione Anywhere - PIv4 (En cualquier lugar: IPv4) para Destination (Destino). Seleccione Save rules (Guardar reglas).

Paso 2: Lanzar una instancia de prueba en la subred privada

Lance una instancia en su subred privada. Debe permitir el acceso a SSH desde la instancia de NAT y debe utilizar el mismo par de claves que utilizó para la instancia de NAT.

Para lanzar una instancia de prueba en la subred privada
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel, elija Iniciar instancia.

  3. Seleccione su subred privada.

  4. No asigne una dirección IP pública a esta instancia.

  5. Asegúrese de que el grupo de seguridad de esta instancia permita el acceso SSH entrante desde su instancia NAT o desde el rango de direcciones IP de su subred pública y el tráfico ICMP saliente.

  6. Seleccione el mismo par de claves que utilizó para la instancia de NAT.

Paso 3: Realizar un ping a un sitio web compatible con ICMP

Para comprobar que la instancia de prueba de la subred privada puede usar la instancia de NAT para comunicarse con Internet, ejecute el comando ping.

Para probar la conexión a Internet desde tu instancia privada
  1. Desde su equipo local, configure el reenvío del agente SSH para poder utilizar la instancia de NAT como servidor bastión.

    Linux and macOS
    ssh-add key.pem
    Windows

    Descargue e instale Pageant, si aún no está instalado.

    Convierta su clave privada en el formato .ppk con PuTTYgen.

    Inicie Pageant, haga clic con el botón derecho en el icono de Pageant de la barra de tareas (puede estar oculto) y elija Añadir clave. Seleccione el archivo .ppk que ha creado, escriba la frase de contraseña si es necesario, y elija Abrir.

  2. Conéctese a la instancia de NAT desde su equipo local.

    Linux and macOS
    ssh -A ec2-user@nat-instance-public-ip-address
    Windows

    Conéctese a la instancia de NAT mediante PuTTY. En Auth, debe seleccionar Allow agent forwarding y deje Private key file for authentication en blanco.

  3. Desde la instancia de NAT, ejecute el comando ping y especifique un sitio web que esté habilitado para ICMP.

    [ec2-user@ip-10-0-4-184]$ ping ietf.org

    Para confirmar que la instancia de NAT tiene acceso a Internet, compruebe que ha recibido un resultado como el siguiente y, a continuación, pulse Ctrl+C para cancelar el comando ping. De lo contrario, compruebe que la instancia de NAT esté en una subred pública (que su tabla de enrutamiento contenga una ruta a una puerta de enlace de Internet).

    PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=7.88 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.09 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=7.97 ms ...
  4. Desde su instancia NAT, conéctese a su instancia en su subred privada utilizando su dirección IP privada.

    [ec2-user@ip-10-0-4-184]$ ssh ec2-user@private-server-private-ip-address
  5. Desde su instancia privada, pruebe que puede conectarse a Internet ejecutando el comando ping.

    [ec2-user@ip-10-0-135-25]$ ping ietf.org

    Para confirmar que la instancia privada tiene acceso a Internet a través de la instancia de NAT, compruebe que ha recibido un resultado como el siguiente y, a continuación, pulse Ctrl+C para cancelar el comando ping.

    PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=8.76 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.26 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=8.27 ms ...
Solución de problemas

Si el ping comando falla desde el servidor de la subred privada, siga estos pasos para solucionar el problema:

  • Verifique que haya hecho ping a un sitio web que tenga habilitado ICMP. De lo contrario, su servidor no puede recibir paquetes de respuesta. Para probar esto, ejecute el mismo comando ping desde una terminal de línea de comandos en su propia computadora.

  • Verifique que el grupo de seguridad de su instancia NAT permita el tráfico ICMP entrante desde su subred privada. De lo contrario, su instancia NAT no puede recibir el comando ping de su instancia privada.

  • Verifique que deshabilitó la verificación de origen o destino para su instancia NAT. Para obtener más información, consulte Deshabilitar las comprobaciones de origen/destino.

  • Verifique que configuró sus tablas de rutas correctamente. Para obtener más información, consulte Actualización de la tabla de enrutamiento.

Paso 4: Limpiar

Si ya no necesita el servidor de prueba de la subred privada, finalice la instancia para que no se le siga facturando. Para obtener más información, consulte Terminar una instancia en la Guía del usuario de instancias de Linux de Amazon EC2.

Si ya no necesita la instancia de NAT, puede detenerla o cancelarla para que no se le siga facturando. Si ha creado una AMI de NAT, puede crear una nueva instancia de NAT siempre que la necesite.