Elastic IP y Gateway NAT en AWS: Tráfico saliente desde una única IP

Hola a tod@s,

En este post quiero hablaros de cómo poder usar una única IP en una subnet de una VPC de AWS en 4 pasos!

Esto lo conseguimos creando un Gateways NAT al que le asociaremos una ip elástica y asociando la Gateway NAT a una subred pública.

¿Para qué nos sirve esto?

Utilizar una única IP en una subnet puede ser muy útil para conectar varias instancias de EC2 y funciones Lambda con una única IP.
Esto puede simplificar la gestión de direcciones IP y facilitar el acceso a servicios externos que requieren una IP específica.

Empezaremos con un esquema visual para verlo al detalle:

Como vemos en la imagen tenemos que tener una NAT, 2 subredes- y una ip elástica:

  • Ip elástica: Para tener una ip «fija» a la salida de internet.
  • NAT: Asociada a la subnet pública y ip elástica.
  • Subred pública: Con las rutas directas a internet.
  • Subred privada: Con las rutas directas a la NAT.

Con esto únicamente nos queda asociar a la subnet privada los servicios que queramos que usen la ip elástica.

Y ahora veámoslo paso a paso:

Paso 1: Crear una VPC y Subnets

  1. Acceder a la consola de VPC:
    • Inicia sesión en la consola y navega a la sección de VPC.
  2. Crear una VPC:
    • Haz clic en «Crear VPC» (Create VPC).
    • Configura la VPC con el rango de direcciones CIDR que necesites.
  3. Crear una Subnets:
    • En la sección de subnets, haz clic en «Crear Subnet» (Create Subnet).
    • Primera subnet que será la pública:
      • Asigna la subnet a la VPC que acabas de crear.
      • Configura el rango de direcciones CIDR para la subnet.
    • Segunda subnet que será la privada:
      • Asigna la subnet a la VPC que acabas de crear.
      • Configura el rango de direcciones CIDR para la subnet.

Paso 2: Crear una Elastic IP, una NAT Gateway, una puerta de enlace y configurar tabla de rutas

  1. Crear una Elastic IP:
    • Navega a la sección de Elastic IPs en la consola de EC2.
    • Haz clic en «Asignar nueva dirección IP elástica» (Allocate new Elastic IP).
  2. Crear una NAT Gateway:
    • Navega a la sección de NAT Gateways en la consola de VPC.
    • Haz clic en «Crear NAT Gateway» (Create NAT Gateway):
      • Selecciona la subnet pública a la hora de crearla para que la NAT tenga salida de internet.
      • Asocia la Elastic IP que acabas de crear a la NAT Gateway.
  3. Crear o configurar puerta de enlace:
    • Si no tienes una puerta de enlace, crea una y en la sección de «Internet Gateways» la asignaremos a la VPC.
  4. Actualizar o crear Tabla de Rutas:
    • Ve a la sección de tablas de rutas en la consola de VPC.
    • Selecciona la tabla de rutas asociada o crea una nueva.
    • Subnet pública:
      • La que ya tiene salida a “internet” es la que va directa sin pasar por la NAT.
      • Añade una nueva ruta con el destino 0.0.0.0/0 y como objetivo a la puerta de enlace que acabas de crear.
    • Subnet privada:
      • La que usaremos para que todo lo conectado aquí salga por la NAT.
      • Añade una nueva ruta con el destino 0.0.0.0/0 y como objetivo la NAT Gateway que acabas de crear.

Paso 3: Configurar Servicios Instancias EC2 y Funciones Lambda

  1. Instancias EC2:
    • Lanza instancias EC2 en la subnet configurada.
    • Desactivar: Asignar automáticamente la IP pública (en Acciones / Redes / Administrar direcciones IP).
  2. Funciones Lambda:
    • Configura las funciones Lambda para usar la misma VPC y subnet.
    • Asegúrate de que las funciones Lambda tengan permisos para acceder a los recursos necesarios dentro de la VPC.

Paso 4: Verificar Conectividad

  1. Prueba de Conectividad:
    • Desde las instancias EC2 y funciones Lambda, intenta conectarte a servicios externos.
    • Verifica que el tráfico saliente por ejemplo conectados via ssh desde la terminal con el comando: curl ipinfo.io/ip

Beneficios de Usar una Única IP:

  • Simplificación de la Gestión de IPs: Facilita la gestión de direcciones IP en tu infraestructura.
  • Acceso a Servicios Externos: Algunos servicios externos pueden requerir que las solicitudes provengan de una IP específica.
  • Seguridad: Facilita la configuración de reglas de seguridad basadas en IP.


Y hasta aquí con el post de hoy. Espero que os sirva de ayuda.

Para mantener la web y seguir compartiendo conocimiento, considera invitarme a un café. ¡Siempre es una alegría recibir ese apoyo!
Un saludo!

😉

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Warning: Undefined array key "rerror" in /volume1/web/WebTomoNota/wp-content/plugins/wp-recaptcha-bp/recaptcha.php on line 300 Call Stack: 0.0001 361048 1. {main}() /volume1/web/WebTomoNota/index.php:0 0.0001 361360 2. require('/volume1/web/WebTomoNota/wp-blog-header.php') /volume1/web/WebTomoNota/index.php:17 0.5822 14465744 3. require_once('/volume1/web/WebTomoNota/wp-includes/template-loader.php') /volume1/web/WebTomoNota/wp-blog-header.php:19 0.5885 14631912 4. include('/volume1/web/WebTomoNota/wp-content/themes/yuki/index.php') /volume1/web/WebTomoNota/wp-includes/template-loader.php:106 2.7412 17441376 5. yuki_do_elementor_location($elementor_location = 'single', $template_part = 'template-parts/special', $name = 'single') /volume1/web/WebTomoNota/wp-content/themes/yuki/index.php:20 2.7412 17441376 6. get_template_part($slug = 'template-parts/special', $name = 'single', $args = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/helpers.php:34 2.7412 17441952 7. locate_template($template_names = [0 => 'template-parts/special-single.php', 1 => 'template-parts/special.php'], $load = TRUE, $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/general-template.php:206 2.7412 17442064 8. load_template($_template_file = '/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php', $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/template.php:745 2.7413 17442416 9. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php') /volume1/web/WebTomoNota/wp-includes/template.php:812 2.8068 17449640 10. do_action($hook_name = 'yuki_action_after_single_post') /volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php:58 2.8068 17450016 11. WP_Hook->do_action($args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.8068 17450016 12. WP_Hook->apply_filters($value = '', $args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.9075 17548608 13. yuki_show_post_comments('') /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324 2.9077 17548608 14. comments_template($file = ???, $separate_comments = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/template-functions.php:354 2.9099 17558104 15. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php') /volume1/web/WebTomoNota/wp-includes/comment-template.php:1631 2.9099 17558104 16. comment_form($args = ['class_form' => 'comment-form yuki-form form-default'], $post = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php:66 2.9123 17569824 17. do_action($hook_name = 'comment_form', ...$arg = variadic(1462)) /volume1/web/WebTomoNota/wp-includes/comment-template.php:2896 2.9123 17570200 18. WP_Hook->do_action($args = [0 => 1462]) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.9123 17570200 19. WP_Hook->apply_filters($value = '', $args = [0 => 1462]) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.9124 17570952 20. ReCAPTCHAPlugin->show_recaptcha_in_comments(1462) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324