【入門編】 NATゲートウェイにおける最大接続数とポート一意性の維持アルゴリズム – クラウド&コンテナネットワーク実践ガイド

こんにちは!クラウドインフラの世界へようこそ。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ゲートウェイ)が忙しすぎて整理番号を使い切っていないか、思い出してみてくださいね。

これからも、インフラの深い森を一緒に楽しく歩いていきましょう!それではまた!

コメント

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