こんにちは!クラウドインフラの世界へようこそ。SREとして日々クラウドと格闘していると、時折「なぜか通信が繋がらない」「急にタイムアウトする」という不可解な現象にぶつかります。
その犯人の多くが、実は今回解説する「NATゲートウェイ」の裏側で起きているポートの取り合いなんです。今日は、インフラの縁の下の力持ちであるNATゲートウェイが、どうやって膨大な通信を交通整理しているのか、郵便配達に例えて紐解いていきましょう!
—
1. NATゲートウェイは「巨大な郵便局の仕分け人」
まず、パブリックサブネットとプライベートサブネットの関係をイメージしてください。
- プライベートサブネット: 住所が非公開の住宅街。ここからは外の世界に直接手紙(パケット)を出せません。
- NATゲートウェイ: 住宅街の入り口にある「唯一の大きな郵便局」。
プライベートサブネットにあるサーバーがインターネットにアクセスしたいとき、直接外には出られないので、すべての手紙をこの郵便局に持ち込みます。「この手紙をネットの向こうへ届けて!」と。
郵便局員(NATゲートウェイ)は、住宅街のサーバーからの手紙を預かると、自分の住所(NATのグローバルIP)を送り主として書き換え、宛先へ転送します。これがNAT(ネットワークアドレス変換)です。
2. なぜ「ポート」という番号が必要なのか?
ここで一つの疑問が浮かびます。「郵便局員がみんなの代わりに送ってくれたら、返信が届いたとき、誰宛の手紙か分からなくならない?」
そうなんです。そこで登場するのが「ポート番号」です。
郵便局員は、手紙を受け取るたびに「Aさんの手紙は、整理番号『10001』として送ったな」と管理台帳にメモします。返信が『10001』宛に届いたら、「ああ、これはAさん宛だ!」と正確に届けられるわけですね。
ポート一意性の維持アルゴリズム
NATゲートウェイは、この「整理番号(ポート)」を65,535個までしか持っていません。同一の送信元IPとポートから複数の宛先へ通信する場合、ゲートウェイは以下の仕組みで重複を防いでいます。
1. ハッシュ化: 送信元IP、宛先IP、宛先ポートなどを混ぜ合わせた「ハッシュ値」を計算します。
2. 一意性の確保: このハッシュ値を使って、現在空いているポート番号を割り当てます。
3. 接続管理: 「送信元IP:ポート」と「割り当てたNATポート」を紐付けて管理します。
3. なぜ接続エラーが起きるのか?(ポート枯渇問題)
もし、この「整理番号」を使い切ってしまったらどうなるでしょう? そう、新しい手紙を出すことができず、通信が弾かれます。これが有名な「ソースポート枯渇」問題です。
特に、1つのサーバーから同じ宛先に対して短時間に大量の通信を行うと、ポート番号の消費が激しくなり、あっという間にパンクします。
実務で役立つ確認コマンド(AWS CLIの例)
AWSのNATゲートウェイで通信状況を監視したい場合、以下のような指標をCloudWatchでチェックするのが鉄則です。
# NATゲートウェイのポート使用率を確認するコマンド例
# 実際にはAWSコンソールやCloudWatchのメトリクスで見ますが、
# CLIで特定リソースの情報を取得する際のイメージです
aws cloudwatch get-metric-statistics \
--namespace "AWS/NATGateway" \
--metric-name "ErrorPortAllocation" \
--dimensions Name=NatGatewayId,Value=nat-0123456789abcdef0 \
--start-time 2023-10-01T00:00:00Z \
--end-time 2023-10-01T01:00:00Z \
--period 60 \
--statistics Sum
*※ ErrorPortAllocation が0より大きい場合、ポートが枯渇して通信エラーが発生しているサインです!*
4. 現場でトラブルを回避するための「鉄則」
現場のSREとして、この問題を回避するために意識しているポイントを3つだけお伝えします。
1. コネクションの再利用: アプリケーション側でHTTP接続を毎回切断せず、Keep-Aliveを使ってコネクションを使い回しましょう。これでポート消費が劇的に減ります。
2. NATゲートウェイの分散: 1つのNATゲートウェイに負荷を集中させず、サブネットごとに配置を検討する。
3. 宛先を増やす: もし宛先が複数あるなら、PrivateLink(VPCエンドポイント)を活用しましょう。これを使えばNATゲートウェイを通らずにAWSサービスへアクセスできるため、ポートを消費しません。
まとめ:ネットワークは「交通整理」の積み重ね
NATゲートウェイの仕組みは、一見難しそうですが、要は「誰からの荷物かを間違えないための交通整理」です。ポートという小さな数字を、いかに賢く管理し、使い回すか。それが、大規模なクラウドインフラを支えるSREの腕の見せ所でもあります。
「なんか繋がらないな?」と思ったら、まずはこの郵便局員(NATゲートウェイ)が忙しすぎて整理番号を使い切っていないか、思い出してみてくださいね。
これからも、インフラの深い森を一緒に楽しく歩いていきましょう!それではまた!
コメント