Usar Public NAT con Compute Engine
En esta página se muestra una demostración de una pasarela de NAT pública que proporciona servicios de traducción de direcciones de red para una instancia de VM de Compute Engine. Antes de empezar, lee la descripción general de NAT público.
Requisitos previos
Debes hacer lo siguiente antes de configurar NAT público.
Obtener permisos de gestión de identidades y accesos
El rol roles/compute.networkAdmin te da permisos para crear una pasarela NAT en Cloud Router, reservar y asignar direcciones IP NAT, y especificar subredes cuyo tráfico debe usar la traducción de direcciones de red de la pasarela NAT.
Configurar Google Cloud
Antes de empezar, configura los siguientes elementos en Google Cloud.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
Asigne un Nombre de
custom-network1
.En Subredes, selecciona Personalizado en Modo de creación de subred.
En Nueva subred, introduce el Nombre
subnet-us-east-192
.En Región, selecciona us-east4.
Introduce un intervalo de direcciones IP de
192.168.1.0/24
.Haz clic en Hecho y, a continuación, en Crear.
Crea una red de VPC en modo personalizado en tu proyecto:
gcloud compute networks create custom-network1 \ --subnet-mode custom
Especifica el prefijo de subred de tu primera región. En este ejemplo, asignamos
192.168.1.0/24
a la regiónus-east4
.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
Especifica un nombre de
nat-test-1
para tu instancia.En Region (Región), selecciona us-east4.
Define Zone (Zona) como us-east4-c.
Haz clic en el enlace Gestión, seguridad, discos, redes, único cliente.
Haz clic en la pestaña Redes.
En Interfaces de red, haz clic en
Editar en la interfaz predeterminada de la VM.- Define Red como
custom-network1
. - Asigna el valor
subnet-us-east-192
a Subred. - En IP externa, selecciona Ninguna.
- Haz clic en Listo.
- Define Red como
Para crear e iniciar la instancia, haz clic en Crear.
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Haz clic en Crear regla de cortafuegos.
Asigne un Nombre de
allow-ssh
.Especifica una red de
custom-network1
.En Dirección del tráfico, seleccione Entrada.
En Acción tras coincidencia, selecciona Permitir.
En Destinos, selecciona Todas las instancias de la red.
En Filtro de origen, elija Intervalos de IPv4.
Defina Intervalos de IP de origen como
35.235.240.0/20
.En Protocolos y puertos, selecciona Protocolos y puertos especificados.
Selecciona la casilla tcp e introduce el puerto
22
.Haz clic en Crear.
En la Google Cloud consola, ve a la página Identity-Aware Proxy.
Selecciona la pestaña Recursos SSH y TCP.
Para actualizar los permisos de los miembros en los recursos, selecciona la casilla situada junto a Todos los recursos de túnel > us-east4-c > nat-test-1.
En el panel de la derecha, haz clic en Añadir miembro.
Para conceder acceso a los recursos a usuarios, grupos o cuentas de servicio, especifica sus direcciones de correo en el campo Miembros nuevos.
Si solo quieres probar esta función, puedes introducir tu propia dirección de correo.
Para conceder a los miembros acceso a los recursos mediante la función de reenvío de TCP de Cloud IAP, en la lista desplegable Rol, selecciona Cloud IAP > Usuario de túneles protegidos mediante IAP.
Haz clic en Guardar.
PROJECT_ID
: tu ID de proyectoMEMBER_INFO
: lista separada por comas de pares de miembrostype:email
. Ejemplos:- Para un usuario concreto:
user:test-user@example.com
- En un grupo:
group:admins@example.com
- Para una cuenta de servicio:
serviceAccount:test123@example.domain.com
- Para un usuario concreto:
En la consola de Google Cloud , ve a la página Instancias de VM.
En
nat-test-1
, en la columna Conectar, haz clic en la flecha desplegable SSH y, a continuación, selecciona Abrir en ventana del navegador.En el símbolo del sistema de la máquina virtual, introduce
curl example.com
y, a continuación, pulsa Intro.No deberías obtener ningún resultado. Si lo has hecho, es posible que hayas creado
nat-test-1
con una dirección IP externa o que haya algún otro problema. Para solucionar problemas, consulta Las VMs pueden acceder a Internet inesperadamente sin Cloud NAT.Para finalizar el comando, puede que tengas que introducir
Ctrl+C
.Añade una clave SSH de Compute Engine a tu host local:
ssh-add ~/.ssh/google_compute_engine
Conéctate a
nat-test-1
y ejecuta un comando:gcloud compute ssh nat-test-1 \ --zone us-east4-c \ --command "curl example.com" \ --tunnel-through-iap
No deberías obtener ningún resultado. Si lo has hecho, es posible que hayas creado
nat-test-1
con una dirección IP externa o que haya algún otro problema. Para solucionar problemas, consulta Las VMs pueden acceder a Internet inesperadamente sin Cloud NAT.Para finalizar el comando, puede que tengas que introducir
Ctrl+C
.En la Google Cloud consola, ve a la página Cloud NAT.
Haz clic en Empezar o en Crear pasarela NAT.
Introduzca un nombre de pasarela de
nat-config
.Define la red de VPC como
custom-network1
.En Region (Región), selecciona us-east4.
En Cloud Router, selecciona Crear router.
- Asigne un Nombre de
nat-router
. - Haz clic en Crear.
- Asigne un Nombre de
Haz clic en Crear.
Crea un router de Cloud Router:
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4
Añade una configuración al router:
gcloud compute routers nats create nat-config \ --router-region us-east4 \ --router nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
En la consola de Google Cloud , ve a la página Instancias de VM.
En
nat-test-1
, en la columna Conectar, haz clic en la flecha desplegable SSH y, a continuación, selecciona Abrir en ventana del navegador.En el símbolo del sistema de la máquina virtual, introduce
curl example.com
y, a continuación, pulsa Intro.- Configura una pasarela NAT pública.
- Crea una configuración de ejemplo de Google Kubernetes Engine (GKE).
Ejemplo
A continuación, se muestra un ejemplo completo que incluye una pasarela NAT pública de muestra y una VM de Compute Engine de muestra que usa la pasarela NAT pública.
Paso 1: Crea una red VPC y una subred
Si ya tiene una red y una subred, puede saltarse este paso.
Consola
gcloud
Terraform
Puedes usar un módulo de Terraform para crear una red de nube privada virtual (VPC) y una subred personalizadas.
Paso 2: Crea una instancia de VM sin dirección IP externa
Consola
gcloud
gcloud compute instances create nat-test-1 \ --image-family debian-9 \ --image-project debian-cloud \ --network custom-network1 \ --subnet subnet-us-east-192 \ --zone us-east4-c \ --no-address
Terraform
Puedes usar un recurso de Terraform para crear una instancia de VM.
Paso 3: Crea una regla de cortafuegos que permita las conexiones SSH
Consola
gcloud
gcloud compute firewall-rules create allow-ssh \ --network custom-network1 \ --source-ranges 35.235.240.0/20 \ --allow tcp:22
Terraform
Puedes usar un recurso de Terraform para crear una regla de cortafuegos.
Paso 4: Crea permisos de IAP SSH para tu instancia de prueba
En un paso posterior, usa Identity-Aware Proxy (IAP) para conectarte a tu instancia de prueba.
Consola
gcloud
Este comando concede acceso SSH mediante IAP a todas las instancias de VM de tu proyecto. Si quieres conceder acceso SSH a una máquina virtual concreta mediante IAP, sigue las instrucciones de la Google Cloud consola.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=MEMBER_INFO \ --role=roles/iap.tunnelResourceAccessor
Haz los cambios siguientes:
Terraform
Puedes usar un recurso de Terraform para crear permisos de IAP SSH para tu instancia de prueba.
Paso 5: Inicia sesión en nat-test-1
y confirma que no tiene conexión a Internet
Consola
gcloud
Paso 6: Crea una configuración de NAT con Cloud Router
Debes crear el router de Cloud en la misma región que las instancias que usen NAT público. Cloud Router solo se usa para colocar información de NAT en las VMs. No se usa como parte de la pasarela NAT real.
Esta configuración permite que todas las instancias de la región usen NAT pública para todos los intervalos de IP de alias y principales. También asigna automáticamente las direcciones IP externas a la pasarela de NAT. Para ver más opciones, consulta la documentación de Google Cloud CLI.
Consola
gcloud
Terraform
Puedes usar un recurso de Terraform para crear un Cloud Router.
Puedes usar un módulo de Terraform para crear una configuración de NAT.
Paso 7: Intenta conectarte a Internet de nuevo
La configuración NAT puede tardar hasta tres minutos en propagarse a la VM, así que espera al menos un minuto antes de intentar acceder a Internet de nuevo.
Consola
gcloud
Conéctate a nat-test-1
y ejecuta un comando:
gcloud compute ssh nat-test-1 \ --zone us-east4-c \ --command "curl example.com" \ --tunnel-through-iap
Debería ver un resultado que contenga lo siguiente:
<html> <head> <title>Example Domain</title> ... ... ... </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for illustrative examples in documents. You can use this domain in examples without prior coordination or asking for permission.</p> <p><a href="http://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>