こんにちは!インフラやネットワークの世界へようこそ。SREとして日々クラウドの荒波と格闘している私ですが、今回はクラウドの裏方でひっそりと、しかしもの凄く重要な仕事をこなしている「NATゲートウェイ」のお話をお届けします。
「パブリックサブネット? プライベートサブネット? そしてNATゲートウェイって何だか難しそう…」と感じていませんか?
大丈夫です!一歩ずつ、身近な例えから紐解いていけば、誰でもスッキリ理解できるようになりますよ。それでは、さっそくクラウドの街へ出かけてみましょう!
—
1. 秘密基地(プライベートサブネット)と外の世界をつなぐ郵便局
まずは、クラウドの世界を「ひとつの大きな街」に例えてみましょう。
この街には、外のインターネット(世界)から直接見えない「秘密基地」があります。これがプライベートサブネットです。セキュリティがガチガチに固められていて、外から悪いやつが入ってくることはできません。ここには、機密データを扱うデータベースや、社内用のサーバーたちが暮らしています。
一方で、インターネットの海へ自由に出ていける「表通り」に面したエリアもあります。これがパブリックサブネットです。
ここで、ひとつの疑問が浮かびます。
*「秘密基地(プライベートサブネット)の中にいるサーバーが、どうしても外のウェブサイトからソフトウェアの更新プログラムをダウンロードしたい! 外の世界と通信したい!」*
直接外に出ようとしても、秘密基地の住民たちは身分証(グローバルIPアドレス)を持っていません。そこで登場するのが、NATゲートウェイ(Network Address Translation Gateway)です。
NATゲートウェイを身近な例えで言うなら、「街の大きな郵便局(あるいは変装のプロ)」です。
秘密基地の住人が「これを外の宛先に送って!」と手紙を郵便局に預けると、郵便局は自分の住所(パブリックIPアドレス)に書き換えてから外の世界へ送り出します。そして、外から返事が返ってきたら、宛先を見て「あ、これはあの時の住民宛てだな」と気づき、元の住民へこっそり届けます。
この仕組みのおかげで、秘密基地の安全性を守りながら、外の世界と安全に荷物のやり取りができるというわけですね。
—
2. 「窓口が1つじゃ大渋滞!」NATゲートウェイのスケールアウト
さて、この郵便局(NATゲートウェイ)、街の規模が小さいうちは大活躍します。しかし、あなたの会社が急成長し、秘密基地の中に何千台ものサーバー(住民)が一斉に「外に通信したい!」と叫びだしたらどうなるでしょうか?
想像してみてください。たった1つの郵便窓口に、数万人の住民が一気に押し寄せる様子を……。
あっという間に大行列ができ、窓口のスタッフはパンクし、通信は遅延し、「タイムアウト」という名の怒号が飛び交う大惨事になってしまいます。
これが、インフラの世界でよくある「ポート枯渇(SNATのポート不足)」というトラブルです。ひとつのIPアドレスが同時に扱える通信の数には限界があるため、窓口(IPアドレス)が足りなくなってしまうのです。
複数の窓口をオープンする(複数NAT IPアドレスの割り当て)
このピンチを救うのが、今回のテーマである「NATゲートウェイへの複数IPアドレスの割り当て(スケールアウト)」です。
AWSの NAT Gateway や GCP の Cloud NAT などのマネージドサービスでは、ひとつのゲートウェイに対して複数のパブリックIPアドレス(窓口)をぶら下げることができます。
郵便局の例えで言えば、「これまでは1号窓口しかなかったところに、2号、3号、4号……と新しい窓口を次々と増設し、処理能力を何倍にも引き上げる」イメージです。これにより、大量の同時接続が発生しても、トラフィックが綺麗に分散され、スムーズに外の世界と通信できるようになります。
—
3. 実務でどう設定する? Terraformによる構築例
言葉だけだとフワッとしてしまうので、実際のインフラ構築コード(Terraform)を見てみましょう。「おっ、こうやって複数のIPを割り当てるんだな」と雰囲気が掴めればバッチリです!
以下のコードは、AWS(Amazon VPC)環境で、複数のパブリックIPアドレスを持ったNATゲートウェイを構築する例です。
# 1. 弾力IP(EIP)を複数作成する(これが「新しい窓口」の数になります)
resource "aws_eip" "nat_eip_1" {
domain = "vpc"
tags = {
Name = "production-nat-eip-1"
}
}
resource "aws_eip" "nat_eip_2" {
domain = "vpc"
tags = {
Name = "production-nat-eip-2"
}
}
# 2. パブリックサブネットにNATゲートウェイを配置し、最初のIPを割り当てる
resource "aws_nat_gateway" "main_nat" {
allocation_id = aws_eip.nat_eip_1.id
subnet_id = aws_subnet.public_subnet.id
tags = {
Name = "production-main-nat-gw"
}
}
# 3. さらに処理能力やIPアドレスを追加したい場合(AWSの機能拡張や追加アタッチメント等)
# ※クラウドプロバイダーやマネージドサービスの仕様によって、
# 複数EIPの直接アタッチ方法や、複数のNAT Gatewayをロードバランスさせるアプローチが異なります。
このように、コード上で複数のIPアドレス(aws_eip)を用意し、ネットワークの交通整理を行うことで、大規模なトラフィックにも耐えうる頑健なネットワーク基盤が完成します。
—
4. 現場のSREが教える、知っておくべき注意点
最後に、現場のトラブルシューティングで私たちがよく直面する「ちょっとした罠」をシェアしておきますね。
① 送信元IPがランダムに変わるリスク
複数のNAT IPアドレスを割り当てた場合、外の世界(通信相手のサーバー)から見ると、あなたのシステムからのアクセスが「複数の異なるIPアドレス」からバラバラに飛んでくるように見えます。
もし通信先のAPIサーバーが「セキュリティのために、アクセス元IPを1つに固定してほしい(ホワイトリスト登録)」と言っている場合、複数IPのNATゲートウェイを通すと、「あれ、さっきと違うIPからアクセスが来たぞ! 不審者だ!ブロック!」と弾かれてしまうことがあります。接続先の仕様は事前に必ず確認しましょう。
② クラウドごとの仕様の違い
AWSの NAT Gateway は基本的に自動でスケールアップしますが、IPアドレスの追加や設計には一定のルールがあります。また、GCPの Cloud NAT では、動的なポート割り当てやパブリックIPのプール設定を非常に柔軟に行うことができます。自分が使っているクラウドの公式ドキュメントを、おやつのコーヒーでも飲みながら一度眺めてみると新しい発見がありますよ。
—
まとめ
いかがでしたでしょうか?
- プライベートサブネットは、外敵から守られた安全な「秘密基地」。
- NATゲートウェイは、外の世界へ安全に荷物を届ける「郵便局」。
- 複数IPの割り当ては、大渋滞を防ぐために「窓口を増やす」スケールアウト手法。
ネットワークの世界も、私たちの身近な社会の仕組みと結びつけて考えると、ぐっと親しみやすく、面白くなってきますよね。
「難しそう」と感じていた技術も、一歩ずつ噛み砕いていけば必ず自分の武器になります。これからも一緒に楽しくインフラを学んでいきましょう!それではまた次回の技術ブログでお会いしましょう〜!
コメント