MCU入門 第9回 NAT/FW トラバーサル③
– NAT/FW トラバーサルの仕組み “NATとは”

2011年9月掲載

NAT(ナット:Network Address Translation)とは

Network Address Translationの略で、通常はルーターが提供する機能です。
自社の内側の人が外側の人とダイレクトに接続しないように、一度IPアドレス(住所)を変換してくれる通訳の役割をします。
もともとは、ローカルアドレス(プライベートアドレス)を利用しているPCを複数台グローバルアドレスに接続するという、利便性のための仕組みです。
現在IPv4のグローバルアドレスは枯渇してしまいましたが、ローカルアドレスをうまく利用することで、グローバルアドレスの有効活用ができます。

上記は、「内から外側」という見方です。逆に、外から内側という見方をするとどうでしょう?
ルーターのグローバルアドレスが1つしかないのに、ローカルIPであるPCは複数台存在します。
アドレスが1対1対応ではないので、外部から見たら内部のPCを特定できない=セキュリティが高いのです。

「NAT」にも、種類があります。通常「NAT」というと、狭い意味のNATとNAPTの両方を含むことが多いです。この2つは、名前は似ているのですが、仕組みが違います。

狭い意味の NAT (Network Address Translation) はTCP/UDPのポート番号は変換せず、IPアドレスだけをルータで変換します。変換されるのは一度に1つのローカルアドレスだけです。このため、複数のローカルアドレスで外部接続しようとすると、時間をずらす必要があります。

NATのしくみイメージ図

NAPTは、Network Address Port Translationの略です。NATとの違いは「Port」。そう、IPアドレスを変換する点ではNATと同じですが、TCP/UDPのポート番号をルーターで動的に変換するところが違います。ポート番号の変更をするおかげで、ローカルアドレスのIPが複数同時にグローバルに出て行ける、という長所があります。

でも、ポート番号って、サーバーのプログラムサービスを指定するための番号ですよね。
ルーターが勝手にポート番号を変えたら、必要なサービスが受けられなくなるような気がしませんか?

NAPTでは、サーバーへの「返信宛先通知」のときに利用する、クライアントの「IPアドレスとポート番号」をルーターで変更する、というものです。ポート番号は、サーバーのサービスを指定するためのものなので、クライアントのポート番号は任意のものでかまいません。
このため、ルーターはNAPT機能によって、IPアドレスをクライアントのものからルーター自身のものに、ポート番号を、任意の番号に書き換えます。
サーバからの返信は、ルーターのIPアドレス宛てで、先に任意で付けたポート番号宛てに来ます。
ルーターはそれを受け取ったら、先とは逆の変換をします。
IPアドレスをクライアントのIPアドレス、ポート番号はクライアントがつけていた元のポート番号に戻すのです。
このため、サーバーからクライアントに返信が届くときは、クライアントが最初に指定した「IPアドレスとポート番号」宛てに戻ってくることになります。クライアントからすると、あたかもNAPTされておらず、サーバーと直接行ったように、通信が成り立つのです。

NAPTのしくみイメージ図