【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「beSIM(ビーシム)」

【200ヶ国以上に対応】グローバル eSIM「beSIM(ビーシム)」

【中国法人に対応】中国クラウド / サーバー構築・運用保守

【中国法人に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

NATの基本的な考え方について

こんにちは
休みの日は0クレジットバランス
システムソリューション部のかわです

7月ですね。暑いのでバカンスがほしい今日このごろ。
今回は主に新人メンバーに向けてネットワークの話をしようと思うんですが、
特にややこしいNATの基本的な考え方について書いてきます。この記事がちょっとでも概念的なところの理解に役立てばと思います。

そもそもNATとは?

NAT(Network Address Translationの略)は、その名の通り、IPアドレスを変換する仕組みです。
いろんなネットワーク上で使われているアプリケーションとかWebサイトとかシステムに必要不可欠な技術で、
ポート番号も変換するNAPTという技術もあります。

背景を理解する

で、これが生み出された理由としては簡単な話、全く別のネットワークとの通信どうするの?て問題です。
特にLANからWAN側への通信を行う場合(逆も然り)、送信元のアドレスを、ネットワークの境界に面するアドレスを通信の方向によって変換してあげる必要があります。
そういった理由からも1980年代後半くらいに各大学で研究が進められ、変換技術が考えられたみたいです。
(NATがRFC化したのが1999年頃)

また、利便性以外にIPv4アドレスの枯渇問題を解消するためにもNATは活躍します。
詳しくは調べてもらえればなんですが、IPv4アドレスが作られた当時は「2の32乗=約43億個あるから足りるやろ」と考えられていたのが、
2011年にはIANA(ICANN)が実質「在庫がねぇ」宣言を出したことが話題となりました(みたいです)。
IPv6の活用もほとんど進んでない現状、この問題に対してインターネット側のインターフェイスに持たせられるIPアドレスが1つで済むのなら、
IPアドレスの利用数も減らせるし個人や企業としても料金が安くすむしWin-Winですよね。

NATの基本

こういった経緯を頭に入れたうえで、NATの基本的な話。
「IPアドレスを変換する」と言われてもしっくり来ないと思うので、ちょこっと例え話をば。

いくつか部署の分かれているあなたの比較的大きめの会社に、営業宛のお客さんが来たとします。
1F受付の人が「営業の◯◯さん宛」という情報を確認します。確認が済んだので、そのお客さんは営業担当のいる4Fに案内されました。

実はこれ、NATとほぼ同じなんです。

・お客さんからは会社内部は見えず、受付のみが窓口として見えている(ルータWAN側インターフェイスに紐づくIPアドレス)
・4Fの営業部を案内(グローバルIP→プライベートIPの変換処理)

この考え方を理解したうえで、社内ネットワークに設置してる監視カメラを外部から確認したいと思います。

それぞれのIPアドレスはこんな感じにしようと思います。
(ややこしくなるのでルータのローカルIPは省きます)

- 宛先ルータのWAN側IP:12.34.56.78
- 監視カメラのプライベートIP:192.168.10.252
- 接続元ルータのグローバルIP:98.76.54.32
- 接続元PCのプライベートIP:172.16.0.3
- カメラが使うポート番号:TCP/60000

1) アクセスしたい君が自宅のローカルPCから、会社のグローバルIPアドレス宛にアクセスします
( ・ω・)つポチッ[PC]--→[接続元ルータ]----(インターネット)--→[宛先ルータ]

172.16.0.3--→98.76.54.32--→12.34.56.78:60000
インターネットに出るタイミングで送信元IPアドレスはソースNAT変換がかかり、
宛先ルータからは98.76.54.32からアクセスが来たことになります。

2) 宛先ルータから監視カメラに転送
( ・ω・)ソワソワ [接続元ルータ]----(インターネット)---[宛先ルータ]--→[監視カメラ]

98.76.54.32--→12.34.56.78--→192.168.10.252:60000
宛先ルータにパケットが到達すると、「TCP/60000で来てるってことは、監視カメラに転送すればいいんだな」(宛先ルータで事前設定が必要)ということで、
最終的に192.168.10.252に対してパケットが転送されます。

戻りのパケットについてはステートフルインスペクション(詳しくはChatGPTに聞いてね)がはたらくので、
接続元PCで監視カメラの映像が見られる、という仕組みです。

NAPTの基本

でも、もしこの会社の社長がかなりのマイクロマネジメント派で、監視カメラが10台導入されてたらどうしましょう...?
グローバルIPアドレスは1つしかないし、ポート番号は監視カメラの仕様上60000番から変更できません。

こんな時に役に立つのがNAPT(Network Address Port Translation)です。

ルータ側にこういうStatic(静的) NATの設定をすれば、

WAN:60000 --→ 192.168.10.252:60000
WAN:60001 --→ 192.168.10.253:60000
WAN:60002 --→ 192.168.10.254:60000
...

IPアドレスは同じ12.34.56.78のまま、アクセスするときのポート番号をひとつずつズラすだけで各カメラに接続できます。
例えばポート番号60000番で来た場合はそのまま192.168.10.252へ。
60001番で来た場合は別カメラ:192.168.10.253の60000番へ。
60002番で来た場合は別カメラ:192.168.10.254の60000番へ。
というふうに宛先IPとポート番号を1対1で紐づけてあげると、限られたリソースのなかでも運用が可能になります。

まとめ的なものといろんなNATについて

弊社サービスはクラウド環境で提供することがほとんどのため、NATについて考えることは少なくその辺よしなにやってくれるので便利です。
が、APIとの連携時にNAT Gatewayが必要になったりすることもあるので、こういった知識は必要不可欠だと思います。
現代のサービスでもP2Pの技術を用いたオンライン対戦ゲームやIP電話など色々な場面でNATの技術は使われており、実は裏側でものすごく利用されている技術ということが分かります。

先程例を出して説明したのがStatic(静的) NATで、反対にDynamic(動的) NATやSource(送信元) NAT、Destination(宛先) NAT等があります。
加えて応用的にP2Pで使用されているCone NATやSynmetric NATなど、複雑なポート制御の仕組みを用いた技術があります。このへんは名城大学さんの資料がとても詳しいです。

こういった技術をあらためて振り返ると、オンラインゲームを遅延なく支えている技術って素晴らしいな~といつも関心します。
ザーッとまとまりもなく書きましたが、この記事が誰かの役に立てば幸いです。
ではまた!

~完~

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
8
読み込み中...
8 票, 平均: 1.00 / 18
565
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

かわ けん

システムソリューション部所属
好奇心旺盛ポケ○ン