AWSのルートテーブルは「一番詳しい地図」を優先する!最長一致ルーティングの秘密
こんにちは!クラウドインフラの現場で日々パケットと格闘しているSREです。
AWSのVPCを触り始めたばかりの頃、「ルートテーブルって何だか難しそう…」「0.0.0.0/0とか10.0.0.0/16とか、数字が並んでいてよくわからない」と頭を抱えたことはありませんか?
実は、AWSのネットワークの心臓部であるルートテーブルは、ある非常にシンプルなルールで動いています。今日は、そのルールである「最長一致ルーティング(Longest Prefix Match)」について、郵便配達の仕組みに例えて、直感的にマスターしていきましょう!
—
ルートテーブルは「郵便局の仕分け棚」
皆さんがネットで荷物を送るとき、住所を書きますよね。配達員さんはその住所を見て、「まずはこの県へ、次は市へ、最後はこの番地へ」と仕分けをしていきます。
AWSのルートテーブルも全く同じです。パケットという名の「荷物」が宛先IPアドレスという「住所」を持ってやってくると、ルートテーブルという「仕分け棚」を見て、どこへ飛ばすべきか決めるのです。
ここで、よくあるルートテーブルの例を見てみましょう。
- ルートA:
10.0.0.0/16→local(VPC内の通信) - ルートB:
0.0.0.0/0→igw-xxxxxxxx(インターネットへの通信)
もし、宛先が 10.0.1.5 というパケットがやってきたら、どちらのルートが選ばれるでしょうか?
—
最長一致ルーティング:住所は「細かいほど正義」
ここで登場するのが、今回の主役「最長一致ルーティング」です。
これは簡単に言うと「一番具体的な(細かい)行き先が書いてあるルートを優先する」というルールです。
0.0.0.0/0は「世界中のすべて」を指す大雑把な住所です。10.0.0.0/16は「10.0.x.x という特定のエリア」を指す、少し詳しい住所です。
郵便配達員さんの気持ちになって考えてみてください。「日本全体(0.0.0.0/0)」という広大な地図と、「東京都渋谷区(10.0.0.0/16)」という詳細な地図を持っていたら、どちらを信じますか? もちろん、より詳細な「東京都渋谷区」ですよね!
AWSのルーターも同じです。宛先が 10.0.1.5 であれば、より範囲が狭く具体的な 10.0.0.0/16 のルートが優先されます。これが「最長一致(=一番長いビットまで一致するもの)」の正体です。
—
実践!AWS CLIでルートを確認する
では、実際に今のVPCがどのようなルートを持っているか、AWS CLIで確認してみましょう。以下のコマンドを叩くと、現在のルートテーブルが覗けます。
# ルートテーブルIDを指定して、現在の設定一覧を取得するコマンド
aws ec2 describe-route-tables --route-table-id rtb-0123456789abcdef0
出力結果の中に、以下のような Routes 情報が見えるはずです。
"Routes": [
{
"DestinationCidrBlock": "10.0.0.0/16", // VPC内への通信
"GatewayId": "local"
},
{
"DestinationCidrBlock": "0.0.0.0/0", // インターネットへの通信
"GatewayId": "igw-0a1b2c3d4e5f6g7h8"
}
]
もし、特定の社内ネットワーク(10.0.5.0/24)だけ別の専用線を通したい!なんていう時は、このようにルートを追加します。
# 特定のサブネット宛の通信だけ、別のゲートウェイ(仮想プライベートゲートウェイ)へ飛ばす設定
aws ec2 create-route \
--route-table-id rtb-0123456789abcdef0 \
--destination-cidr-block 10.0.5.0/24 \
--gateway-id vgw-99999999
こうすると、10.0.5.0/24 宛のパケットは、10.0.0.0/16 よりも範囲が狭く(=より具体的で)長いため、優先的に vgw へ向かうようになります。
—
初学者がハマりやすい「罠」
最後に、現場でよくある失敗談を一つ。
「インターネットに繋がらない!」という相談を受けると、ルートテーブルの設定が競合していることがよくあります。特に、0.0.0.0/0 を複数設定しようとしたり、逆に範囲が広すぎるルートを作ってしまったりすると、意図しない場所へパケットが吸い込まれてしまうことがあります。
「迷ったら、一番絞り込まれたルールが勝つ」
この原則さえ覚えておけば、AWSのネットワーク構築で大きく道に迷うことはありません。
まとめ
1. ルートテーブルは地図: パケットの宛先を見て、次にどこへ進むか決める場所。
2. 最長一致の原則: 大雑把なルートより、詳細なルートが優先される。
3. 迷ったら詳細を確認: AWS CLIでどのルートが適用されているかいつでも確認できる。
ネットワークは目に見えないものですが、こうして「郵便配達」に例えてみると、少し身近に感じられませんか?ぜひ皆さんのVPCでも、route-table を確認して、パケットがどこへ向かっているのか想像してみてくださいね!
それでは、良いクラウド・ライフを!
コメント