Configura el reenvío de protocolos

Este documento contiene instrucciones para configurar el reenvío de protocolos tanto internos como externos. Antes de configurar el reenvío de protocolos, lee Descripción general del reenvío de protocolos.

Configura el reenvío de protocolos externos

En esta sección, se muestra cómo configurar el reenvío de protocolos externos mediante una regla de reenvío para reenviar el tráfico de TCP a una sola instancia de destino. Existen instrucciones independientes para el tráfico de IPv4 e IPv6.

Para configurar el reenvío de protocolos externos, debes crear una instancia de destino que contenga una sola instancia de VM. Luego, creas una regla de reenvío regional externa que reenvía el tráfico a la instancia de destino.

IPv4

Para simplificar, en este ejemplo se usan la red y las subredes predeterminadas.

  1. Crea una regla de firewall que permita que el tráfico externo llegue a la instancia de destino.

    gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \
     --target-tags=allow-ipv4-ext \
     --allow=tcp:80 \
     --source-ranges=0.0.0.0/0
    
  2. Crea una VM. Para este ejemplo, estamos configurando un servidor Apache en la VM.

    gcloud compute instances create VM_INSTANCE_NAME \
     --zone=ZONE \
     --image-family=debian-10 \
     --image-project=debian-cloud \
     --tags=allow-ipv4-ext \
     --metadata=startup-script='#! /bin/bash
     sudo apt-get update
     sudo apt-get install apache2 -y
     sudo a2ensite default-ssl
     sudo a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     sudo systemctl restart apache2'
    
  3. Crea una instancia de destino que contenga la VM creada en el paso anterior. Debes crear una instancia de destino antes de poder crear un objeto de regla de reenvío porque la regla de reenvío debe hacer referencia a un recurso de destino existente.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
       --instance=VM_INSTANCE_NAME \
       --zone=ZONE
    
  4. Reserva una dirección IPv4 externa estática.

    gcloud compute addresses create IPV4_ADDRESS \
      --region=REGION
    
  5. Crea la regla de reenvío que reenvía el tráfico de TCP a la instancia de destino. La regla de reenvío debe crearse en la misma región en la que se creó la instancia de destino.

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
      --load-balancing-scheme=EXTERNAL \
      --region=REGION \
      --ip-protocol=TCP \
      --address=IPV4_ADDRESS \
      --ports=80 \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE
    
  6. Prueba tu configuración.

    1. Obtén la dirección IP de la regla de reenvío.

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
        --region=REGION
      
    2. Realiza solicitudes web al balanceador de cargas mediante curl para contactar a su dirección IP. Reemplaza IP_ADDRESS por la dirección IP del paso anterior.

      $ while true; do curl -m1 IP_ADDRESS; done
      

      El resultado es similar al siguiente, en el que se muestra el nombre de la VM de backend que genera la respuesta.

      Page served from: VM_INSTANCE_NAME.
      

IPv6

El control del tráfico de IPv6 requiere una subred de pila doble con una instancia de VM de pila doble para el backend de la instancia de destino.

  1. Crea una red de VPC en modo personalizado.

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom
    
  2. Dentro de la red de VPC, crea una subred de pila doble.

    gcloud compute networks subnets create SUBNET_NAME \
      --network=VPC_NAME \
      --range=192.168.11.0/24 \
      --stack-type=IPV4_IPV6 \
      --ipv6-access-type=EXTERNAL \
      --region=REGION
    

    El rango 192.168.11.0/24 es solo un rango de IPv4 de ejemplo. Puedes ingresar cualquier rango de IPv4 principal para la subred nueva, en notación CIDR. Para obtener más información, consulta Rangos de subredes IPv4.

  3. Crea una regla de firewall que permita que el tráfico externo llegue a la instancia de destino.

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ipv6-ext \
      --allow=tcp:80 \
      --source-ranges=::/0
    
  4. Crea una VM de doble pila

    gcloud compute instances create VM_INSTANCE_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ipv6-ext \
      --metadata=startup-script='#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      sudo systemctl restart apache2'
    
  5. Crea una instancia de destino que contenga la VM creada en el paso anterior.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  6. Reserva una dirección IPv6 externa estática.

    gcloud compute addresses create IPV6_ADDRESS \
      --region=REGION \
      --subnet=SUBNET_NAME \
      --ip-version=IPV6 \
      --endpoint-type=NETLB
    
  7. Crea una regla de reenvío de IPv6 que reenvíe el tráfico de TCP a la instancia de destino. La regla de reenvío debe crearse en la misma región en la que se creó la instancia de destino.

    gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
      --load-balancing-scheme=EXTERNAL \
      --subnet=SUBNET_NAME \
      --ip-version=IPV6 \
      --region=REGION \
      --address=IPV6_ADDRESS \
      --network-tier=PREMIUM \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE \
      --ip-protocol=TCP \
      --ports=80
    
  8. Prueba tu configuración.

    1. Obtén la dirección IP de la regla de reenvío.

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. Realiza solicitudes web al balanceador de cargas mediante curl para contactar a su dirección IP. Reemplaza IPV6_ADDRESS por la dirección IP del paso anterior.

      curl -6 'http://[IPV6_ADDRESS]:80'
      

      El resultado es similar al siguiente, en el que se muestra el nombre de la VM de backend que genera la respuesta.

      Page served from: VM_INSTANCE_NAME.
      

Configura el reenvío de protocolos internos

En esta sección, se muestra cómo configurar el reenvío de protocolos internos mediante una regla de reenvío para reenviar el tráfico de TCP a una sola instancia de destino. Existen instrucciones independientes para el tráfico de IPv4 e IPv6.

Para este ejemplo, debes crear una instancia de destino que contenga una sola instancia de VM con un servidor Apache instalado. Luego, crearás una regla de reenvío regional interna que reenvíe el tráfico a la instancia de destino.

IPv4

Para simplificar, en este ejemplo se usan la red y las subredes predeterminadas.

  1. Crea una regla de firewall que permita que el tráfico externo llegue a la instancia de destino.

    gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \
      --target-tags=allow-ipv4-int \
      --allow=tcp \
      --source-ranges=0.0.0.0/0
    
  2. Crea una regla de firewall para permitir la conectividad SSH a las VMs con la etiqueta de red allow-ssh. Esto se usa para establecer una conexión SSH a la VM del cliente.

    gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \
      --target-tags=allow-ssh \
      --allow=tcp:22 \
      --source-ranges=0.0.0.0/0
    
  3. Crea una VM.

    gcloud compute instances create VM_INSTANCE_NAME \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ipv4-int \
      --metadata=startup-script='#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      sudo systemctl restart apache2'
    
  4. Crea una instancia de destino que contenga la VM creada en el paso anterior. Debes crear una instancia de destino antes de poder crear un objeto de regla de reenvío porque la regla de reenvío debe hacer referencia a un recurso de destino existente.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --zone=ZONE
    
  5. Crea la regla de reenvío que reenvía el tráfico de TCP a la instancia de destino. La regla de reenvío debe crearse en la misma región en la que se creó la instancia de destino.

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL \
      --network-tier=PREMIUM \
      --region=REGION \
      --ip-protocol=TCP \
      --ports=80 \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE
    
  6. Crea una VM de cliente de prueba.

    gcloud compute instances create CLIENT_VM_NAME \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ssh
    

    Ahora puedes probar la configuración de reenvío de protocolos si envías tráfico desde esta VM cliente a la dirección IP de la regla de reenvío.

  7. Prueba tu configuración.

    1. Obtén la dirección IP de la regla de reenvío.

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. Establece una conexión SSH a la VM de cliente.

      gcloud compute ssh CLIENT_VM_NAME \
      --zone=ZONE
      
    3. Realiza solicitudes al balanceador de cargas mediante curl para contactar a su dirección IP.

      $ while true; do curl -m1 IP_ADDRESS; done
      

      El resultado es similar al siguiente, en el que se muestra el nombre de la VM de backend que genera la respuesta.

      Page served from: VM_INSTANCE_NAME.
      

IPv6

El control del tráfico de IPv6 requiere una subred de pila doble con una instancia de VM de pila doble para el backend de la instancia de destino.

  1. Crea una red de VPC en modo personalizado con la marca --enable-ula-internal-ipv6 para configurar rangos de IPv6 internos en cualquier subred de esta red.

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6
    
  2. Dentro de la red de VPC, crea una subred de pila doble.

    gcloud compute networks subnets create SUBNET_NAME \
      --network=VPC_NAME \
      --range=192.168.11.0/24 \
      --region=REGION \
      --stack-type=IPV4_IPV6 \
      --ipv6-access-type=INTERNAL
    

    El rango 192.168.11.0/24 es solo un rango de IPv4 de ejemplo. Puedes ingresar cualquier rango de IPv4 principal para la subred nueva, en notación CIDR. Para obtener más información, consulta Rangos de subredes IPv4.

  3. Crea una regla de firewall que permita que el tráfico externo llegue a la instancia de destino.

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ipv6-int \
      --allow=tcp \
      --source-ranges=::/0
    
  4. Crea una regla de firewall para permitir la conectividad SSH a las VMs mediante la etiqueta de red allow-ssh.

    gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ssh \
      --allow=tcp:22 \
      --source-ranges=0.0.0.0/0
    

    Esta regla de firewall se aplica a una VM de cliente (creada en uno de los siguientes pasos) a la que te conectas mediante SSH para enviar tráfico HTTP a la dirección IP de la regla de reenvío.

  5. Crea una VM de doble pila

    gcloud compute instances create VM_INSTANCE_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ipv6-int \
      --metadata=startup-script='#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      sudo systemctl restart apache2'
    
  6. Crea una instancia de destino que contenga la VM creada en el paso anterior.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  7. Crea una regla de reenvío de IPv6 que reenvíe el tráfico de TCP a la instancia de destino. La regla de reenvío debe crearse en la misma región en la que se creó la instancia de destino.

    gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL \
      --network-tier=PREMIUM \
      --network=VPC_NAME \
      --subnet=SUBNET_NAME \
      --region=REGION \
      --ip-protocol=TCP \
      --ports=80 \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE \
      --ip-version=IPV6
    
  8. Crea una VM de cliente.

    gcloud compute instances create CLIENT_VM_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ssh
    
  9. Prueba tu configuración.

    1. Obtén la dirección IP de la regla de reenvío.

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. Establece una conexión SSH a la VM de cliente.

      gcloud compute ssh CLIENT_VM_NAME \
       --zone=ZONE
      
    3. Realiza una solicitud HTTP a la dirección IP de la regla de reenvío mediante curl.

      curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80'
      

      El resultado es similar al siguiente, en el que el nombre de la VM de backend que genera la respuesta se muestra en el texto.

      Page served from: VM_INSTANCE_NAME.
      

¿Qué sigue?