今回はNAT(Network Address Translation)について書きます。NATはほとんどのネットワークで、もっと正確にいえばネットワークの接続部分に使われているとても重要なものです。一番身近なところでは、自宅のPCのIPアドレスはプライベートIPアドレスなのに、インターネットの世界に接続できている、さらに言うと複数のPCが同時にインターネットに接続できているという方が多いのではないでしょうか。こんなことができるのはNATのおかげなんです。
NATを理解するにはIPアドレスとTCPのポート番号の理解が必ず必要ですので、まだこのあたりの理解が怪しい場合には先に以下のエントリを参照してもらえればと思います。
NATは何をするものか
NATはその名の通りアドレスを変換するものです。具体的にはパケット内のIPアドレスやTCPのポート番号を書き換えます。その書き換えパターンによって様々なバリエーションがあり、呼び方や目的が変わってきます(一部同じものもありますが)。よく耳にするのは以下のようなものです。
-
1対1NAT
-
NAPT(Network Address Port Translation)
-
IPマスカレード(IP masquerade)
-
DNAT(Destination NAT)
-
SNAT(Source NAT)
それでは具体的な利用シーンを想定しながら動きを見て行きましょう。
(NAT無し)自宅PCからインターネットにアクセスする
まずは理解を容易にするためにNATを使用しない状態から解説します。以下のような接続を考えます。
-
PCがグローバルIPを持っている
-
PCからゲートウェイまで直接通信する
これでなんの問題もなく世界中と通信出来る訳ですが、同時に世界中の誰からも自由にアクセスされる状態にもなっている事がポイントです。NATを考える時には「どこにアクセス出来るか」に加えて「どこからアクセスされるか」が重要になってきます。 因みに、本当にこのように「PCを直接インターネットに接続する」のは非常に危険なので行わないようにして下さい。恐らく数分で攻撃される事になります。
ブロードバンドルータ経由でインターネットに接続する
次に一般家庭でよくあるように、まずブロードバンドルータがインターネットに接続し、その下にPCを接続する構成を考えます。 また、説明のために、インターネットの向こう側にWEBサーバーがある場合を考えてみます。
-
PCはプライベートIPを持っている
-
PCはデフォルトゲートウェイとしてブロードバンドルータを利用する
-
ブロードバンドルータはグローバルIPを持っている
この接続は一般的なもので、PCからインターネットに接続する事ができます。 「プライベートIPはインターネット上では使用できない」ということを知っていれば、「なぜプライベートIPしか持っていないPCがインターネットにアクセスできているのか?」という疑問が出てきます。ここでNATが使われているのです。
簡単にいうと、「PCがインターネットにアクセスしようとする時に、ブロードバンドルータからのアクセスという事にする」ことでアクセスできるようにしています。 この時の動きをIPアドレスに注目してパケットレベルで詳しく見てみましょう。
まず、PCからWEBサーバーに接続要求が出されます。送信元IPアドレスは192.168.1.1, 宛先IPアドレスはGlobalIP Bになります。
このパケットはまず、デフォルトゲートウェイであるブロードバンドルーターに届けられます。ブロードバンドルーターはそのままルーティングするのではなく、送信元IPアドレスを自分自身のグローバルIPに変換して送信します。宛先IPアドレスはGlobal IP Bのまま、送信元IPアドレスはGlobal IP Aになります。
この時、パケット内のIPアドレスが書き換えられています。これこそがNATです。通常のルーターであれば、IPアドレス部分は参照するのみで書き換えることはしません。NATはIPアドレス部分を書き換える(※TCPポート番号まで書き換えるタイプのNATもあります)ここがポイントです。
それでは続きを見てみましょう。 パケットは途中いくつものルーターを経由して、WEBサーバーにまでパケットが届きます。この時WEBサーバーにしてみると、通信をしてきたのは単にブロードバンドルーターであるように見えます。PCの存在はWEBサーバーにはまったくわかりません(わかる必要もありません)。ここも1つのポイントです。NATが行われる場合実際の送信元、送信先とパケット上の送信元、送信先が異なることが多いです(NATの種類にもよります)。
次はWEBサーバーからの応答です。WEBサーバーはブロードバンドルーターからの通信だと思っていますので、宛先IPアドレスはGlobal IP A,送信元IPアドレスはGlobal IP Bになります。
このパケットがブロードバンドルーターに届きます。ブロードバンドルーターはこの通信はPCからの通信だと知っていますので(※NATをかけたときにそのことを記憶しておけばいいわけです。)宛先IPアドレスを192.168.1.1に変換し、送信します。ここでもNATが行われています。
さて、PCまでパケットが返ってきました。この時PCにしてみれば、送信したものに対して単純に応答があったように見えます。ブロードバンドルーターがNATをしてくれているかどうかなんて特になにも気にしなくてよいのです。別の言い方をすると、パケットの行きと帰りの両方でブロードバンドルーターが適切にNATしてくれたおかげで、PCとWEBは普通の通信にみえ、だからこそ通信が成り立つのです。 それぞれの立場でパケットのやり取りを見てみましょう。
PCの立場
送信パケット
応答パケット
WEBサーバーの立場
受信パケット
応答パケット
どうでしょう、なかなかうまくできてますよね。ブロードバンドルーターが間で相互に変換してあげることでうまく通信できるわけです。おかげでプライベートIPしか持たない端末がインターネット上のグローバルIPを持つホストと通信することができました。
さて、これがNATの基本なのですが、ここまでの解説のなかであえてTCPのポート番号には触れませんでした、結果ここまでの解説は嘘ではないにしても若干情報が足りないものになっています。特に「もしもPCが2台以上あったら?」ということを考えてみるといい頭の体操になると思います。
次回はTCPのポート番号まで意識してNATを見てみることにします。来週水曜日のお昼の更新を楽しみにお待ち頂ければと思います。
コメントを残す