このドキュメントでは、内部プロトコル転送と外部プロトコル転送の両方のプロトコル転送を構成する手順について説明します。プロトコル転送を構成する前に、プロトコル転送の概要をご覧ください。
外部プロトコル転送を設定する
このセクションでは、単一のターゲット インスタンスに TCP トラフィックを転送する転送ルールを使用して、外部プロトコル転送を設定する方法について説明します。IPv4 のみのトラフィック、デュアルスタック トラフィック、IPv6 のみのトラフィックについて、それぞれ個別の手順が用意されています。
外部プロトコル転送を設定するには、単一の VM インスタンスを含むターゲット インスタンスを作成します。次に、ターゲット インスタンスにトラフィックを転送する外部リージョン転送ルールを作成します。
IPv4 のみ
わかりやすくするために、この例ではデフォルトのネットワークとサブネットを使用しています。
- 外部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。 - 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
- VM を作成します。この例では、VM に Apache サーバーを設定します。 - gcloud compute instances create VM_INSTANCE_NAME \ --zone=ZONE \ --image-family=debian-12 \ --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'
- 前の手順で作成した VM を含むターゲット インスタンスを作成します。転送ルールは既存のターゲット リソースを参照する必要があるため、転送ルールを作成するには、あらかじめターゲット インスタンスを作成しておく必要があります。 - gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --zone=ZONE
- 静的外部 IPv4 アドレスを予約します。 - gcloud compute addresses create IPV4_ADDRESS \ --region=REGION
- 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
- 設定をテストします。 - 転送ルールの IP アドレスを取得します。 - gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \ --region=REGION
- curl を使用してロードバランサへのウェブ リクエストを作成し、IP アドレスに接続します。 - IP_ADDRESSは、前の手順で取得した IP アドレスに置き換えます。- while true; do curl -m1 IP_ADDRESS; done - 出力は次のようになります。レスポンスを生成するバックエンド VM の名前が表示されます。 - Page served from: VM_INSTANCE_NAME. 
 
デュアルスタック
IPv4 トラフィックと IPv6 トラフィックの両方を処理するには、ターゲット インスタンス バックエンドにデュアルスタック VM インスタンスがあるデュアルスタック サブネットが必要です。
- カスタムモードの VPC ネットワークを作成します。 - gcloud compute networks create VPC_NAME \ --subnet-mode=custom
- VPC ネットワーク内で、デュアルスタック サブネットを作成します。 - gcloud compute networks subnets create SUBNET_NAME \ --network=VPC_NAME \ --range=IPV4_ADDRESS_RANGE \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --region=REGION- IPV4_ADDRESS_RANGE の場合、新しいサブネットの任意のプライマリ IPv4 範囲を CIDR 表記で入力できます。例: - 192.168.11.0/24詳細については、IPv4 サブネットの範囲をご覧ください。
- 外部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。 - gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \ --network=VPC_NAME \ --target-tags=allow-ipv6-ext \ --allow=tcp:80 \ --source-ranges=::/0
- デュアルスタック VM を作成します。 - gcloud compute instances create VM_INSTANCE_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV4_IPV6 \ --zone=ZONE \ --image-family=debian-12 \ --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'
- 前の手順で作成した VM を含むターゲット インスタンスを作成します。 - gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --network=VPC_NAME \ --zone=ZONE
- 静的外部 IPv4 アドレスを予約します。 - gcloud compute addresses create IPV4_ADDRESS \ --region=REGION 
- TCP トラフィックをターゲット インスタンスに転送する IPv4 転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。 - 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
- 静的外部 IPv6 アドレス範囲を予約します。 - gcloud compute addresses create IPV6_ADDRESS \ --region=REGION \ --subnet=SUBNET_NAME \ --ip-version=IPV6 \ --endpoint-type=NETLB
- 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
- 設定をテストします。 - 転送ルールの IP アドレスを取得します。 - gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \ --region=REGION - gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \ --region=REGION 
- curl を使用してロードバランサへのウェブ リクエストを作成し、IP アドレスに接続します。 - IP_ADDRESSは、前の手順で取得した IP アドレスに置き換えます。- IPv4 トラフィックの場合: - while true; do curl -m1 IP_ADDRESS; done - IPv6 トラフィックの場合: - curl -6 'http://[IP_ADDRESS]:80' - 出力は次のようになります。レスポンスを生成するバックエンド VM の名前が表示されます。 - Page served from: VM_INSTANCE_NAME. 
 
IPv6 のみ
IPv6 トラフィックのみを処理するには、ターゲット インスタンス バックエンドに IPv6 のみの VM インスタンスがある IPv6 のみのサブネットが必要です。
- カスタムモードの VPC ネットワークを作成します。 - gcloud beta compute networks create VPC_NAME \ --subnet-mode=custom
- VPC ネットワーク内で、IPv6 のみのサブネットを作成します。 - gcloud beta compute networks subnets create SUBNET_NAME \ --network=VPC_NAME \ --stack-type=IPV6_ONLY \ --ipv6-access-type=EXTERNAL \ --region=REGION
- 外部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。 - gcloud beta compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \ --network=VPC_NAME \ --target-tags=allow-ipv6-ext \ --allow=tcp:80 \ --source-ranges=::/0
- IPv6 のみの VM を作成します。 - gcloud beta compute instances create VM_INSTANCE_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV6_ONLY \ --zone=ZONE \ --image-family=debian-12 \ --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'
- 前の手順で作成した VM を含むターゲット インスタンスを作成します。 - gcloud beta compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --network=VPC_NAME \ --zone=ZONE
- 静的外部 IPv6 アドレス範囲を予約します。 - gcloud beta compute addresses create IPV6_ADDRESS \ --region=REGION \ --subnet=SUBNET_NAME \ --ip-version=IPV6 \ --endpoint-type=NETLB
- TCP トラフィックをターゲット インスタンスに転送する IPv6 転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。 - gcloud beta 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
- 設定をテストします。 - 転送ルールの IP アドレスを取得します。 - gcloud beta compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \ --region=REGION
- curl を使用してロードバランサへのウェブ リクエストを作成し、IP アドレスに接続します。 - IPV6_ADDRESSは、前の手順で取得した IP アドレスに置き換えます。- curl -6 'http://[IPV6_ADDRESS]:80' - 出力は次のようになります。レスポンスを生成するバックエンド VM の名前が表示されます。 - Page served from: VM_INSTANCE_NAME. 
 
内部プロトコル転送を設定する
このセクションでは、単一のターゲット インスタンスに TCP トラフィックを転送する転送ルールを使用して、内部プロトコル転送を設定する方法について説明します。 IPv4 のみのトラフィック、デュアルスタック トラフィック、IPv6 のみのトラフィックについて、それぞれ個別の手順が用意されています。
この例では、Apache サーバーがインストールされている単一の VM インスタンスを含むターゲット インスタンスを作成します。次に、ターゲット インスタンスにトラフィックを転送する内部リージョン転送ルールを作成します。
IPv4 のみ
わかりやすくするために、この例ではデフォルトのネットワークとサブネットを使用して内部プロトコル転送を設定します。
- 内部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。 - gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \ --target-tags=allow-ipv4-int \ --allow=tcp \ --source-ranges=0.0.0.0/0
- ネットワーク タグ - 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
- VM を作成します。 - gcloud compute instances create VM_INSTANCE_NAME \ --zone=ZONE \ --image-family=debian-12 \ --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'
- 前の手順で作成した VM を含むターゲット インスタンスを作成します。転送ルールは既存のターゲット リソースを参照する必要があるため、転送ルールを作成するには、あらかじめターゲット インスタンスを作成しておく必要があります。 - gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --zone=ZONE
- 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
- テスト クライアント VM を作成します。 - gcloud compute instances create CLIENT_VM_NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh- これで、このクライアント VM から転送ルールの IP アドレスにトラフィックを送信することで、プロトコル転送構成をテストできるようになりました。 
- 設定をテストします。 - 転送ルールの IP アドレスを取得します。 - gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \ --region=REGION
- クライアント VM への SSH 接続を確立します。 - gcloud compute ssh CLIENT_VM_NAME \ --zone=ZONE
- curl を使用してロードバランサへのリクエストを作成し、IP アドレスに接続します。 - while true; do curl -m1 IP_ADDRESS; done - 出力は次のようになります。レスポンスを生成するバックエンド VM の名前が表示されます。 - Page served from: VM_INSTANCE_NAME. 
 
デュアルスタック
IPv4 トラフィックと IPv6 トラフィックの両方を処理するには、ターゲット インスタンス バックエンドにデュアルスタック VM インスタンスがあるデュアルスタック サブネットが必要です。
- --enable-ula-internal-ipv6フラグを使用してカスタムモードの VPC ネットワークを作成し、このネットワークのサブネットに内部 IPv6 範囲を構成します。- gcloud compute networks create VPC_NAME \ --subnet-mode=custom \ --enable-ula-internal-ipv6
- VPC ネットワーク内で、デュアルスタック サブネットを作成します。 - gcloud compute networks subnets create SUBNET_NAME \ --network=VPC_NAME \ --range=IPV4_ADDRESS_RANGE \ --region=REGION \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL- IPV4_ADDRESS_RANGE の場合、新しいサブネットの任意のプライマリ IPv4 範囲を CIDR 表記で入力できます。例: - 192.168.11.0/24詳細については、IPv4 サブネットの範囲をご覧ください。
- 内部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。 - gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \ --network=VPC_NAME \ --target-tags=allow-ipv6-int \ --allow=tcp \ --source-ranges=::/0
- ネットワーク タグ - 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(以降の手順で作成)に適用されます。 
- デュアルスタック VM を作成します。 - gcloud compute instances create VM_INSTANCE_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV4_IPV6 \ --zone=ZONE \ --image-family=debian-12 \ --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'
- 前の手順で作成した VM を含むターゲット インスタンスを作成します。 - gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --network=VPC_NAME \ --zone=ZONE
- TCP トラフィックをターゲット インスタンスに転送する IPv4 転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。 - 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
- 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
- クライアント VM を作成します。 - gcloud compute instances create CLIENT_VM_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV4_IPV6 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh
- 設定をテストします。 - 転送ルールの IP アドレスを取得します。 - gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \ --region=REGION- gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \ --region=REGION
- クライアント VM への SSH 接続を確立します。 - gcloud compute ssh CLIENT_VM_NAME \ --zone=ZONE
- curl を使用して、転送ルールの IP アドレスに HTTP リクエストを送信します。 - IPv4 トラフィックの場合: - while true; do curl -m1 IP_ADDRESS; done - IPv6 トラフィックの場合: - curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80' - 出力は次のようになります。レスポンスを生成するバックエンド VM の名前がテキストで表示されます。 - Page served from: VM_INSTANCE_NAME. 
 
IPv6 のみ
IPv6 トラフィックのみを処理するには、ターゲット インスタンス バックエンドに IPv6 のみの VM インスタンスがある IPv6 のみのサブネットが必要です。
- --enable-ula-internal-ipv6フラグを使用してカスタムモードの VPC ネットワークを作成し、このネットワークのサブネットに内部 IPv6 範囲を構成します。- gcloud beta compute networks create VPC_NAME \ --subnet-mode=custom \ --enable-ula-internal-ipv6
- VPC ネットワーク内で、IPv6 のみのサブネットを作成します。 - gcloud beta compute networks subnets create SUBNET_NAME \ --network=VPC_NAME \ --region=REGION \ --stack-type=IPV6_ONLY \ --ipv6-access-type=INTERNAL
- 内部トラフィックがターゲット インスタンスに到達できるようにファイアウォール ルールを作成します。 - gcloud beta compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \ --network=VPC_NAME \ --target-tags=allow-ipv6-int \ --allow=tcp \ --source-ranges=::/0
- ネットワーク タグ - allow-sshを使用して VM への SSH 接続を許可するファイアウォール ルールを作成します。- gcloud beta 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(以降の手順で作成)に適用されます。 
- IPv6 のみの VM を作成します。 - gcloud beta compute instances create VM_INSTANCE_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV6_ONLY \ --zone=ZONE \ --image-family=debian-12 \ --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'
- 前の手順で作成した VM を含むターゲット インスタンスを作成します。 - gcloud beta compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --network=VPC_NAME \ --zone=ZONE
- TCP トラフィックをターゲット インスタンスに転送する IPv6 転送ルールを作成します。転送ルールは、ターゲット インスタンスと同じリージョンに作成する必要があります。 - gcloud beta 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
- クライアント VM を作成します。 - gcloud beta compute instances create CLIENT_VM_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV6_ONLY \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh
- 設定をテストします。 - 転送ルールの IP アドレスを取得します。 - gcloud beta compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \ --region=REGION
- クライアント VM への SSH 接続を確立します。 - gcloud beta compute ssh CLIENT_VM_NAME \ --zone=ZONE
- curl を使用して、転送ルールの IP アドレスに HTTP リクエストを送信します。 - curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80' - 出力は次のようになります。レスポンスを生成するバックエンド VM の名前がテキストで表示されます。 - Page served from: VM_INSTANCE_NAME.