【入門編】 AWS NAT GatewayとVPCピアリング/Transit Gatewayのトラフィック優先順位 – クラウド&コンテナネットワーク実践ガイド

こんにちは!クラウドインフラの世界へようこそ。SREとして日々さまざまなシステムの裏側を支えていると、「あれ?通信の向き先が想定と違うぞ…」というネットワークのミステリーに直面することがあります。

AWSなどのクラウドを使っていると、プライベートサブネットに置いたサーバーから「外のインターネットに出たい!」というときや、「別のVPCにあるデータベースと通信したい!」という要望が同時に出てきますよね。

ここで避けて通れないのが、「どの道を通るのが一番優先されるのか?」というルーティング(道案内)のルールです。今回は、パケットの気持ちになりながら、このルート競合の仕組みを優しく紐解いていきましょう!

—

1. 身近な例えでイメージしよう:郵便配達のルール

ネットワークのルーティングを理解するために、ちょっと身の回りの「手紙や荷物を送る仕組み」に例えてみましょう。

あなたが東京のオフィス(プライベートサブネット)から、荷物を送るとします。
宛先には大きく分けて、次の2パターンがありますよね。

1. お隣の部署(社内便)へ送る荷物

  • 同じ会社の別フロアや、グループ会社宛てです。

2. 遠くの街(インターネット)へ送る荷物

  • 全く関係のない一般企業や海外のWebサイト宛てです。

もしあなたが手紙を書くとき、宛先が「お隣の部署」であれば、社内便の専用ルートを使いますよね。わざわざ遠くの街へ行く一般の郵便ポスト(NATゲートウェイ)には出しません。

AWSのネットワークでも全く同じことが起きるんです。「ここへ行きたい!」という宛先(IPアドレス)が複数あるとき、AWSのルーターは「よりピンポイントで場所を知っている道(具体的なルート)」を優先して選ぶという、とても賢いルールを持っています。

—

2. ルートテーブルの主役たち:NAT GatewayとTGW/VPCピアリング

まずは、今回登場する主要なプレイヤーたちを顔見知りになっておきましょう。

  • NATゲートウェイ (0.0.0.0/0 向け)
  • プライベートサブネットからインターネットの海へ飛び出すための「大きな総合窓口」です。どこ宛てか分からない通信は、とりあえずここに丸投げすれば、いい感じにインターネットへ連れていってくれます。
  • VPCピアリング / AWS Transit Gateway (TGW)
  • VPC同士(お隣のネットワーク同士)を繋ぐための「専用道路」や「高速道路のジャンクション」です。特定のプライベートIPアドレスの範囲(例: 10.100.0.0/16 など)へダイレクトに通信を流すために使います。

ここで、インフラ初心者のエンジニアがよくハマる疑問が生まれます。
「プライベートサブネットのルートテーブルに、VPCピアリング向けのルートと、NATゲートウェイ向けのデフォルトルート (0.0.0.0/0) の両方を登録したら、通信はどっちを優先するの?」 という疑問です。

一歩ずつ、その答えに近づいていきましょう!

—

3. 評価の仕組み:最も「具体的」な住所が勝つ!

AWSのルートテーブル(道案内図)がパケットをさばくとき、基本原則は「最長一致(ロンゲスト・プレフィックス・マッチ)」という、ちょっとかっこいい名前のルールに従います。

難しく聞こえますが、要するに「より狭くて詳しい住所が優先される」ということです。

たとえば、次の2つのルートがルートテーブルに書かれていたとします。

1. 10.1.0.0/16 (VPCピアリングやTGWを通るルート)
2. 0.0.0.0/0 (NATゲートウェイを通るデフォルトルート)

ここで、パケット(手紙)の宛先が 10.1.5.5 だったとしましょう。

  • ルート1の 10.1.0.0/16 は、10.1.0.0 から 10.1.255.255 までをカバーする「大きな街(エリア)」です。
  • ルート2の 0.0.0.0/0 は、すべてのIPアドレス(地球上の全住所)を意味する「とりあえず全部」です。

パケットが届いたとき、AWSは「よりピンポイントで場所を知っているのはどっちだ?」と探します。すると、10.1.5.5 は 10.1.0.0/16 という「街」の中に綺麗にスッポリ収まるため、NATゲートウェイ(0.0.0.0/0)ではなく、VPCピアリングやTransit Gatewayの道が選ばれることになるのです!

安全ですね。お隣の部署宛ての荷物は、ちゃんと社内便ルートを通って届くようになっています。

—

4. 実務で役立つ!ルートテーブル設定の実例

それでは、実際にAWSのインフラを構築する際のCloudFormationやTerraform、あるいはAWS CLIをイメージした設定例を見てみましょう。

今回は、プライベートサブネットから「特定のVPC(10.50.0.0/16)」へはTGW経由で通信させつつ、それ以外のインターネット行きは「NATゲートウェイ」に流す設定を想定します。

{
  "RouteTable": {
    "VpcId": "vpc-0123456789abcdef0",
    "Routes": [
      {
        "DestinationCidrBlock": "10.50.0.0/16",
        "TransitGatewayId": "tgw-0987654321fedcba0",
        "Description": "社内の別VPC(TGW経由)へ向かうピンポイントなルート"
      },
      {
        "DestinationCidrBlock": "0.0.0.0/0",
        "NatGatewayId": "nat-0123456789abcdef0",
        "Description": "宛先が分からないすべての通信を流すNATゲートウェイ向けのデフォルトルート"
      }
    ]
  }
}

この設定におけるパケットの挙動

  • 宛先が 10.50.10.20 の場合:
  • 10.50.0.0/16 のルールに一致するため、AWS Transit Gateway を通って別VPCへ向かいます。
  • 宛先が 8.8.8.8(GoogleのパブリックDNSなど)の場合:
  • 10.50.0.0/16 には一致しませんが、すべての宛先をカバーする 0.0.0.0/0 に一致するため、NATゲートウェイを経由してインターネットへ出ていきます。

このように、具体的なルートと全方向のルートが共存していても、AWSは意図した通りに賢く交通整理を行ってくれます。

—

5. トラブルシューティングの現場から:ありがちな罠

最後に、現場のSREとして「うわっ、やっちゃったな…」というトラブルの事例をひとつご紹介します。

時々、「すべての通信を一度コントロールしたい!」という理由で、ルートテーブルに 0.0.0.0/0 の宛先として、Transit GatewayやVPNを無理やり設定することがあります。これをやるとどうなるでしょうか?

もしプライベートサブネットのデフォルトルート(0.0.0.0/0)の向き先を、NATゲートウェイからTransit Gatewayに変更してしまうと、インターネット向けの通信(例えば 8.8.8.8 や外部API)のすべてがTGW側へ吸い込まれてしまいます。
その結果、宛先のネットワーク側で適切な返答ルート(戻りパケットのルーティング)が設定されていないと、通信がピタリと止まってしまい、「あれ、YUMやAPTでパッケージがアップデートできないぞ…?」というパニックに繋がります。

【教訓】

  • インターネットに出たい通信は、素直に 0.0.0.0/0 を NATゲートウェイ に向ける。
  • 他のプライベートネットワーク(VPCやオンプレミス)に行きたい通信は、それぞれ専用の具体的なIPアドレス範囲(CIDR)を指定して、VPCピアリングやTransit Gateway に向ける。

この「住み分け」をしっかり意識するだけで、ネットワークトラブルの大部分は綺麗に防ぐことができますよ。

—

まとめ

いかがでしたでしょうか?
今回は、NATゲートウェイとVPCピアリング/Transit Gatewayのルートが競合した際の評価順序について解説しました。

  • ルーティングは「より具体的な住所(最長一致)」が勝つ!
  • だから、具体的なIP範囲のルートと、すべてを網羅する 0.0.0.0/0(NATゲートウェイ)が共存していても、意図した通りに綺麗にルーティングされる。
  • 迷ったときは「パケットの宛先はどの街に一番近いかな?」と地図を広げるように考えてみる。

インフラやネットワークの世界は、最初は難しく見える用語が多いですが、一歩ずつ身近なものに置き換えていくと、とてもロジカルで面白い仕組みで動いています。

あなたのクラウド構築ライフが、よりスムーズで楽しいものになりますように!それではまた次の技術でお会いしましょう。

コメント

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