【入門編】 GCP静的ルートと動的ルート(Cloud RouterによるBGP広告)の優先度とネクストホップ仕様 – クラウドインフラと仮想化ネットワーク実践ガイド

はい、承知いたしました!GCPのネットワークルーティングについて、現場のSRE/クラウドアーキテクトの視点から、親しみやすく、そして実践的なブログ記事を執筆します。パケットが駆け巡る様子を、郵便配達の例えなどを交えながら、楽しく学べるように工夫しますね。

—

GCPネットワークの「道案内」:静的ルートと動的ルート、どっちが優先?

皆さん、こんにちは!AWSやGCPといったメガクラウドのネットワークの奥深さに魅せられ、日々、パケットの旅路を追いかけるSRE兼クラウドアーキテクトの〇〇です。(←ここ、あなたの名前を入れてくださいね!)

今回は、Google Cloud Platform(GCP)のネットワークにおける、ちょっとデリケートな「ルーティング」のお話です。特に、「静的ルート」と「動的ルート」、そしてそれらを操る「Cloud Router」の賢い使い方について、現場のリアルな声とともにお届けします。

「ルート?」「BGP?」「メトリック?」… 初めて聞くと、なんだか難しそうですよね。でも、大丈夫!一つ一つ、身近な例え話を交えながら、丁寧に紐解いていきましょう。このブログを読み終える頃には、GCPネットワークの「道案内」が、きっとスッキリ理解できるようになっているはずです!

ネットワークの「道案内」って、そもそも何?

まず、ネットワークにおける「ルーティング」とは、簡単に言うと「データ(パケット)を目的地までどうやって届けるか」を決めるための道案内システムのことです。

想像してみてください。あなたが友達に荷物を送りたいとします。その荷物は、たくさんの交差点や分岐点を通って、最終的に友達の家に届けられますよね。ネットワークも全く同じです。データは、ルーターという「交通整理係」がいるたくさんの分岐点(ネットワーク機器)を通り、最終的に目的のサーバーやサービスに届けられます。

この「交通整理係」が、どの道を通れば一番早く、安全に荷物を届けられるかを判断するために使っているのが「ルート情報」なんです。

GCP VPCネットワークでも、この「ルート情報」をどのように管理するかが、ネットワーク設計の肝となります。そして、その管理方法には大きく分けて二つのアプローチがあります。

1. 自分で決める「静的ルート」:手作りの地図と近道

一つ目は、私たちエンジニアが「この道を通ってください!」と、あらかじめGCPに指示しておく方法です。これが「静的ルート」です。

これは、まるで自分で手書きの地図を作って、親しい人に「この道を通って〇〇さんの家に行ってね!」と伝えるようなイメージです。

静的ルートのメリット:

  • シンプルで分かりやすい: 設定が直接的で、意図が明確です。
  • 予測可能: ネットワークの挙動が安定しやすく、トラブルシューティングもしやすい傾向があります。

静的ルートのデメリット:

  • 手作業が多い: ネットワーク構成が変わるたびに、手動でルート情報を更新する必要があります。大規模なネットワークになると、管理が大変になります。
  • 障害に弱い: 指定した道が封鎖(障害)されてしまった場合、自動的に迂回ルートを見つけてくれません。

GCPでの静的ルートの設定方法

GCPでは、VPCネットワークの「ルート」セクションから静的ルートを追加できます。例えば、「特定の宛先IPアドレス範囲 (192.168.1.0/24) への通信は、特定のゲートウェイ (10.0.0.1) に送ってください」といった設定を行います。

サンプル:静的ルートの追加(gcloud CLI)

# 例: 192.168.1.0/24 への通信を、カスタムネクストホップのインターフェース (例: VMインスタンスのNIC) へ転送する
gcloud compute routes create route-to-internal-subnet \
    --network=YOUR_VPC_NETWORK_NAME \
    --destination-range=192.168.1.0/24 \
    --priority=1000 \
    --next-hop-instance=YOUR_GATEWAY_VM_INSTANCE_NAME \
    --next-hop-instance-zone=YOUR_GATEWAY_VM_ZONE \
    --tags=YOUR_TAG_FOR_APPLYING_ROUTE
  • --network: ルートを作成するVPCネットワークの名前を指定します。
  • --destination-range: このルートが適用される宛先IPアドレスの範囲です。
  • --priority: ここが今日のポイント! ルートの優先度を数値で指定します。数値が小さいほど優先度が高くなります。後述しますが、静的ルート同士、または静的ルートと動的ルートの間で、この優先度が勝敗を決めます。
  • --next-hop-instance: 通信を転送するネクストホップ(次の経由地)となるVMインスタンスを指定します。
  • --next-hop-instance-zone: ネクストホップとなるVMインスタンスが存在するゾーンを指定します。
  • --tags: このルートを適用するVMインスタンスに付与するタグを指定します。特定のVMにだけこのルートを使わせたい場合に便利です。

2. 自動で学ぶ「動的ルート」:広範囲の地図と最新情報

もう一つの方法は、ネットワーク機器同士が「お互いの知っている道情報を交換しよう!」と通信し合うことで、自動的にルート情報を学習していく方法です。これが「動的ルート」です。

これは、まるで最新の交通情報アプリが、刻々と変わる道路状況(渋滞や工事)をリアルタイムで教えてくれるようなイメージです。GCPでは、この自動的なルート交換を「Cloud Router」というマネージドサービスが担ってくれます。

Cloud Routerは、BGP (Border Gateway Protocol) という、インターネットの世界でも標準的に使われているプロトコルを使って、他のルーターと情報交換をします。

動的ルート(Cloud Router/BGP)のメリット:

  • 自動化: ネットワーク構成の変更に自動で追従し、ルート情報を更新してくれます。
  • 障害への耐性: ネットワークに障害が発生した場合、迂回ルートを自動的に見つけてくれます。
  • スケーラビリティ: 大規模なネットワークでも、管理の手間を大幅に削減できます。

動的ルート(Cloud Router/BGP)のデメリット:

  • 設定が複雑に感じられることも: BGPの概念やメトリック(後述)の理解が必要になる場合があります。
  • 予期せぬ挙動の可能性: 設定ミスやBGPの挙動によっては、意図しないルートが選択されることもあります。

サンプル:Cloud Routerの設定(gcloud CLI)

# 例: オンプレミスネットワークとのBGPピアリングを設定する
gcloud compute routers create my-router \
    --network=YOUR_VPC_NETWORK_NAME \
    --asn=64512 \
    --region=YOUR_REGION

# BGPネイバー(ピア)の設定
gcloud compute routers add-bgp-peer my-router \
    --peer-asn=65001 \
    --peer-name=onprem-peer \
    --region=YOUR_REGION \
    --advertised-route-priority=100 \
    --interfaces=YOUR_ROUTER_INTERFACE_NAME \
    --enable-ipv4-advertise
  • --network: ルーターを作成するVPCネットワークの名前を指定します。
  • --asn: このCloud RouterのASN(Autonomous System Number)です。オンプレミス側と一致させるか、GCP側でユニークな番号を設定します。
  • --region: ルーターを作成するリージョンを指定します。
  • --peer-asn: 接続する相手(オンプレミスルーターなど)のASNを指定します。
  • --peer-name: BGPピアの名前です。
  • --advertised-route-priority: これも今日のポイント! Cloud RouterがBGPで広告するルートの優先度(MED: Multi-Exit Discriminator)です。数値が小さいほど優先度が高くなります。
  • --interfaces: Cloud Routerが使用するVPCネットワークのインターフェースを指定します。
  • --enable-ipv4-advertise: IPv4ルートを広告することを有効にします。

3. 優先度とネクストホップ:ルート選択の「ルール」

さて、いよいよ本題の「優先度」と「ネクストホップ」のルールについてです。

ネットワークでは、同じ宛先へのルートが複数存在した場合、どのルートを選択するかを決定するための明確なルールがあります。これは、まるで複数の道がある場合に、一番早く着ける道を選ぶようなものです。

GCPのルーティングシステムは、以下の順序でルートを評価します。

1. 優先度 (Priority):

  • まず、各ルートに設定されている priority の値(静的ルートの場合)や、BGPで広告される MED 値(動的ルートの場合)が比較されます。
  • 数値が小さいほど優先度が高い となります。
  • 例えば、静的ルートの優先度が 500、動的ルートの優先度が 1000 なら、静的ルートが選ばれます。
  • 【重要】 静的ルートのデフォルト優先度は 1000 です。Cloud RouterがBGPで広告するルートのデフォルトMED(--advertised-route-priority)も 1000 です。

2. ネクストホップ (Next Hop) の評価:

  • 優先度が同じルートが複数ある場合、次にネクストホップの種類で評価されます。GCPのルーティングシステムは、以下のような順序でネクストホップを評価します。
  • インターネットゲートウェイ (Internet Gateway): インターネットへの通信に使われる、最も一般的なネクストホップです。
  • VPNトンネル (VPN Tunnel): オンプレミスネットワークなど、プライベートなネットワークへの通信に使われます。
  • ピアリング接続 (Peering Connection): 他のVPCネットワークへの通信に使われます。
  • VMインスタンス (Instance): 特定のVMインスタンスをネクストホップとして指定した場合です。
  • 【補足】 このネクストホップの評価順序は、少し複雑に聞こえるかもしれませんが、多くの場合、静的ルートで明示的に設定したネクストホップ(例: VPNゲートウェイや特定のVM)が、動的ルートよりも優先される、といった場面で意識することが多いです。
  • 【さらに深掘り】 もし、優先度もネクストホップの種類も同じルートが複数あった場合は、どうなるのでしょうか? その場合は、GCPの内部的なメカニズムで決定されますが、通常は意図した挙動にならない可能性があるので、 同じ優先度・同じネクストホップタイプで、重複するルートを作成しないように設計するのがベストプラクティス です。

実際のシナリオで考えてみよう!

シナリオ:
あなたのGCP VPCネットワークには、オンプレミスネットワークと接続するためのVPNトンネルがあります。このオンプレミスネットワークにある 192.168.10.0/24 というIPアドレス範囲への通信を、GCPから行いたいとします。

ここで、二つのルート設定が考えられます。

1. 静的ルート: 「192.168.10.0/24 への通信は、VPNトンネル経由で!」と、優先度 500 で静的に設定。
2. 動的ルート (Cloud Router): Cloud RouterがBGPでオンプレミスルーターと通信し、「192.168.10.0/24 はこっちのVPNトンネルから来てるよ!」と学習。このBGP広告のMED(優先度)はデフォルトの 1000。

結果:
この場合、静的ルートの優先度 500 が、動的ルートの優先度 1000 よりも高いため、 静的ルートが選択されます。 つまり、GCPは 192.168.10.0/24 への通信を、あなたが明示的に指定した静的ルート経由で送ります。

もし、静的ルートの優先度を 1500 に設定していたらどうでしょう? その場合、動的ルートの優先度 1000 の方が高くなるため、 動的ルートが選択されます。

このように、静的ルートと動的ルートが競合する場合、 優先度の低い(数値の小さい)方が常に勝ちます。

4. カスタムルート広告の賢い使い方

Cloud Routerでは、BGPで「どのルートを広告するか」を制御することもできます。デフォルトでは、VPCネットワーク内のサブネットルートなどが自動的に広告されますが、 --advertised-route-priority(MED)の値を調整することで、 他のネットワークからのルート選択に影響を与える ことができます。

例えば、オンプレミスからGCPへの通信で、複数のVPN接続がある場合に、特定のVPN接続を優先させたい、といった制御が可能になります。

サンプル:特定のルートのみを広告し、優先度を下げる

# 例: 特定のオンプレミスサブネット (10.10.0.0/16) のみを広告し、優先度を150で高める
gcloud compute routers update-advertising my-router \
    --region=YOUR_REGION \
    --peer-name=onprem-peer \
    --add-custom-advertised-routes \
    --advertised-route-priority=150 \
    --destination-range=10.10.0.0/16
  • --add-custom-advertised-routes: カスタムで広告するルートを追加します。
  • --advertised-route-priority: このルートのMED値を指定します。
  • --destination-range: 広告したいルートの宛先IPアドレス範囲を指定します。

この設定により、Cloud Routerは 10.10.0.0/16 というルートを、優先度 150 でオンプレミス側に広告します。もしオンプレミス側で、同じ宛先への他のルートがあれば、この 150 という値が比較され、より小さい値を持つこのルートが優先される可能性が高まります。

まとめ:現場での教訓

GCPのルーティングは、静的ルートと動的ルート(Cloud Router/BGP)を組み合わせることで、柔軟かつ堅牢なネットワークを構築できます。

  • 静的ルート: シンプルな構成や、特定の通信経路を確実に制御したい場合に有効です。優先度を低く設定することで、動的ルートを「バックアップ」として使うこともできます。
  • 動的ルート (Cloud Router): ネットワークの規模が大きくなったり、構成変更が頻繁に発生したりする環境では、自動化の恩恵が非常に大きいです。

そして、最も重要なのは 「優先度」 です。静的ルートのpriority、BGPのMED値を理解し、適切に設定することで、意図した通りにパケットが流れるネットワークを実現できます。

現場でよくあるのは、「あれ?この通信、思ってたのと違うルート通ってるぞ?」という問題です。そんな時は、まず各ルートの優先度をチェックしてみてください。もしかしたら、意図せず設定した静的ルートが、動的ルートよりも優先されてしまっているのかもしれません。

GCPネットワークの「道案内」は、時に複雑に見えますが、今回ご紹介した「優先度」というルールを理解するだけで、多くの疑問が解消されるはずです。

ぜひ、皆さんのGCPネットワーク設計やトラブルシューティングの参考にしていただけたら嬉しいです!

それでは、また次回のブログでお会いしましょう!Happy Routing!

コメント

タイトルとURLをコピーしました