プロトコル転送を設定する

このドキュメントでは、内部プロトコル転送と外部プロトコル転送の両方のプロトコル転送を構成する手順について説明します。プロトコル転送を構成する前に、プロトコル転送の概要をご覧ください。

外部プロトコル転送を設定する

このセクションでは、単一のターゲット インスタンスに TCP トラフィックを転送する転送ルールを使用して、外部プロトコル転送を設定する方法について説明します。IPv4 トラフィックと IPv6 トラフィックについて、それぞれ個別の手順が用意されています。

外部プロトコル転送を設定するには、単一の VM インスタンスを含むターゲット インスタンスを作成します。次に、ターゲット インスタンスにトラフィックを転送する外部リージョン転送ルールを作成します。

IPv4

わかりやすくするために、この例ではデフォルトのネットワークとサブネットを使用しています。

  1. 外部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。

    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. VM を作成します。この例では、VM に Apache サーバーを設定します。

    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. 前の手順で作成した VM を含むターゲット インスタンスを作成します。転送ルールは既存のターゲット リソースを参照する必要があるため、転送ルールを作成するには、あらかじめターゲット インスタンスを作成しておく必要があります。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
       --instance=VM_INSTANCE_NAME \
       --zone=ZONE
    
  4. 静的外部 IPv4 アドレスを予約します。

    gcloud compute addresses create IPV4_ADDRESS \
      --region=REGION
    
  5. TCP トラフィックをターゲット インスタンスに転送する転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。

    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. 設定をテストします。

    1. 転送ルールの IP アドレスを取得します。

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
        --region=REGION
      
    2. curl を使用してロードバランサへのウェブ リクエストを作成し、IP アドレスに接続します。IP_ADDRESS は、前の手順で取得した IP アドレスに置き換えます。

      $ while true; do curl -m1 IP_ADDRESS; done
      

      出力は次のようになります。レスポンスを生成するバックエンド VM の名前が表示されます。

      Page served from: VM_INSTANCE_NAME.
      

IPv6

IPv6 トラフィックを処理するには、ターゲット インスタンス バックエンドにデュアルスタック VM インスタンスがあるデュアルスタック サブネットが必要です。

  1. カスタムモードの VPC ネットワークを作成します。

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom
    
  2. VPC ネットワーク内で、デュアルスタック サブネットを作成します。

    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
    

    範囲 192.168.11.0/24 は IPv4 範囲の例です。新しいサブネットの任意のプライマリ IPv4 範囲を CIDR 表記で入力できます。詳細については、IPv4 サブネットの範囲をご覧ください。

  3. 外部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。

    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. デュアルスタック VM を作成します。

    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. 前の手順で作成した VM を含むターゲット インスタンスを作成します。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  6. 静的外部 IPv6 アドレス範囲を予約します。

    gcloud compute addresses create IPV6_ADDRESS \
      --region=REGION \
      --subnet=SUBNET_NAME \
      --ip-version=IPV6 \
      --endpoint-type=NETLB
    
  7. TCP トラフィックをターゲット インスタンスに転送する IPv6 転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。

    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. 設定をテストします。

    1. 転送ルールの IP アドレスを取得します。

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. curl を使用してロードバランサへのウェブ リクエストを作成し、IP アドレスに接続します。IPV6_ADDRESS は、前の手順で取得した IP アドレスに置き換えます。

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

      出力は次のようになります。レスポンスを生成するバックエンド VM の名前が表示されます。

      Page served from: VM_INSTANCE_NAME.
      

内部プロトコル転送を設定する

このセクションでは、単一のターゲット インスタンスに TCP トラフィックを転送する転送ルールを使用して、内部プロトコル転送を設定する方法について説明します。 IPv4 トラフィックと IPv6 トラフィックについて、それぞれ個別の手順が用意されています。

この例では、Apache サーバーがインストールされている単一の VM インスタンスを含むターゲット インスタンスを作成します。次に、ターゲット インスタンスにトラフィックを転送する内部リージョン転送ルールを作成します。

IPv4

わかりやすくするために、この例ではデフォルトのネットワークとサブネットを使用しています。

  1. 内部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。

    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. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可するファイアウォール ルールを作成します。これは、クライアント VM への SSH 接続を確立するために使用されます。

    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. 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. 前の手順で作成した VM を含むターゲット インスタンスを作成します。転送ルールは既存のターゲット リソースを参照する必要があるため、転送ルールを作成するには、あらかじめターゲット インスタンスを作成しておく必要があります。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --zone=ZONE
    
  5. TCP トラフィックをターゲット インスタンスに転送する転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。

    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. テスト クライアント VM を作成します。

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

    これで、このクライアント VM から転送ルールの IP アドレスにトラフィックを送信することで、プロトコル転送構成をテストできるようになりました。

  7. 設定をテストします。

    1. 転送ルールの IP アドレスを取得します。

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. クライアント VM への SSH 接続を確立します。

      gcloud compute ssh CLIENT_VM_NAME \
      --zone=ZONE
      
    3. curl を使用してロードバランサへのリクエストを作成し、IP アドレスに接続します。

      $ while true; do curl -m1 IP_ADDRESS; done
      

      出力は次のようになります。レスポンスを生成するバックエンド VM の名前が表示されます。

      Page served from: VM_INSTANCE_NAME.
      

IPv6

IPv6 トラフィックを処理するには、ターゲット インスタンス バックエンドにデュアルスタック VM インスタンスがあるデュアルスタック サブネットが必要です。

  1. --enable-ula-internal-ipv6 フラグを使用してカスタムモードの VPC ネットワークを作成し、このネットワークのサブネットに内部 IPv6 範囲を構成します。

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6
    
  2. VPC ネットワーク内で、デュアルスタック サブネットを作成します。

    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
    

    範囲 192.168.11.0/24 は IPv4 範囲の例です。新しいサブネットの任意のプライマリ IPv4 範囲を CIDR 表記で入力できます。詳細については、IPv4 サブネットの範囲をご覧ください。

  3. 内部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ipv6-int \
      --allow=tcp \
      --source-ranges=::/0
    
  4. ネットワーク タグ allow-ssh を使用して VM への 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
    

    このファイアウォール ルールは、SSH を介して接続し、転送ルールの IP アドレスに HTTP トラフィックを送信するクライアント VM(以降の手順で作成)に適用されます。

  5. デュアルスタック VM を作成します。

    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. 前の手順で作成した VM を含むターゲット インスタンスを作成します。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  7. TCP トラフィックをターゲット インスタンスに転送する IPv6 転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。

    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. クライアント VM を作成します。

    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. 設定をテストします。

    1. 転送ルールの IP アドレスを取得します。

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. クライアント VM への SSH 接続を確立します。

      gcloud compute ssh CLIENT_VM_NAME \
       --zone=ZONE
      
    3. curl を使用して、転送ルールの IP アドレスに HTTP リクエストを送信します。

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

      出力は次のようになります。レスポンスを生成するバックエンド VM の名前がテキストで表示されます。

      Page served from: VM_INSTANCE_NAME.
      

次のステップ