ルートを使用する

このページでは、Google Cloud で Virtual Private Cloud(VPC)ネットワークのルートを作成して管理する方法について説明します。このページは、ルートで説明している Google Cloud のルートとその特性についてよく理解していることを前提としています。

新しいすべてのネットワークにはシステムによって生成された 2 種類のルートがあります。1 つ目はデフォルト ルートで、ユーザーが削除または置換できます。2 つ目はサブネット ルートで、サブネットごとに 1 つあります。対応するサブネット自体を削除しない限り、サブネット ルートは削除できません。

システム生成ルートに加えて、他のカスタム静的ルートを作成することもできます。

VPC ネットワークのルートを一覧表示する

Google Cloud CLI または API を使用して、次のタイプのルートを一覧表示するとともに詳細を表示できます。

次のタイプのルートは、gcloud CLI コマンドと API メソッドでは表示されません。

完全なルートビューを表示するには、Google Cloud コンソールを使用します。ポリシーベースのルートの一覧または詳細を表示するには、ポリシーベースのルートを使用するをご覧ください。

コンソール

  1. Google Cloud Console で、[ルート] ページに移動します。

    [ルート] に移動

  2. [適用されているルート] タブで、次の操作を行います。

    • VPC ネットワークを選択します。
    • リージョンを選択します。
  3. [表示] をクリックします。

  4. ルートタイプ、宛先 IP 範囲、ネクストホップ タイプなどでフィルタリングできます。

gcloud

次の gcloud CLI コマンドを使用して、前述のルートの一覧と詳細を表示します。

gcloud compute routes list \
    --filter="network=NETWORK_NAME" \
    --project=PROJECT_ID
gcloud compute routes describe ROUTE_NAME \
    --format="flattened()" \
    --project=PROJECT_ID

次のように置き換えます。

  • NETWORK_NAME: VPC ネットワークの名前。
  • PROJECT_ID: VPC ネットワークを含むプロジェクト ID。
  • ROUTE_NAME: ルートの名前。

API

次の API メソッドを使用して、前述のルートの一覧と詳細を表示できます。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes?filter=network="NETWORK_URL
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME

次のように置き換えます。

  • PROJECT_ID: VPC ネットワークを含むプロジェクト ID。
  • NETWORK_URL: VPC ネットワークの URL。
  • ROUTE_NAME: ルートの名前。

詳細については、routes.list メソッドroutes.get メソッドをご覧ください。

VM ネットワーク インターフェースに適用可能なルートを一覧表示する

Google Cloud コンソールを使用して、VM のネットワーク インターフェースに適用可能なルートを確認できます。このビューでは、下り(外向き)トラフィックに使用できるルートのリストを絞り込みます。

VM の特定のネットワーク インターフェースに適用可能なルートを表示するには、次の操作を行います。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. リストで VM インスタンスを見つけます。行の末尾にある その他の操作」メニューで、[ネットワークの詳細の表示] を選択します。

  3. インスタンスに複数のネットワーク インターフェースがある場合は、[ネットワーク インターフェースの詳細] セクションで、表示するネットワーク インターフェースを選択します。

  4. [ファイアウォールとルートの詳細] セクションで、[ルート] タブをクリックして、ネットワーク インターフェースに適用されているすべてのルートをルート名で並べ替えます。

静的ルートの追加と削除

VPC ネットワークにローカルな静的ルートとポリシーベースのルートを追加または削除できます。このセクションでは、ローカル静的ルートの追加と削除を行う方法について説明します。ポリシーベースのルートを追加または削除する方法について詳しくは、ポリシーベースのルートを使用するをご覧ください。

サブネット ルートは、サブネットを追加または削除すると自動的に追加または削除されます。サブネットを追加または削除する方法の詳細については、サブネットを操作するをご覧ください。

VPC ネットワーク ピアリングで接続された VPC ネットワーク内のすべてのルートは、それらのルートをエクスポートする VPC ネットワーク内で操作する必要があります。詳細については、ルート交換オプションをご覧ください。

静的ルートを追加する前に

静的ルートを追加する前に、次の点を確認してください。

  • 静的ルートで使用できるネクストホップの種類を十分に理解してください。IPv6 宛先のサポートなど、静的ルートのネクストホップの種類の詳細については、ネクストホップと機能をご覧ください。
  • ハイブリッド サブネットを使用しない場合は、静的ルートにサブネットやピアリング サブネット ルートの宛先範囲と一致する範囲や、それよりも限定された宛先範囲を設定することはできません。詳しくは、ルートの概要のカスタム静的ルートとの相互作用と VPC ネットワーク ピアリングに関するドキュメントのサブネットと静的ルートの相互作用をご覧ください。
  • 自動モードのネットワークを使用する際の競合を回避するために、宛先が 10.128.0.0/9 内に収まる静的ルートを作成しないでください。詳細については、自動モード ネットワーク用に予約された IP 範囲を確認してください。
  • 内部割り当て範囲と重複するカスタム静的ルートの送信先を設定することはできません。
  • VM をネクストホップとして使用するカスタム静的ルートを作成する前にネクストホップとしてのインスタンスに精通していることを確認してください。ネクストホップのインスタンスを選択した場合、Google Cloud はルートの作成時に VM が存在することのみを検証します。
  • ネットワーク タグを使用してルートを作成すると、そのタグを持つ VM のみがそのルートを受け取ります。ただし、タグ付き VM は、ネットワーク タグを持たないルートをすべて受け取ります。

静的ルートを追加する

静的ルートをネットワークに追加します。IPv6 宛先のサポートなど、静的ルートのネクストホップの種類の詳細については、ネクストホップと機能をご覧ください。

コンソール

  1. Google Cloud コンソールで、[ルート] ページに移動します。

    [ルート] に移動

  2. [ルート管理] タブをクリックします。

  3. [ルートを作成] をクリックします。

  4. ルートの名前と説明を指定します。

  5. [ネットワーク] リストで、ルートの既存のネットワークを選択します。

  6. [ルートのタイプ] リストで、[静的ルート] を選択します。

  7. [IP バージョン] リストで、必要な IP バージョンを選択します。

    • IPv4 静的ルートを作成するには、[IPv4] を選択します。
    • IPv6 静的ルートを作成するには、[IPv6] を選択します。
  8. 宛先 IP 範囲を指定します。IPv4 の場合、想定される最も広範囲な宛先は 0.0.0.0/0、IPv6 の場合は ::/0 です。

  9. ルートの優先度を指定します。優先度は、0(最も高い優先度)から 65535(最も低い優先度)の範囲で指定できます。

  10. 一致するネットワーク タグを持つ、一部のインスタンスにのみルートが適用されるようにするには、[インスタンス タグ] フィールドでそれらを指定します。ネットワーク上のすべてのインスタンスにルートが適用されるようにするには、このフィールドを空白のままにします。

  11. ルートのネクストホップを選択します。

    • デフォルト インターネット ゲートウェイ: インターネットと Google API およびサービスにパケットを配信します。
    • インスタンスを指定: VM インスタンスのネットワーク インターフェースにパケットを配信します。名前とゾーンで VM インスタンスを指定します。ルートの宛先が IPv6 アドレスの場合、VM インスタンスはデュアルスタックである必要があります。
    • インスタンスの IP アドレスを指定: VPC ネットワーク内の既存のインスタンスの IP アドレスを指定します。IPv6 静的ルート(プレビュー)の場合、インスタンスはデュアルスタックであることが必要です。有効なネクストホップ IP アドレスに関する重要な制限については、静的ルートのネクストホップをご覧ください。
    • VPN トンネルを指定: 静的ルーティングを使用して、既存の Classic VPN トンネルにパケットを配信します。
    • 内部パススルー ネットワーク ロードバランサの転送ルールを指定: 内部転送ルールの名前とリージョンで指定された内部パススルー ネットワーク ロードバランサにパケットを配信します。
  12. [作成] をクリックします。

gcloud

次の gcloud CLI コマンドを使用して新しいカスタム静的ルートを作成します。

gcloud compute routes create ROUTE_NAME \
    --network=NETWORK \
    --destination-range=DESTINATION_RANGE \
    --priority=PRIORITY \
    NEXT_HOP_SPECIFICATION

次のように置き換えます。

  • ROUTE_NAME: ルートの名前
  • NETWORK: ルートを含む VPC ネットワークの名前
  • DESTINATION_RANGE: このルートが適用される宛先の IPv4 アドレスまたは IPv6 アドレス。IPv4 の場合、想定される最も広範囲な宛先は 0.0.0.0/0、IPv6 の場合は ::/0 です。
  • PRIORITY: ルートの優先度0(最も高い優先度)から 65535(最も低い優先度)まで設定できます。
  • NEXT_HOP_SPECIFICATION: 静的ルートのネクストホップ。次のパラメータのいずれか、またはパラメータの組み合わせを使用します。

    • --next-hop-gateway=default-internet-gateway: インターネットと Google API およびサービスにパケットを配信します。
    • --next-hop-instance=INSTANCE_NAME--next-hop-instance-zone=ZONE: 既存の VM インスタンスのネットワーク インターフェースにパケットを配信します。名前とゾーンで VM インスタンスを指定します。ルートの宛先が IPv6 アドレスの場合、VM インスタンスはデュアルスタックである必要があります。
    • --next-hop-address=ADDRESS: VPC ネットワーク内の既存のインスタンスの IP アドレスを指定します。IPv6 静的ルート(プレビュー)の場合、インスタンスはデュアルスタックであることが必要です。有効なネクストホップ IP アドレスに関する重要な制限については、静的ルートのネクストホップをご覧ください。
    • --next-hop-vpn-tunnel=VPN_TUNNEL_NAME--next-hop-vpn-tunnel-region=REGION: 静的ルーティングを使用して、既存の Classic VPN トンネルにパケットを配信します。
    • --next-hop-ilb=FORWARDING_RULE--next-hop-ilb-region=REGION: 内部パススルー ネットワーク ロードバランサにパケットを配信します。内部転送ルール名(または IPv4 アドレス)とリージョンで VM インスタンスを指定します。

    カスタム静的ルートをネットワーク タグによる VM の選択にのみ適用するには、--tags フラグを追加し、1 つ以上のネットワーク タグを指定します。ネットワーク タグとカスタム静的ルートの連携の詳細については、「ルートの概要」の適用可能なルートをご覧ください。タグはカスタム静的ルートで使用できます。

gcloud CLI 構文の詳細については、SDK のドキュメントをご覧ください。

API

新しいカスタム静的ルートを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "destRange": "DESTINATION_RANGE",
  "priority": PRIORITY,
  "NEXT_HOP_SPECIFICATION"
}

次のように置き換えます。

  • PROJECT_ID: ルートが作成されるプロジェクトの ID
  • ROUTE_NAME: ルートの名前
  • NETWORK: ルートを含む VPC ネットワークの名前。
  • DESTINATION_RANGE: このルートが適用される宛先の IPv4 アドレス範囲または IPv6 アドレス範囲。IPv4 の場合、想定される最も広範囲な宛先は 0.0.0.0/0、IPv6 の場合は ::/0 です。
  • PRIORITY: ルートの優先度0(最も高い優先度)から 65535(最も低い優先度)まで設定できます。
  • NEXT_HOP_SPECIFICATION: 静的ルートのネクストホップ。次のパラメータのいずれか、またはパラメータの組み合わせを使用します。
    • nextHopGateway: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/gateways/default-internet-gateway: インターネットと Google API およびサービスにパケットを配信します。
    • nextHopInstance: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME: VM インスタンスのネットワーク インターフェースにパケットを配信します。名前とゾーンで VM インスタンスを指定します。ルートの宛先が IPv6 アドレスの場合、VM インスタンスはデュアルスタックである必要があります。
    • nextHopIp: ADDRESS: VPC ネットワーク内の既存のインスタンスの IP アドレスを指定します。IPv6 静的ルート(プレビュー)の場合、インスタンスはデュアルスタックであることが必要です。有効なネクストホップ IP アドレスに関する重要な制限については、静的ルートのネクストホップをご覧ください。
    • nextHopVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpnTunnels/VPN_TUNNEL_NAME: 静的ルーティングを使用して、既存の Classic VPN トンネルにパケットを配信します。
    • nextHopIlb: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE: 内部パススルー ネットワーク ロードバランサにパケットを配信します。内部転送ルール名(または IPv4 アドレス)とリージョンで VM インスタンスを指定します。

カスタム静的ルートをネットワーク タグによる VM の選択にのみ適用するには、tags フィールドを追加し、1 つ以上のネットワーク タグを指定します。ネットワーク タグとカスタム静的ルートの連携の詳細については、「ルートの概要」の適用可能なルートをご覧ください。タグはカスタム静的ルートで使用できます。

詳細については、routes.insert メソッドをご覧ください。

Terraform

静的ルートは、Terraform モジュールを使用して作成できます。

この静的ルートは、インターネットへのデフォルト ルートを作成します。

module "google_compute_route" {
  source       = "terraform-google-modules/network/google//modules/routes"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "default"

  routes = [
    {
      name              = "egress-internet"
      description       = "route through IGW to access internet"
      destination_range = "0.0.0.0/0"
      tags              = "egress-inet"
      next_hop_internet = "true"
    }
  ]
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

IPv4 のデフォルト ルートを追加する

next-hop-gatewaydefault-internet-gateway に設定された IPv4 のデフォルト静的ルート(0.0.0.0/0)は、VPC ネットワークごとに自動的に構成されます。必要に応じて、次の手順でこのルートを再作成します。

コンソール

  1. Google Cloud Console で、[ルート] ページに移動します。

    [ルート] に移動

  2. [ルート管理] タブをクリックします。

  3. [ルートを作成] をクリックします。

  4. ルートの名前と説明を指定します。

  5. ルートの既存のネットワークを選択します。

  6. [送信先 IP 範囲] に「0.0.0.0/0」と入力します。

  7. ルートの優先度を指定します。優先度は、0(最も高い優先度)から 65535(最も低い優先度)の範囲で指定できます。

  8. [ネクストホップ] で [デフォルト インターネット ゲートウェイ] を選択します。

  9. [作成] をクリックします。

gcloud

ネットワークの IPv4 デフォルト ルートを再作成します。

gcloud compute routes create ROUTE_NAME \
    --destination-range=0.0.0.0/0 \
    --network=NETWORK \
    --next-hop-gateway=default-internet-gateway

次のように置き換えます。

  • ROUTE_NAME: ルートの名前
  • NETWORK: ルートを含む VPC ネットワークの名前

API

ネットワークの IPv4 デフォルト ルートを再作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "destRange": "0.0.0.0/0",
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "nextHopGateway": "projects/PROJECT_ID/global/gateways/default-internet-gateway"
}

次のように置き換えます。

  • PROJECT_ID: ルートが作成されるプロジェクトの ID
  • ROUTE_NAME: ルートの名前
  • NETWORK_NAME: ルートを含む VPC ネットワークの名前

IPv6 のデフォルト ルートを追加する

外部 IP アクセスタイプを使用してデュアルスタック サブネットを作成すると、next-hop-gatewaydefault-internet-gateway に設定された IPv6 デフォルト静的ルート(::/0)が VPC ネットワークに自動的に構成されます。ルートを削除すると、VM からインターネットへのすべての IPv6 トラフィックをブロックできます。また、必要な場合は、ルートを再作成できます。

コンソール

  1. Google Cloud Console で、[ルート] ページに移動します。

    [ルート] に移動

  2. [ルート管理] タブをクリックします。

  3. [ルートを作成] をクリックします。

  4. ルートの名前と説明を指定します。

  5. ルートの既存のネットワークを選択します。

  6. [送信先 IP 範囲] に「::/0」と入力します。

  7. ルートの優先度を指定します。優先度は、0(最も高い優先度)から 65535(最も低い優先度)の範囲で指定できます。

  8. [ネクストホップ] で [デフォルト インターネット ゲートウェイ] を選択します。

  9. [作成] をクリックします。

gcloud

ネットワークの IPv6 デフォルト ルートを再作成します。

gcloud compute routes create ROUTE_NAME \
    --destination-range=::/0 \
    --network=NETWORK \
    --next-hop-gateway=default-internet-gateway

次のように置き換えます。

  • ROUTE_NAME: ルートの名前。
  • NETWORK: ルートを含む VPC ネットワークの名前。

API

ネットワークの IPv6 デフォルト ルートを再作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "destRange": "::/0",
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "nextHopGateway": "projects/PROJECT_ID/global/gateways/default-internet-gateway"
}

次のように置き換えます。

  • PROJECT_ID: ルートが作成されるプロジェクトの ID
  • ROUTE_NAME: ルートの名前
  • NETWORK_NAME: ルートを含む VPC ネットワークの名前

静的ルートを変更する

静的ルートは作成後に編集または更新することはできません。静的ルートを変更するには、そのルートを削除して、代替ルートを作成する必要があります。

静的ルートを削除する

ルートを削除するには、次のようにします。

コンソール

  1. Google Cloud Console で、[ルート] ページに移動します。

    [ルート] に移動

  2. [ルート管理] タブをクリックします。

  3. 削除するルールの横にあるチェックボックスをオンにします。

  4. [削除] をクリックします。

  5. もう一度 [削除] をクリックして確定します。

gcloud

カスタム静的ルートを削除するには、次の gcloud CLI コマンドを使用します。

gcloud compute routes delete ROUTE_NAME

ROUTE_NAME は、削除するルートの名前に置き換えます。

API

routes.delete メソッドを使用して、カスタム静的ルートを削除して VPC ネットワークから削除します。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME

次のように置き換えます。

  • PROJECT_ID: ルートが配置されているプロジェクトの ID。
  • ROUTE_NAME: 削除するルートの名前。

ルート変更の伝播

静的ルートを追加または削除すると、ルートは VPC ネットワーク内のすべてのリージョンと VM インスタンスに伝播されます。ルート オペレーションのステータスが PENDING または RUNNING の場合は、ルートの変更がキューに入っていることを示しています。

キューに入ると、ルート オペレーションのステータスが DONE に変わります。VPC ネットワークと VPC ネットワーク ピアリング ネットワーク内のすべての VM インスタンスが新しいルートを使用するか、古いルートの使用を停止するまでに、さらに 30 秒かかる場合があります。

複数の静的ルートを同時に追加または削除すると、変更が任意の順序で適用されます。送信順にルート変更が処理されるとは限りません。インスタンスが異なれば、変更が認識されるまでの時間も異なる可能性があります。

相互に依存するルート変更を行う必要がある場合は、前の変更のステータスが DONE となり、さらに 30 秒経過した後にのみ、後続の変更を一つずつ行う必要があります。

インスタンスで IP 転送を有効にする

デフォルトでは、IP 転送は無効であり、Google Cloud は厳密な送信元アドレスのチェックを行います。有効な下り(外向き)ファイアウォール構成に従い、VM は次の送信元を含むパケットを送信できます。

  • インスタンスのネットワーク インターフェース(NIC)のプライマリ内部 IPv4 アドレス。
  • インスタンスの NIC に構成されたエイリアス IP 範囲。
  • IPv6 アドレス範囲がサブネットで構成され、インスタンスがデュアルスタックの場合、NIC に割り当てられる IPv6 アドレス。
  • インスタンスが内部パススルー ネットワーク ロードバランサのバックエンドか、外部パススルー ネットワーク ロードバランサか、あるいはターゲット インスタンスから参照されている場合は、パススルー ロード バランシングまたはプロトコル転送用の転送ルールに関連付けられた内部または外部 IP アドレス。

VM をルートのネクストホップとして使用するには、送信元が上記のリストの IP アドレスまたは範囲のいずれとも一致しないパケットを VM が転送する必要があります。任意の送信元アドレスを持つパケットを転送するには、IP 転送を有効にする必要があります。

  • VM を作成または更新する場合は、このセクションの手順に沿って IP 転送を有効にします。IP 転送の有効化は、VM 上のすべての NIC に適用されます。
  • このセクションの手順に加えて、VM ゲスト オペレーティング システム内で IP 転送を有効にする必要があります。この操作を Linux で行うには、カーネル パラメータ net.ipv4.ip_forward(IPv4 の場合)、net.ipv6.conf.all.forwarding(IPv6 の場合)のいずれかまたは両方の値を 1 に設定します。

VM の作成時に IP 転送を有効にするには、次の手順を完了します。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. [インスタンスを作成] をクリックします。

  3. [詳細オプション] セクションで、[ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] を開きます。

  4. [ネットワーキング] セクションを開きます。

  5. [IP 転送] セクションで、[有効にする] チェックボックスをオンにします。

gcloud

インスタンスを作成する場合は、コマンドに --can-ip-forward フラグを追加します。

gcloud compute instances create ... --can-ip-forward

API

インスタンスを作成する場合は、canIpForward フィールドを使用して IP 転送を有効にします。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "canIpForward": true,
  ...other fields
}

次のように置き換えます。

  • PROJECT_ID: インスタンスが含まれているプロジェクトの ID
  • ZONE: インスタンスを含む Google Cloud ゾーン

詳細については、instances.insert メソッドをご覧ください。

Terraform

Terraform リソースを使用して、IP 転送を有効にした VM インスタンスを作成できます。

この例では、Terraform 引数に値が割り当てられていますが、変更可能です。

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace this with your project ID in quotes
  zone         = "southamerica-east1-b"
  name         = "instance-next-hop"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    network = "default"
  }
  can_ip_forward = true
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

IP 転送を有効にしたら、VM の作成プロセスに進みます

既存の VM で IP 転送を有効にするには、canIpForward インスタンス プロパティを更新します。

次のステップ