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など、複雑なポート制御の仕組みを用いた技術があります。このへんは名城大学さんの資料がとても詳しいです。
こういった技術をあらためて振り返ると、オンラインゲームを遅延なく支えている技術って素晴らしいな~といつも関心します。
ザーッとまとまりもなく書きましたが、この記事が誰かの役に立てば幸いです。
ではまた!
~完~