ルートの使用

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

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

  • VM をネクストホップとして使用するカスタム静的ルートを作成する前にネクストホップとしてのインスタンスに精通していることを確認してください。ネクストホップのインスタンスを選択した場合、Google Cloud はルートの作成時に 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 ロードバランサの転送ルールを指定する] のテキスト ボックスを使用すると、既存の内部 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 負荷分散を使用して、内部転送ルール名とリージョンの指定に従ってトラフィックをロードバランサに分散します。ロードバランサは正常なバックエンド間でトラフィックを分散します。ここでは、Bump-in-the-Wire(BITW)方式が採用され、ロードバランサはクライアントに対して透過的になっています。
    • --next-hop-vpn-tunnel=VPN_TUNNEL_NAME--next-hop-vpn-tunnel-region=REGION: このネクストホップを使用して、静的ルートを使用する Cloud VPN トンネルにトラフィックを転送します。

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

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

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

API

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

    POST https://www.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 には、nextHopIpnextHopGatewaynextHopInstancenextHopIlb または nextHopVpnTunnel のいずれかのネクストホップ フィールドを指定する必要があります。ネクストホップの種類の詳細については、「ルートの概要」の静的ルートのネクストホップをご覧ください。

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

ルートの削除

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

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

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

Console

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

gcloud

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

    gcloud compute routes delete ROUTE_NAME
    

API

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

    DELETE https://www.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 はパケットの送信元と宛先のチェックを強制しません。

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://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
      "canIpForward": true,
      ...other fields
    }
    

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

  • PROJECT_ID は、インスタンスを作成するプロジェクトの ID です。
  • ZONE は、インスタンスを作成する Google Cloud ゾーンです。

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

次のステップ

  • ルートの概要でルートの詳細を確認する。
  • GCP VPC ネットワークの詳細について、VPC の概要を参照する。
  • VPC ネットワークの作成と変更の手順を、VPC の使用で確認する。