IPv6 静的ルートのネクストホップ インスタンス(タグなしとタグ付き)、ネクストホップ アドレス、ネクストホップ ゲートウェイを使用する

この Codelab について
schedule60 分
subject最終更新: 2025年3月21日
account_circle作成者: Ghaleb Al-Habian

静的カスタムルートは、VPC のデフォルトのルーティング動作に影響します。IPv6 カスタムルートが、新しいネクストホップ属性(next-hop-gateway、next-hop-instance、next-hop-address)をサポートするようになりました。この Codelab では、マルチ NIC VM インスタンスで接続された 2 つの VPC を使用して、これらの新しいネクストホップ オプションで IPv6 カスタムルートを使用する方法について説明します。また、ULA と GUA のアドレスを組み合わせて、新しいカスタムルート機能を使用して ULA VPC からパブリック インターネットへの到達可能性を提供する方法についても説明します。

  • ILB の名前を指定して、next-hop-ilb ネクストホップを持つ IPv6 カスタムルートを作成する方法
  • ILB の IPv6 アドレスを指定して、next-hop-ilb ネクストホップを持つ IPv6 カスタムルートを作成する方法
  • Google Cloud プロジェクト

2. 始める前に

Codelab をサポートするようにプロジェクトを更新する

この Codelab では、$variables を使用して、Cloud Shell での gcloud 構成の実装を支援します。

Cloud Shell で次の操作を行います。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export projectname=$(gcloud config list --format="value(core.project)")

ラボの全体的なアーキテクチャ

5fc56288b4f8ae05.png

両方のタイプのカスタム ルート ネクストホップを示すために、ULA アドレスを使用するクライアント VPC とサーバー VPC の 2 つの VPC を作成します。

クライアント VPC がサーバーにアクセスするには、2 つの ILB の間に挟まれたマルチ NIC ゲートウェイ インスタンスのグループの前に ILB を指す(ILB の名前を使用して)next-hop-ilb を使用してカスタムルートを使用します。(デフォルトの ::/0 ルートを削除した後)クライアント インスタンスへのルーティングを提供する場合は、ILB を指す next-hop-ilb(ILB のアドレスを使用)を含むカスタムルートを使用します。

3. クライアント VPC の設定

クライアント VPC を作成する

Cloud Shell で次の操作を行います。

gcloud compute networks create client-vpc \
    --project=$projectname \
    --subnet-mode=custom --mtu=1500 \
    --bgp-routing-mode=regional \
    --enable-ula-internal-ipv6

クライアント サブネットを作成する

Cloud Shell で次の操作を行います。

gcloud compute networks subnets create client-subnet  \
    --network=client-vpc \
    --project=$projectname \
    --range=192.168.1.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=internal \
    --region=us-central1

次のコマンドを使用して、割り当てられた IPv6 サブネットを環境変数に記録します。

export client_subnet=$(gcloud compute networks subnets \
    describe client-subnet \
    --project $projectname \
    --format="value(internalIpv6Prefix)" \
    --region us-central1)

クライアント インスタンスを起動する

Cloud Shell で次の操作を行います。

gcloud compute instances create client-instance \
    --subnet client-subnet \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

クライアント VPC トラフィック用にファイアウォール ルールを追加する

Cloud Shell で次の操作を行います。

gcloud compute firewall-rules create allow-gateway-client \
    --direction=INGRESS --priority=1000 \
    --network=client-vpc --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

クライアント インスタンスの IAP を許可するファイアウォール ルールを追加する

Cloud Shell で次の操作を行います。

gcloud compute firewall-rules create allow-iap-client \
    --direction=INGRESS --priority=1000 \
    --network=client-vpc --action=ALLOW \
    --rules=tcp:22 --source-ranges=35.235.240.0/20 \
    --project=$projectname 

クライアント インスタンスへの SSH アクセスを確認する

Cloud Shell で、クライアント インスタンスにログインします。

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

成功すると、クライアント インスタンスのターミナル ウィンドウが表示されます。SSH セッションを終了して、Codelab を続行します。

4. サーバー VPC の設定

サーバー VPC を作成する

Cloud Shell で次の操作を行います。

gcloud compute networks create server-vpc \
    --project=$projectname \
    --subnet-mode=custom --mtu=1500 \
    --bgp-routing-mode=regional \
    --enable-ula-internal-ipv6

サーバー サブネットを作成する

Cloud Shell で次の操作を行います。

gcloud compute networks subnets create server-subnet \
    --network=server-vpc \
    --project=$projectname \
    --range=192.168.0.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=internal \
    --region=us-central1

次のコマンドを使用して、割り振られたサブネットを環境変数に記録します。

export server_subnet=$(gcloud compute networks subnets \
    describe server-subnet \
    --project $projectname \
    --format="value(internalIpv6Prefix)" \
    --region us-central1)

サーバー VM を起動する

Cloud Shell で次の操作を行います。

gcloud compute instances create server-instance \
    --subnet server-subnet \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

クライアントからサーバーにアクセスできるようにファイアウォール ルールを追加する

Cloud Shell で次の操作を行います。

gcloud compute firewall-rules create allow-client-server \
    --direction=INGRESS --priority=1000 \
    --network=server-vpc --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

IAP を許可するファイアウォール ルールを追加する

Cloud Shell で次の操作を行います。

gcloud compute firewall-rules create allow-iap-server \
    --direction=INGRESS --priority=1000 \
    --network=server-vpc --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=35.235.240.0/20 \
    --project=$projectname 

ULA サーバー インスタンスに Apache をインストールする

Cloud Shell で、クライアント インスタンスにログインします。

gcloud compute ssh server-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

サーバー VM シェル内で、次のコマンドを実行します。

sudo apt update && sudo apt -y install apache2

Apache が実行されていることを確認する

sudo systemctl status apache2

デフォルトのウェブページを上書きする

echo '<!doctype html><html><body><h1>Hello World! From Server Instance!</h1></body></html>' | sudo tee /var/www/html/index.html

SSH セッションを終了して、Codelab を続行します。

5. Gateway インスタンスを作成する

マルチ NIC ゲートウェイ インスタンス テンプレートを作成する

Cloud Shell で次の操作を行います。

gcloud compute instance-templates create gateway-instance-template \
    --project=$projectname \
    --instance-template-region=us-central1 \
    --region=us-central1 \
--network-interface=stack-type=IPV4_IPV6,subnet=client-subnet,no-address \
--network-interface=stack-type=IPV4_IPV6,subnet=server-subnet,no-address \
    --can-ip-forward \
    --metadata=startup-script='#! /bin/bash 
sudo sysctl -w net.ipv6.conf.ens4.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens5.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens4.accept_ra_defrtr=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1'

マルチ NIC ゲートウェイ インスタンス グループを作成する

Cloud Shell で次の操作を行います。

gcloud compute instance-groups managed create gateway-instance-group \
    --project=$projectname \
    --base-instance-name=gateway-instance \
      --template=projects/$projectname/regions/us-central1/instanceTemplates/gateway-instance-template \
    --size=2 \
    --zone=us-central1-a

ゲートウェイ インスタンスを確認する

起動スクリプトが正しく渡され、v6 ルーティング テーブルが正しいことを確認します。ゲートウェイ インスタンスのいずれかに SSH 接続する

Cloud Shell で、次のコマンドを実行してゲートウェイ インスタンスを一覧表示します。

gcloud compute instances list \
    --project=$projectname \
    --zones=us-central1-a \
    --filter name~gateway \
    --format 'csv(name)'

インスタンス名の 1 つをメモし、次のコマンドでインスタンスに SSH 接続します。

Cloud Shell で、いずれかのゲートウェイ インスタンスにログインします。

gcloud compute ssh gateway-instance-<suffix> \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ゲートウェイ VM シェル内で次のコマンドを実行して、IPv6 転送を確認します。

sudo sysctl net.ipv6.conf.all.forwarding

このコマンドは、IPv6 転送が有効であることを示す値「1」を返します。

インスタンスの IPv6 ルーティング テーブルを確認する

ip -6 route show

ULA サブネット ルートと GUA サブネット ルートの両方と、デフォルト ルートが GUA インターフェースを指している出力例。

::1 dev lo proto kernel metric 256 pref medium
2600:1900:4000:7a7f:0:1:: dev ens4 proto kernel metric 256 expires 83903sec pref medium
2600:1900:4000:7a7f::/65 via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium
fd20:3df:8d5c::1:0:0 dev ens5 proto kernel metric 256 expires 83904sec pref medium
fd20:3df:8d5c::/64 via fe80::4001:c0ff:fea8:1 dev ens5 proto ra metric 1024 expires 84sec pref medium
fe80::/64 dev ens5 proto kernel metric 256 pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium

SSH セッションを終了して、Codelab を続行します。

6. ロードバランサ コンポーネントを作成する

両方の VPC にルートを作成する前に、ゲートウェイ インスタンスの両側に内部パススルー ロードバランサを作成してトラフィックを転送する必要があります。

この Codelab で作成するロードバランサは、次の要素で構成されています。

  • ヘルスチェック: この Codelab では、ポート 22 をターゲットとするシンプルなヘルスチェックを作成します。ヘルスチェックはデプロイされた状態では機能しません(ヘルスチェックを許可し、ゲートウェイ インスタンスに特別なルートを作成するファイアウォール ルールを追加する必要があります)。この Codelab では IPv6 転送に焦点を当てているため、すべてのバックエンドが正常でない場合は、デフォルトの内部パススルー ロードバランサのトラフィック分散動作(最後の手段としてすべてのバックエンドに転送)を使用します。
  • バックエンド サービス: バックエンド サービスにはプロトコル TCP を使用します。ただし、ロードバランサはルーティング用に作成されるため、バックエンド サービス プロトコルに関係なく、すべてのプロトコルが転送されます。
  • 転送ルール: VPC ごとに転送ルールを作成します。
  • 内部 IPv6 アドレス: この Codelab では、転送ルールがサブネットから IPv6 アドレスを自動的に割り当てるようにします。

ヘルスチェックを作成する

Cloud Shell で次の操作を行います。

gcloud compute health-checks create tcp tcp-hc-22 \
    --project=$projectname \
    --region=us-central1 \
    --port=22

バックエンド サービスを作成する

Cloud Shell で次の操作を行います。

gcloud compute backend-services create bes-ilb-clientvpc \
    --project=$projectname \
    --load-balancing-scheme=internal \
    --protocol=tcp \
    --network=client-vpc \
    --region=us-central1 \
    --health-checks=tcp-hc-22 \
    --health-checks-region=us-central1

gcloud compute backend-services create bes-ilb-servervpc \
    --project=$projectname \
    --load-balancing-scheme=internal \
    --protocol=tcp \
    --network=server-vpc \
    --region=us-central1 \
    --health-checks=tcp-hc-22 \
    --health-checks-region=us-central1

バックエンド サービスにインスタンス グループを追加する

Cloud Shell で次の操作を行います。

gcloud compute backend-services add-backend bes-ilb-clientvpc \
    --project=$projectname \
    --region=us-central1 \
    --instance-group=gateway-instance-group \
    --instance-group-zone=us-central1-a
gcloud compute backend-services add-backend bes-ilb-servervpc \
    --project=$projectname \
    --region=us-central1 \
    --instance-group=gateway-instance-group \
    --instance-group-zone=us-central1-a

転送ルールを作成する

Cloud Shell で次の操作を行います。

gcloud compute forwarding-rules create fr-ilb-clientvpc \
    --project=$projectname \
    --region=us-central1 \
    --load-balancing-scheme=internal \
    --network=client-vpc \
    --subnet=client-subnet \
    --ip-protocol=TCP \
    --ip-version=IPV6 \
    --ports=ALL \
    --backend-service=bes-ilb-clientvpc \
    --backend-service-region=us-central1

gcloud compute forwarding-rules create fr-ilb-servervpc \
    --project=$projectname \
    --region=us-central1 \
    --load-balancing-scheme=internal \
    --network=server-vpc \
    --subnet=server-subnet \
    --ip-protocol=TCP \
    --ip-version=IPV6 \
    --ports=ALL \
    --backend-service=bes-ilb-servervpc \
    --backend-service-region=us-central1

Cloudshell で次のコマンドを実行して、両方の転送ルールの IPv6 アドレスを記録します。

export fraddress_client=$(gcloud compute forwarding-rules \
    describe fr-ilb-clientvpc \
    --project $projectname \
    --format="value(IPAddress)" \
    --region us-central1)

export fraddress_server=$(gcloud compute forwarding-rules \
    describe fr-ilb-servervpc \
    --project $projectname \
    --format="value(IPAddress)" \
    --region us-central1)

7. ロードバランサへのルートを作成してテストする(ロードバランサのアドレスを使用)

このセクションでは、ロードバランサの IPv6 アドレスをネクストホップとして使用して、クライアント VPC とサーバー VPC の両方にルートを追加します。

サーバーのアドレスをメモする

Cloud Shell で次の操作を行います。

gcloud compute instances list \
   --project $projectname \
   --zones us-central1-a \
   --filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address)'

これにより、サーバー インスタンス名とその IPv6 プレフィックスの両方が出力されます。出力例

server-instance,fd20:3df:8d5c:0:0:0:0:0

サーバーのアドレスをメモしておきます。これは、後でクライアント インスタンスの curl コマンドで使用します。残念ながら、SSH セッションを介して転送されないため、環境変数を使用してこれらの情報を簡単に保存することはできません。

クライアントから ULA サーバー インスタンスに curl コマンドを実行する

新しいルートを追加する前に動作を確認できます。クライアント インスタンスから server-instance1 に対して curl コマンドを実行します。

Cloud Shell で、クライアント インスタンスにログインします。

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

クライアント インスタンス内で、server1 インスタンスの ULA IPv6 アドレスを使用して curl を実行します(このコマンドは、curl の待機時間が長くなりすぎないように、5 秒の短いタイムアウトを設定します)。

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

クライアント VPC にサーバー VPC へのルートがまだないため、この curl コマンドはタイムアウトします。

これを修正しましょう。現時点では SSH セッションを終了します。

クライアント VPC にカスタムルートを追加する

クライアント VPC に ULA プレフィックスへのルートがないためです。次に、アドレスでクライアントサイド ILB を指すルートを作成して、ルートを追加します。

注: IPv6 内部パススルー ロードバランサには /96 アドレスが割り当てられます。アドレスを次のコマンドに渡す前に、アドレスから /96 マスクを削除する必要があります。(bash ではインプレース置換が使用されます)。

Cloud Shell で次の操作を行います。

gcloud compute routes create client-to-server-route \
   --project=$projectname \
   --destination-range=$server_subnet \
   --network=client-vpc \
   --next-hop-ilb=${fraddress_client//\/96}

クライアント インスタンスに SSH で接続します。

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

クライアント インスタンス内で、サーバー インスタンスへの curl をもう一度試みます。(このコマンドは、curl の待機時間が長くなりすぎないように、短いタイムアウト(5 秒)を設定しています)。

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

サーバー VPC に、ゲートウェイ インスタンスを経由してクライアント VPC に戻るルートがまだないため、この curl コマンドでもタイムアウトします。

SSH セッションを終了して、Codelab を続行します。

サーバー VPC にカスタムルートを追加する

Cloud Shell で次の操作を行います。

gcloud compute routes create server-to-client-route \
   --project=$projectname \
   --destination-range=$client_subnet \
   --network=server-vpc \
  --next-hop-ilb=${fraddress_server//\/96}

クライアント インスタンスに SSH で接続します。

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

クライアント インスタンス内で、サーバー インスタンスへの curl をもう一度試みます。

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

この curl コマンドが成功し、クライアント インスタンスから ULA サーバー インスタンスへのエンドツーエンドの到達性が示されます。この接続は、ネクストホップとして next-hop-ilb を使用する IPv6 カスタムルートを使用することでのみ可能です。

出力例:

<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[fd20:3df:8d5c:0:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server Instance!</h1></body></html>

SSH セッションを終了して、Codelab を続行します。

8. ロードバランサへのルートを作成してテストする(ロードバランサ名を使用)

また、next-hop-ilb は、IPv6 アドレスではなくロードバランサの名前を参照することもできます。このセクションでは、その手順について説明します。また、クライアントとサーバー間の接続が確立されていることをテストします。

以前のルートを削除する

インスタンス名を使用するカスタムルートを削除して、カスタムルートを追加する前の状態に環境を復元しましょう。

Cloud Shell で次の操作を行います。

gcloud compute routes delete client-to-server-route  --quiet --project=$projectname
gcloud compute routes delete server-to-client-route  --quiet --project=$projectname

クライアントから ULA サーバー インスタンスに curl コマンドを実行する

以前のルートが正常に削除されたことを確認するには、クライアント インスタンスから server-instance1 に対して curl コマンドを実行します。

Cloud Shell で、クライアント インスタンスにログインします。

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

クライアント インスタンス内で、server1 インスタンスの ULA IPv6 アドレスを使用して curl を実行します(このコマンドは、curl の待機時間が長くなりすぎないように、5 秒の短いタイムアウトを設定します)。

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

クライアント VPC にサーバー VPC へのルートがないため、この curl コマンドはタイムアウトします。

クライアント VPC とサーバー VPC にカスタムルートを追加する

クライアント VPC とサーバー VPC の両方にカスタム ルートを再度追加しますが、コマンドで ILB のアドレスではなく、ILB の名前とリージョンを使用します。

Cloud Shell で次の操作を行います。

gcloud compute routes create client-to-server-route \
   --project=$projectname \
   --destination-range=$server_subnet \
   --network=client-vpc \
   --next-hop-ilb=fr-ilb-clientvpc \
   --next-hop-ilb-region=us-central1

gcloud compute routes create server-to-client-route \
   --project=$projectname \
   --destination-range=$client_subnet \
   --network=server-vpc \
   --next-hop-ilb=fr-ilb-servervpc \
   --next-hop-ilb-region=us-central1

クライアント インスタンスに SSH で接続します。

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

クライアント インスタンス内で、サーバー インスタンスへの curl をもう一度試みます。(このコマンドは、curl の待機時間が長くなりすぎないように、短いタイムアウト(5 秒)を設定しています)。

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

この curl コマンドが成功し、クライアント インスタンスから ULA サーバー インスタンスへのエンドツーエンドの到達性が示されます。

9. クリーンアップ

カスタムルートをクリーンアップする

Cloud Shell で次の操作を行います。

gcloud compute routes delete client-to-server-route  --quiet --project=$projectname
gcloud compute routes delete server-to-client-route  --quiet --project=$projectname

LB コンポーネントをクリーンアップする

Cloud Shell で次の操作を行います。

gcloud compute forwarding-rules delete fr-ilb-clientvpc --region us-central1 --quiet --project=$projectname
gcloud compute forwarding-rules delete fr-ilb-servervpc --region us-central1 --quiet --project=$projectname

gcloud compute backend-services delete bes-ilb-clientvpc --region us-central1 --quiet --project=$projectname
gcloud compute backend-services delete bes-ilb-servervpc --region us-central1 --quiet --project=$projectname

gcloud compute health-checks delete tcp-hc-22 --region us-central1 --quiet --project=$projectname

インスタンスとインスタンス テンプレートをクリーンアップする

Cloud Shell で次の操作を行います。

gcloud compute instances delete client-instance --zone us-central1-a --quiet --project=$projectname

gcloud compute instances delete server-instance --zone us-central1-a --quiet --project=$projectname


gcloud compute instance-groups managed delete gateway-instance-group --zone us-central1-a --quiet --project=$projectname

gcloud compute instance-templates delete gateway-instance-template --region us-central1 --quiet --project=$projectname

サブネットをクリーンアップする

Cloud Shell で次の操作を行います。

gcloud compute networks subnets delete client-subnet --region=us-central1 --quiet --project=$projectname

gcloud compute networks subnets delete server-subnet --region=us-central1 --quiet --project=$projectname

ファイアウォール ルールをクリーンアップする

Cloud Shell で次の操作を行います。

gcloud compute firewall-rules delete allow-iap-client  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-gateway-client  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server  --quiet --project=$projectname

VPC をクリーンアップする

Cloud Shell で次の操作を行います。

gcloud compute networks delete client-vpc --quiet --project=$projectname
gcloud compute networks delete server-vpc --quiet --project=$projectname

10.完了

ネクストホップを next-hop-ilb に設定した静的カスタム IPv6 ルートを正常に使用できました。また、これらのルートを使用してエンドツーエンドの IPv6 通信を検証しました。

次のステップ

以下の Codelab をご覧ください。

その他の資料と動画

リファレンス ドキュメント