ルートを使用する
このページでは、Google Cloud で Virtual Private Cloud(VPC)ネットワークのルートを作成して管理する方法について説明します。このページは、ルートで説明しているさまざまなタイプの Google Cloud のルートとその特性についてよく理解していることを前提としています。
新しいすべてのネットワークにはシステムによって生成された 2 種類のルートがあります。1 つ目はデフォルト ルートで、ユーザーが削除または置換できます。2 つ目はサブネット ルートで、サブネットごとに 1 つあります。対応するサブネット自体を削除しない限り、サブネット ルートは削除できません。
システム生成ルートに加えて、他のカスタム静的ルートを作成することもできます。
VPC ネットワークのルートを一覧表示する
Google Cloud CLI または API を使用して、次のタイプのルートを一覧表示するとともに詳細を表示できます。
次のタイプのルートは、gcloud CLI コマンドと API メソッドでは表示されません。
完全なルートビューを表示するには、Google Cloud コンソールを使用します。ポリシーベースのルートの一覧または詳細を表示するには、ポリシーベースのルートを使用するをご覧ください。
コンソール
Google Cloud コンソールで、[ルート] ページに移動します。
[適用されているルート] タブで、次の操作を行います。
- [VPC ネットワーク] を選択します。
- リージョンを選択します。
[表示] をクリックします。
ルートタイプ、宛先 IP 範囲、ネクストホップ タイプなどのプロパティでフィルタできます。
省略可: [Show suppressed routes] 切り替えボタンをクリックしてオンの位置に切り替え、抑制されたルートを表示します。ルートの抑制の理由を表示するには、[ステータス] 列のアイコンにカーソルを合わせます。
gcloud
ルートの一覧と詳細を表示するには、gcloud compute
routes
コマンドを使用します。ローカル VPC ネットワークとピアリングされた VPC ネットワークのサブネット ルートと静的ルートが表示されます。他のルートタイプは表示されません。すべてのルートを表示するには、Google Cloud コンソールを使用します。
ルートを一覧取得するには、次の操作を行います。
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
ルートの一覧と詳細を表示するには、routes.list メソッドと routes.get メソッドを使用します。ローカル VPC ネットワークとピアリングされた VPC ネットワークのサブネット ルートと静的ルートが表示されます。他のルートタイプは表示されません。すべてのルートを表示するには、Google Cloud コンソールを使用します。
ルートを一覧取得するには、次の操作を行います。
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
: ルートの名前。
VM ネットワーク インターフェースに適用可能なルートを一覧取得する
Google Cloud コンソールを使用して、VM のネットワーク インターフェースに適用可能なルートを確認できます。このビューでは、下り(外向き)トラフィックに使用できるルートのリストを絞り込みます。
VM の特定のネットワーク インターフェースに適用可能なルートを表示するには、次の操作を行います。
コンソール
Google Cloud コンソールの [VM インスタンス] ページに移動します。
リストで VM インスタンスを見つけます。行の末尾にある
「その他の操作」メニューで、[ネットワークの詳細の表示] を選択します。インスタンスに複数のネットワーク インターフェースがある場合は、[ネットワーク インターフェースの詳細] セクションで、表示するネットワーク インターフェースを選択します。
[ファイアウォールとルートの詳細] セクションで、[ルート] タブをクリックして、ネットワーク インターフェースに適用されているすべてのルートをルート名で並べ替えます。
静的ルートの追加と削除
VPC ネットワークにローカルな静的ルートとポリシーベースのルートを追加または削除できます。このセクションでは、ローカルの静的ルートを追加、削除する方法について説明します。ポリシーベースのルートを追加または削除する方法について詳しくは、ポリシーベースのルートを使用するをご覧ください。
サブネット ルートは、サブネットを追加または削除すると自動的に追加または削除されます。サブネットを追加または削除する方法の詳細については、サブネットを操作するをご覧ください。
VPC ネットワーク ピアリングで接続された VPC ネットワーク内のすべてのルートは、それらのルートをエクスポートする VPC ネットワーク内で操作する必要があります。詳細については、ルート交換オプションをご覧ください。
静的ルートを追加する前に
静的ルートを追加する前に、次の点を考慮してください。
- 静的ルートで使用できるネクストホップの種類を十分に理解してください。IPv6 宛先のサポートなど、静的ルートのネクストホップの種類の詳細については、ネクストホップと機能をご覧ください。
- ハイブリッド サブネットを使用しない場合は、静的ルートにサブネットやピアリング サブネット ルートの宛先範囲と一致する範囲や、それよりも限定された宛先範囲を設定することはできません。詳しくは、ルートの概要のカスタム静的ルートとの相互作用と VPC ネットワーク ピアリングに関するドキュメントのサブネットと静的ルートの相互作用をご覧ください。
- 自動モードの VPC ネットワークを使用する際の競合を回避するために、宛先が
10.128.0.0/9
内に収まる静的ルートを作成しないでください。詳細については、自動モードの IPv4 範囲を確認してください。 - 内部割り当て範囲と重複するカスタム静的ルートの送信先を設定することはできません。
- VM をネクストホップとして使用するカスタム静的ルートを作成する前にネクストホップとしてのインスタンスに精通していることを確認してください。ネクストホップのインスタンスを選択した場合、Google Cloud はルートの作成時に VM が存在することのみを検証します。
- ネットワーク タグを使用してルートを作成すると、そのタグを持つ VM のみがそのルートを受け取ります。ただし、タグ付き VM は、ネットワーク タグを持たないルートをすべて受け取ります。
静的ルートを追加する
静的ルートをネットワークに追加します。IPv6 宛先のサポートなど、静的ルートのネクストホップの種類の詳細については、ネクストホップと機能をご覧ください。
コンソール
Google Cloud コンソールで、[ルート] ページに移動します。
[ルート管理] タブをクリックします。
[ルートを作成] をクリックします。
ルートの名前と説明を指定します。
[ネットワーク] リストで、ルートの既存のネットワークを選択します。
[ルートのタイプ] リストで、[静的ルート] を選択します。
[IP バージョン] リストで、必要な IP バージョンを選択します。
- IPv4 静的ルートを作成するには、[IPv4] を選択します。
- IPv6 静的ルートを作成するには、[IPv6] を選択します。
宛先 IP 範囲を指定します。最も広範囲な想定される宛先は、IPv4 の場合は
0.0.0.0/0
、IPv6 の場合は::/0
です。ルートの優先度を指定します。 優先度は、
0
(最も高い優先度)から65535
(最も低い優先度)の範囲で指定できます。一致するネットワーク タグを持つ、一部のインスタンスにのみルートが適用されるようにするには、[インスタンス タグ] フィールドでそれらを指定します。ネットワーク上のすべてのインスタンスにルートが適用されるようにするには、このフィールドを空白のままにします。
ルートのネクストホップを選択します。
- デフォルト インターネット ゲートウェイ: インターネットと Google API およびサービスにパケットを配信します。
- インスタンスを指定: VM インスタンスのネットワーク インターフェースにパケットを配信します。名前とゾーンで VM インスタンスを指定します。ルートの宛先が IPv6 アドレスの場合、VM インスタンスはデュアルスタックである必要があります。
- インスタンスの IP アドレスを指定: VPC ネットワーク内の既存のインスタンスの IP アドレスを指定します。IPv6 静的ルート(プレビュー)の場合、インスタンスはデュアルスタックであることが必要です。有効なネクストホップ IP アドレスに関する重要な制限については、静的ルートのネクストホップをご覧ください。
- VPN トンネルを指定: 静的ルーティングを使用して、既存の Classic VPN トンネルにパケットを配信します。
- 内部パススルー ネットワーク ロードバランサの転送ルールを指定: 内部転送ルールの名前とリージョンで指定された内部パススルー ネットワーク ロードバランサにパケットを配信します。転送ルールには、IPv4 または IPv6(プレビュー)アドレスを使用できます。指定する転送ルールの IP バージョンは、作成する静的ルートの IP バージョンと一致する必要があります。
[作成] をクリックします。
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 または IPv6(プレビュー)アドレス)とリージョンで指定します。指定する転送ルールの IP バージョンは、作成する静的ルートの IP バージョンと一致する必要があります。
カスタム静的ルートをネットワーク タグによる 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 または IPv6(プレビュー)アドレス)とリージョンで指定します。指定する転送ルールの IP バージョンは、作成する静的ルートの IP バージョンと一致する必要があります。
カスタム静的ルートをネットワーク タグによる VM の選択にのみ適用するには、tags
フィールドを追加し、1 つ以上のネットワーク タグを指定します。ネットワーク タグとカスタム静的ルートの連携の詳細については、「ルートの概要」の適用可能なルートをご覧ください。タグはカスタム静的ルートで使用できます。
詳細については、routes.insert
メソッドをご覧ください。
Terraform
静的ルートは、Terraform モジュールを使用して作成できます。
この静的ルートは、インターネットへのデフォルト ルートを作成します。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
Go
Java
Python
IPv4 のデフォルト ルートを追加する
next-hop-gateway
が default-internet-gateway
に設定された IPv4 のデフォルト静的ルート(0.0.0.0/0
)は、VPC ネットワークごとに自動的に構成されます。必要に応じて、次の手順でこのルートを再作成します。
コンソール
Google Cloud コンソールで、[ルート] ページに移動します。
[ルート管理] タブをクリックします。
[ルートを作成] をクリックします。
ルートの名前と説明を指定します。
ルートの既存のネットワークを選択します。
[送信先 IP 範囲] に「
0.0.0.0/0
」と入力します。ルートの優先度を指定します。優先度は、
0
(最も高い優先度)から65535
(最も低い優先度)の範囲で指定できます。[ネクストホップ] で [デフォルト インターネット ゲートウェイ] を選択します。
[作成] をクリックします。
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-gateway
が default-internet-gateway
に設定された IPv6 デフォルト静的ルート(::/0
)が 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 ネットワークの名前
静的ルートを変更する
静的ルートは作成後に編集または更新することはできません。静的ルートを変更するには、そのルートを削除して、代替ルートを作成する必要があります。
静的ルートを削除する
ルートを削除するには、次のようにします。
コンソール
Google Cloud コンソールで、[ルート] ページに移動します。
[ルート管理] タブをクリックします。
削除するルールの横にあるチェックボックスをオンにします。
[
削除] をクリックします。もう一度 [削除] をクリックして確定します。
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
: 削除するルートの名前。
Go
Java
Python
ルート変更の伝播
静的ルートを追加または削除すると、ルートは 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 転送を有効にするには、次の手順を完了します。
コンソール
Google Cloud コンソールの [VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[詳細オプション] セクションで、[ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] を開きます。
[ネットワーキング] セクションを開きます。
[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
: インスタンスが含まれているプロジェクトの IDZONE
: インスタンスを含む Google Cloud ゾーン
詳細については、instances.insert
メソッドをご覧ください。
Terraform
Terraform リソースを使用して、IP 転送を有効にした VM インスタンスを作成できます。
この例では、Terraform 引数に値が割り当てられていますが、これらは変更可能です。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
IP 転送を有効にしたら、VM の作成プロセスに進みます。
既存の VM で IP 転送を有効にするには、canIpForward
インスタンス プロパティを更新します。
次のステップ
- ルートの詳細については、ルートをご確認ください。
- Google Cloud VPC ネットワークの詳細については、Virtual Private Cloud(VPC)の概要をご覧ください。
- VPC ネットワークの作成と変更の手順については、VPC ネットワークの作成と管理をご覧ください。