class: title, smokescreen, shelf, no-footer # NAT<br>(Network Address Translation) <div class=footnote> <small><small> </small></small> </div> <div class=digest-begin-01></div> --- class: col-2,compact # IPv4延命策としてのプライベートアドレスとNAT <div class=footnote> <small><small> (脚注) まずIP masqueradeという機能がLinuxカーネルに登場し、 のちにNAPTと呼ぶようにしたため名称が二つあります。 設定にnatではなくmasqueradeという名称を使うことがあるため、 どの用語も覚えること </small></small> </div> <small> - IPv6の開発開始と同時に**IPv4延命策としてプライベートアドレスとNAT**を導入 - 図の(2)でNATを行っていて、 (2)より上はグローバルアドレス、 (2)より下はプライベートアドレス (色がついているところはグローバルIP) |用語 | | |-------------|----------------------------------| |**NAT** |Network Address Translation | |**NAPT** |Network Address Port Translation | |**IPマスカレード**|NAPTと同じ意味| ![](/slides/network/tcpip/inet_intro/images/term-intranet-ipaddr.png) </small> --- class: img-right,compact # NAT 行きの通信 <div class=footnote> <small><small> (脚注) DST = destination, SRC = source </small></small> </div> ![](images/napt.png) <small> - 例: 学内のホストからWWWサーバ(IPは182.48.54.220)へのアクセスを考えます - 図(2)の機器のインターネット側インターフェイスのIPアドレスは210.128.52.4です - 図(2)のファイアウォールを通過時、IPヘッダとTCPヘッダを書き換えます - 送信先(DST)のIPアドレスとポートは変えません。 送信元(SRC)のIPアドレスを210.128.52.4へ書き換え、 送信元ポート番号を適当な番号(注: 通信ごとに異なる番号)へ書き換えます - この書換えルールを機器は覚えておきます - WWWサーバには送信元(SRC IP)がグローバルIPアドレス=210.128.52.4に見えるので普通に通信できます </small> --- class: img-right,compact # NAT 返りの通信 ![](images/napt-reply.png) <small> - 返りのパケットは、 182.48.54.220(送信元=SRC)から210.128.52.4(送信先=DST)へ送られてきます。 当然ポート番号はHTTPコネクションごとに異なります - 図(2)の機器は各HTTPコネクションの書き換えルールを覚えているので、 IPアドレスとポート番号の組み合わせを見ながらIPとTCPヘッダを逆に書き換えます - 書き換え後、学内側へ送信します - こうすれば、プライベートアドレスでもインターネットのサーバと通信ができるわけです </small> --- class: col-2,compact # NAT メリット <div class=footnote> <small><small> (脚注1) 16ビットの使い方にも流儀があり、 実際には16ビットすべてをNAT変換に利用していません <A HREF=https://www.nic.ad.jp/ja/basics/terms/port-number.html> ->JPNICの解説 </A> <br> (脚注2) アドレスとポートを書き換えてゴマかす小手先芸を、 (NAPTも含めて)総称でNATと呼ぶことが普通ですが、 本来のNATはIPアドレスだけを変換する規格のことです <br> (脚注3) なおIPv6ではNATを使いません。あくまでもNATはIPv4の延命策で邪道な技です </small></small> </div> - 前頁で説明した例では、アドレスとポート番号の両方を変換するので、 **NAPT**もしくは**IPマスカレード**と呼ばれます。 - 通信(例: TCPコネクション、UDPパケット)ごとに、 送信元ポート番号(SRC PORT)を変えていくことで、 ポート番号の大きさ、 つまり16ビット(65536個)分の書き換えルールが(最大)使えます (理論上は使えるという話です;脚注1も参照) <wbr> - 例: 大学のユーザ数は1000人強ですが、 短時間のTCPコネクションも多いため、 1つのグローバルIPで(つまりSRCポート番号変換だけで)十分さばけています - 16ビット以上に書き換えルールを増やすには、 書き換え先のIPアドレス候補も追加します。 例: SRC IPとして210.128.52.4と210.128.52.5の2つを使えば、 最大で約13万とおりの変換が可能となります --- class: col-2,compact # NAT デメリット - IPアドレスに住所の意味が無くなります - ホストにつけるプライベートアドレスは、 世界で一意にホストを識別する数字になっていないので、 正しい意味での住所(ユニキャストアドレス)になっていません <wbr> - 本来のEND-TO-END通信ではないです - 必ず途中にNATをする機材が挟まります。 この機材のせいで、通信がうまくいかないことがあります --- class: col-2,compact # NAT デメリット <div class=footnote> <small><small> </small></small> </div> <small> - 自由な双方向通信が出来ません - 本来のEND-TO-END通信なら特別な制限なく出来るはずです - たとえばIP電話で受信する場合を考えます。 インターネット側から来た(いわば一見さんの)初パケットに対しては、 NATの書き換えルールが分からないので変換できません - 右図は返りのNATの説明(再掲): <br> あくまでも、まず最初に学内から学外へ出て行く通信があり、 そのときに書換えルールが決まります。 そのあとはじめて逆変換も出来るようになるわけです </small> ![](images/napt-reply.png) <div class=digest-end-01></div>