hysryt / wiki

https://hysryt.github.io/wiki/
0 stars 0 forks source link

NAT #84

Open hysryt opened 6 years ago

hysryt commented 6 years ago

概要

NAT

Network Address Transition

ネットワーク内外で通信ができるように、そのあいだを仲介して送信元や送信先のIPアドレスを変換する技術。 主にプライベートIPアドレスとグローバルIPアドレスの変換で使われており、ほぼ全てのルータがこの機能を備えている。

NAPT

Network Address Port Transition

NAT の機能に加え、ポート番号の変換も行う技術。 IPアドレスとポート番号の組み合わせで変換を行うため、複数のプライベートIPアドレスを1つのグローバルIPアドレスに変換して使用するといったことが可能になる。

近年では NAT と NAPT をひとまとめにして NAT と呼ぶことも多い。

CGN

Carrier Grade NAT

Large Scale NAT (LSN) とも呼ばれる。 携帯電話事業者やインターネット接続事業者が提供する機能で、CGNルーターはグローバルIPアドレスをシェアードアドレスと呼ばれる専用のIPアドレスに変換する。 シェアードアドレスは各契約者の家の CPE と呼ばれる終端装置でプライベートIPアドレスに変換される。

3種類のIPアドレスを使用するため NAT444 と呼ぶこともある。

NAT64

IPv6アドレスをIPv4アドレスに変換するNAT。

NAT46

IPv4アドレスをIPv6アドレスに変換するNAT。

hysryt commented 6 years ago

アクセス制御による区分

外部からの通信をどれだけ制限するかによって4つの区分に分けられる。

フルコーンNAT

制限をしない。 外部からの通信を全てNAT変換する。

アドレス制限コーンNAT

送信元のIPアドレスでの制限を行う。 通信を行ったことのあるIPアドレスからの通信のみNAT変換する。

ポート制限コーンNAT

送信元のIPアドレスおよびポート番号での制限を行う。 通信を行ったことのあるIPアドレスとポート番号の組み合わせからの通信のみNAT変換する。

対称NAT

送信元のIPアドレスおよびポート番号と、送信先のIPアドレスおよびポート番号での制限を行う。 送信元が、以前通信を行ったことのあるIPアドレスとポート番号の組み合わせの通信かつ、送信先が、内部からその外部への通信に使用したIPアドレスおよびポート番号への通信のみNAT変換する。

以前通信をした相手であっても、送信先がその時使用したIPアドレスとポート番号の組み合わせでない場合は通信できない。

hysryt commented 6 years ago

NATトラバーサル

外部からNAT配下の端末への通信する、あるいはNAT配下の端末が別のNAT配下にある端末への通信を可能にする技術。 通常、プライベートIPアドレス宛ての通信は同ネットワークにいないとできないが、NATトラバーサルによって可能となる。 NAT越えとも呼ばれる。

NATトラバーサルは総称であり、通信を可能にする実際の手段についてはNAT環境によって様々な種類がある。

静的ポートフォワーディング

内部向けのIPアドレスおよびポート番号と外部向けのIPアドレスおよびポート番号の組み合わせを事前にルータに登録することによって、外部からの通信を内部に転送する方法。 DMZにサーバを立てる時などに使用される。

UPnP NAT Traversal

UPnP を使用して自動的にルータにポートフォワーディングの設定を行う方法。 ルータとNAT配下の端末(ソフトウェア)の両方がUPnPに対応している必要がある。

STUN

Session Traversal Utilities for NATs

送信に対する受信は行えるというNATの性質を利用した方法。 NAT配下の端末はまずSTUNサーバに通信を行う。 そしてその時の外向けIPアドレスおよびポート番号に対して外から通信を行うことで、NAT外からNAT内への通信が可能になる。

STUNサーバが必要。 対称NATの環境では使えない。

UDPによってNATに穴をあける、UDP ホールパンチングとも呼ばれる手法に近いが、STUNは仕様上は UDPだけでなく、TCPやTLSによるTCPも使える。

TURN

Traversal Using Relay around NAT

TURNサーバを用意し、NAT配下の端末同士が全てそのサーバを経由して通信をする方法。 シンプルだが、NAT配下同士でP2Pの通信ができないため遅延が大きくなる。

TURNサーバが必要。 しかし全てサーバとクライアントでの通信であるため、対称NAT環境でも使用できる。

ICE

Interactive Connectivity Establishment

STUNとTURNを組み合わせた方法。 RFC5243

hysryt commented 6 years ago

STUN

NAT配下にいる端末が、自身のパブリック側のIPアドレスとポート番号を知るためのプロトコル。 NAT配下にいる端末同士がどのように通信をし合うかは STUN の仕様の範疇では無いため、STUNがNAT越えの手法というのは若干語弊がある。

ユーザ認証やメッセージ認証の機能も備える。

用語の定義

メソッド

STUN でのクライアント/サーバ間の通信の種類のことをメソッドと呼ぶ。 いまのところ、仕様にはBindingメソッドしか定義されてない。

Bindingメソッド

NATが割り当てた(bindingした)リフレクシブトランスポートアドレスを知るためのメソッド。

クライアントがBindingリクエストを送るとサーバはBindingレスポンスを返す。 サーバはBindingレスポンスを返す際、Bindingリクエストの送信元トランスポートアドレスを含める。 Bindingリクエストの送信元トランスポートアドレスは、サーバまでに届く途中、NATによってリフレクシブトランスポートアドレスに変換されているため、クライアントはBindingレスポンスを見ることによって自身のリフレクシブトランスポートアドレスを取得することができる。

DNS

STUNサーバをDNSサーバに登録する場合は、SRVレコードを使用する。