NATってなに?
「NAT越え」「NATの設定を...」などは聞いたことがあったが、実際に「NATが...だから...だよね?」って聞かれて困ったので少し調べた。
NATの役割
そもそもNATとはNetwork Address Translationの略でIPアドレスを変換する技術である。Network Address Translationという名前がとてもわかりやすい。
一般的には企業内のLANのプライベートIPアドレスをインターネット内の識別子であるグローバルIPアドレスに変換する際に使われる。
ここまではなるほど、「確かにそうだな。プライベートIPで通信しないよなー。」ってなりました。
しかし、ここで思ったのが、**「パケットは飛んでいくけど、パケットが帰ってくるとき、どこに帰ってきたらいいかわからなくね?」**ということでした。
LANの中のノードからNATを経由してインターネットへパケットを出すときは、相手のグローバルIPアドレスを指定しているため問題なくパケットは届くものの、相手からパケットが帰ってくるときには行きで使ったNATまでは帰ってくるものの、そこからNATさんが「どこにこのパケット送ったらいいの???」ってなってしまいそうです。
NAPT
この問題を解決したのが、NAPT(Network Address Port Translation)です。NATにPortという単語が入ってきました。言葉の通り、LAN内のノードがNATを経由してインターネットと通信を行う際に、それぞれのノードにポート番号を振ることで、LAN内のPCを識別するというものです。
これで、LAN内のノードの識別を行うことができるようになったため、1対多の通信を行うことができるようになりました。NATではこの識別ができなかったため、1対1の通信しか行うことができませんでした。
##本当にNATは1対1の通信しかできないのか?
「NAPTを使わないと、1対多の通信はできないのか。NATってしょぼいのか。。。」と思ったがそうではないらしい。
動的NAT
動的NATでは、1つまたは複数のグローバルアドレスをNAT用に割り当て、LANからインターネット側へ通信しようとするホストへ先着順で1対1のペアとして変換します。
割り当てたグローバルアドレスの数と同数のノードが同時にインターネットとの通信可能することができるようになります。
NATに割り当てられたグローバルIPアドレスよりLAN側へ通信しようとするノードのほうが多く、グローバルアドレスがすべて使用されているときは、プライベートIPアドレスとグローバルIPアドレスの関連付けができません。そのため、
既存のセッションが終了すると、また先着順で空いたグローバルIPアドレスと1対1のペアとして関連付け、アドレス変換処理が行われます。
まとめ
プライベートIPアドレスとグローバルIPアドレスがLANからインターネットに通信するときに、変換されるのは知っていたが、その役割を持っていたのがNATさんであることがわかった。