ルートの使用

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

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

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

ルートの検査

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

次のいずれかの方法でルートを表示できます。

Console

すべてのネットワークのルートを一覧表示するには、次のようにします。

  1. Google Cloud Console の [ルート] ページに移動します。
    [ルート] ページに移動
  2. [ルートをフィルタ] テキスト ボックスを使用して、表示されるルートを制限できます。たとえば、VPC ネットワークの名前を入力し、Enter キーを押すことで、特定のネットワークのルートを表示できます。
  3. [すべて] タブには、すべてのタイプのルートが表示されます。カスタムの動的ルートのみを表示するには、[動的] タブをクリックします。

gcloud

デフォルト ルートサブネット ルートカスタム静的ルートをリストするには、次の gcloud コマンドを使用します。NETWORK_NAME は、使用するネットワークの名前に置き換えてください。

gcloud compute routes list --filter="network=NETWORK_NAME"

gcloud compute routes list では、カスタム動的ルートは表示されません。動的ルートを表示するには、ルートを学習した Cloud Router のステータスを照会する必要があります。次のコマンドをテンプレートとして使用します。CLOUD_ROUTER_NAME は、Cloud Router の名前に置き換えて、REGION はそのリージョンに置き換えます。

gcloud compute routers get-status CLOUD_ROUTER_NAME \
    --region=REGION \
    --format="flattened(result.bestRoutes)"

API

VPC ネットワークのデフォルト ルートサブネット ルートカスタム静的ルートの一覧を表示します。

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

プレースホルダを有効な値に置き換えます。

  • PROJECT_ID は、VPC ネットワークが配置されているプロジェクトの ID です。
  • NETWORK_URL は、一覧表示するルートを含む VPC ネットワークの URL です。

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

list routes API では、カスタム動的ルートは表示されません。動的ルートを表示するには、ルートを学習した Cloud Router のステータスを照会する必要があります。詳細については、Cloud Router のドキュメントをご覧ください。

ルートの説明

システム生成ルートとカスタム静的ルートの詳細(送信先やネクストホップなど)を表示するには、以下のようにします。

Console

  1. Google Cloud Console の [ルート] ページに移動します。
    [ルート] ページに移動
  2. ルートの名前をクリックします。

gcloud

システム生成ルートとカスタム静的ルートの詳細を表示するには、次の gcloud コマンドを使用します。ROUTE_NAME は、調べるルートの名前に置き換えます。

gcloud compute routes describe ROUTE_NAME --format="flattened()"

API

詳細を表示するシステム生成ルートまたはカスタム静的ルートを指定します。

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

プレースホルダを有効な値に置き換えます。

  • PROJECT_ID は、ルートが配置されているプロジェクトの ID です。
  • ROUTE_NAME は、説明するルートの名前です。

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

VM のルート

このセクションの手順に従って、VM インスタンスの特定のネットワーク インターフェースの観点から、適用可能なルートと適用されているルートを表示できます。適用されているルートは、ルーティング順序を考慮する適用可能なルートのサブセットです。

ネットワーク インターフェースの適用可能なルート

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

VM の特定のネットワーク インターフェースの適用可能なルートを表示するには、以下のようにします。

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. リストで VM インスタンスを見つけます。[その他の操作] メニュー()で、[ネットワークの詳細の表示] を選択します。
  3. インスタンスに複数のネットワーク インターフェースがある場合は、[ネットワーク インターフェースの詳細] セクションに表示するネットワーク インターフェースを選択します。
  4. [ルート] タブをクリックすると、ネットワーク インターフェースに適用されているすべてのルートがルート名順に表示されます。

ルート分析と適用されているルート

ルート分析は、適用可能なルートとルーティング順序を考慮して適用されているルートを特定するのに役立ちます。ルートは送信先 IP 範囲順に一覧表示されるため、特定の送信先範囲にトラフィックを送信するために使用される適用可能なルートがわかります。

たとえば、ネットワーク インターフェースで複数の適用可能なルートを使用する場合があります。詳細については、「ルートの概要」のルーティング順序をご覧ください。

適用範囲とルーティング順序に基づいてルートを表示するには、ルート分析を使用します。

  1. Google Cloud Console で、[VM インスタンス] ページに移動して、表示するインスタンスを探します。
    [VM インスタンス] ページに移動
  2. インスタンスの [その他の操作] メニュー()で、[ネットワークの詳細の表示] を選択します。
  3. インスタンスに複数のネットワーク インターフェースがある場合は、[ネットワーク インターフェースの詳細] セクションに表示するネットワーク インターフェースを選択します。
  4. [ネットワーク分析] セクションの [ルート分析] タブを選択します。
  5. テーブルに IP アドレス範囲が最も具体的なものから順に表示されるので、特定の送信先範囲に適用されるルートを確認します。

[ルート分析] タブの出力例は次のとおりです。

VM インスタンスに適用されているルート(クリックして拡大)
VM インスタンスに適用されているルート(クリックして拡大)

ルートの追加と削除

静的ルートの追加

新しい静的ルートを作成するには、次の手順に従います。操作を行う前に、以下の点を十分に理解するようにしてください。

  • カスタム静的ルートには、VPC ネットワーク内のサブネット ルートによって使用されている送信先範囲と一致する、またはそれよりも限定された送信先範囲を設定することはできません。

    • VPC ネットワーク ピアリングを使用して 2 つの VPC ネットワークを接続する場合、一方のネットワーク内のカスタム静的ルートに、両方のネットワーク内にあるサブネット ルートと一致する、またはそれよりも限定された送信先を設定することはできません。Google Cloud では、このようにサブネット ルートと競合するカスタム静的ルートは拒否されます。
  • 自動モードのネットワークを使用する際の競合を回避するために、宛先が 10.128.0.0/9 内に収まる静的ルートを作成しないでください。詳細については、自動モード ネットワーク用に予約された IP 範囲を確認してください。

  • 内部割り当て範囲と重複するカスタム静的ルートの送信先を設定することはできません。

  • VM をネクストホップとして使用するカスタム静的ルートを作成する前にネクストホップとしてのインスタンスに精通していることを確認してください。ネクストホップのインスタンスを選択した場合、Google Cloud はルートの作成時に VM が存在することのみを検証します。

  • ネットワーク タグを使用してルートを作成すると、そのタグを持つ VM のみがそのルートを受け取ります。ただし、タグ付き VM は、ネットワーク タグを持たないルートをすべて受け取ります。

Console

  1. Google Cloud Console の [ルート] ページに移動します。
    [ルート] ページに移動
  2. [ルートを作成] をクリックします。
  3. ルートの名前説明を指定します。
  4. ルートが適用される既存のネットワークを選択します。
  5. 送信先 IP の範囲を指定して、ルートの送信先を定義します。
  6. ルートの優先度を指定します。優先度は、ルートに同等の送信先がある場合に、ルーティングの順序を決定するためにのみ使用されます。詳細については、静的ルートのパラメータをご覧ください。
  7. 一致するネットワーク タグを持つ、一部のインスタンスにのみルートが適用されるようにするには、[インスタンス タグ] フィールドでそれらを指定します。ネットワーク上のすべてのインスタンスにルートが適用されるようにする場合、あるいは内部 TCP / UDP ロードバランサをルートのネクストホップとして選択する場合は、このフィールドを空白のままにします。ネットワーク タグは、内部 TCP / UDP ロードバランサをネクストホップとして持つルートに適用されません。
  8. ルートのネクストホップを選択します。

    • [デフォルト インターネット ゲートウェイ] を選択すると、インターネットへのルートが作成されます。
    • [インスタンスを指定] を選択すると、名前でインスタンスを選択できます。トラフィックは、IP アドレスが変更されても、そのインスタンス(または、同じゾーン内の同じ名前を持つ、代替インスタンス)にルーティングされます。
    • [IP アドレスを指定] を選択すると、VPC ネットワーク内の既存インスタンスの IP アドレスを入力できます。有効なネクストホップ IP アドレスに関する重要な制限については、静的ルートのネクストホップをご覧ください。
    • [VPN トンネルを指定] を選択すると、ネクストホップとして既存の Cloud VPN トンネルを選択できます。トンネルは、ポリシーベースのルーティングを使用するか、ルートベースの VPN である必要があります。
    • 内部 TCP / UDP ロードバランサの転送ルール名または IP アドレスを指定する場合、ネクストホップとして既存の内部 TCP / UDP ロードバランサを指定できるテキスト ボックスが表示されます。

    ネクストホップの種類の詳細については、「ルートの概要」の静的ルートのネクストホップをご覧ください。

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

gcloud

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

gcloud compute routes create ROUTE_NAME \
    --destination-range=DEST_RANGE \
    --network=NETWORK \
    NEXT_HOP_SPECIFICATION

プレースホルダを有効な値に置き換えます。

  • ROUTE_NAME はルートの名前です。
  • DESTINATION_RANGE は、このルートが適用される送信先 IP アドレスを表します。最も広範囲な宛先は 0.0.0.0/0 です。
  • NETWORK は、ルートを含む VPC ネットワークの名前です。
  • NEXT_HOP_SPECIFICATION は、カスタム静的ルートのネクストホップを表します。ネクストホップとして次のいずれか 1 つのみを指定する必要があります。ネクストホップの種類の詳細については、「ルートの概要」の静的ルートのネクストホップをご覧ください。
    • --next-hop-gateway=default-internet-gateway: このネクストホップを使用して、インターネットや限定公開の Google アクセスのための IP アドレスなどに VPC ネットワークの外部のトラフィックを送信します。
    • --next-hop-instance=INSTANCE_NAME--next-hop-instance-zone=ZONE: このネクストホップを使用して、トラフィックを名前とゾーンで既存の VM インスタンスに転送します。トラフィックは、ルートと同じネットワークにある VM のネットワーク インターフェースのプライマリ内部 IP アドレスに送信されます。
    • --next-hop-address=ADDRESS: このネクストホップを使用して、トラフィックを既存の VM インスタンスの IP アドレスに転送します。
    • --next-hop-ilb=FORWARDING_RULE_NAME--next-hop-ilb-region=REGION: このネクストホップと内部 TCP / UDP ロードバランサを使用して、内部転送ルール名(IP アドレス)とリージョンで指定されたロードバランサにトラフィックを分散します。ロードバランサは正常なバックエンド間でトラフィックを分散します。ここでは、Bump-in-the-Wire(BITW)方式が採用され、ロードバランサはクライアントに対して透過的になっています。
    • --next-hop-vpn-tunnel=VPN_TUNNEL_NAME--next-hop-vpn-tunnel-region=REGION: このネクストホップを使用して、静的ルーティングを使用する Cloud VPN トンネルにトラフィックを転送します。

ネクストホップの種類の詳細については、「ルートの概要」の静的ルートのネクストホップをご覧ください。

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

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

API

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

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

プレースホルダを有効な値に置き換えます。

  • PROJECT_ID は、ルートが作成されるプロジェクトの ID です。
  • DESTINATION_RANGE は、このルートが適用される送信先 IP アドレスを表します。最も広範囲な宛先は 0.0.0.0/0 です。
  • ROUTE_NAME はルートの名前です。
  • NETWORK_NAME は、ルートを含む VPC ネットワークの名前です。
  • NEXT_HOP_SPECIFICATIONVALUE は、カスタム静的ルートのネクストホップです。NEXT_HOP_SPECIFICATION には、ネクストホップ フィールド(nextHopIpnextHopGatewaynextHopInstancenextHopIlbnextHopVpnTunnel)のいずれか 1 つのみを指定する必要があります。ネクストホップの種類の詳細については、「ルートの概要」の静的ルートのネクストホップをご覧ください。

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

Terraform

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

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

module "google_compute_route" {
  source       = "terraform-google-modules/network/google//modules/routes"
  version      = "~> 3.2.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"
    }
  ]
}

IPv6 のデフォルト ルートの追加

サポートされている IPv6 ルートはデフォルト ルート(::/0)のみで、next-hop-gatewaydefault-internet-gateway に設定されています。

このルートは、サブネットで IPv6 を有効にすると VPC ネットワークに自動的に構成されます。ルートを削除すると、VM からインターネットへのすべての IPv6 トラフィックをブロックできます。必要であれば、ルートを再作成できます。

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 ネットワークの名前です。

ルートの削除

システム生成のデフォルト ルートまたはカスタム静的ルートを削除できます。その他のタイプのルートについては、次のようになります。

  • サブネット ルートは、対応するサブネットを削除しなければ削除できません

  • Cloud Router によって学習された動的ルートを削除するには、その BGP ピアルーターを構成して、ルートのアドバタイジングを停止する必要があります。

IPv6 のデフォルト ルートを削除するには、gcloud コマンドライン ツールまたは API 命令を使用します。IPv6 のデフォルト ルートを削除すると、VM は IPv6 アドレスを使用して他のリージョンの VM に接続できなくなります。

Console

  1. Google Cloud Console の [ルート] ページに移動します。
    [ルート] ページに移動
  2. 削除するルールの横にあるチェックボックスをオンにします。
  3. [削除] をクリックします。
  4. もう一度 [削除] をクリックして確定します。

gcloud

次の gcloud コマンドを使用して、カスタム静的ルートを削除します。ROUTE_NAME は、削除するルートの名前に置き換えます。

gcloud compute routes delete ROUTE_NAME

API

カスタム静的ルートを削除し、VPC ネットワークから削除します。

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

プレースホルダを有効な値に置き換えます。

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

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

オペレーションの順序

ルートの追加または削除をリクエストすると、変更がステージングされ、最終的に一貫性のある設計を使用して、ネットワーク内のインスタンスに伝搬されます。ステータスが PENDING または RUNNING である変更リクエストは、そのリクエストがまだ処理されていないことを示します。処理が終わると、変更リクエストのステータスは DONE になります。

一連の順序で変更リクエストを行っても、変更は一貫性のない順序で適用される場合があります。変更リクエストを送信した順番でリクエストが処理されるという保証はありません。また、インスタンスが異なれば、変更が認識されるまでの時間も異なる可能性があります。

インスタンスに対する IP 転送の有効化

デフォルトで、Google Cloud はパケットに対して厳密な送信元と宛先のチェックを行うため、次のようになります。

  • VM インスタンスでは、ネットワーク内のそのインターフェースの内部 IP アドレスと一致するように送信元が設定されたパケットのみを送信できます。
  • パケットは、それらの送信先が、ネットワーク内のインスタンスのインターフェースの IP アドレスと一致する場合にのみ、インスタンスに配信されます。

そのため、デフォルトでは、VM は別の VM から送信されたパケットを転送できません。

ルートのネクストホップとして VM を使用するには、その VM は、それ自体を除く宛先を持つパケットを受信する必要があります。そのようなパケットは転送されるため、それらの送信元はそれ自体の内部 IP とは異なります。このようにするには、VM に対する IP 転送を有効にする必要があります。IP 転送が有効な場合、Google Cloud はパケットの送信元と宛先のチェックを強制しません。

IP 転送は、VM の作成時、または既存の VM の canIpForward インスタンス プロパティの更新で有効にできます。IP 転送は VM レベルで有効になり、VM に接続されているすべてのインターフェースに適用されます。

VM 作成時に IP 転送を有効にする

ここでは、VM の作成時に IP 転送を有効にする方法について説明します。既存の VM で IP 転送を有効にする必要がある場合は、canIpForward インスタンス プロパティを更新します。

Console

  1. [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. [管理、ディスク、ネットワーク、SSH 認証鍵] をクリックします。
  4. [ネットワーキング] をクリックします。
  5. 編集ボタンをクリックして、ネットワーク インターフェースを選択します。
  6. ネットワーク インターフェースについては、[IP 転送] メニューから [オン] を選択します。
  7. 他のインスタンス パラメータを指定します。
  8. [作成] をクリックします。

gcloud

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
}

次のステップ

  • ルートの概要でルートの詳細を確認する。
  • VPC の概要で Google Cloud VPC ネットワークの詳細を確認する。
  • VPC ネットワークの作成と変更の手順を、VPC の使用で確認する。