ネットワークアドレス変換

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

ネットワークアドレス変換(ネットワークアドレスへんかん)、NAT(Network Address Translation)とは、インターネットプロトコルによって構築されたコンピュータネットワークにおいて、パケットヘッダに含まれるIPアドレスを、別のIPアドレスに変換する技術である。

プライベートネットワーク環境下のホストから、グローバルアドレスを持つゲートウェイを通して、インターネットにアクセスするために利用されることが多い。また、IPアドレスに加え、ポート番号の変換を行うものをNAPT(Network Address Port Translation)と呼ぶ。今日では、NATと言えばNAPTのことを指すのが一般的である。

技術の概要[編集]

IP アドレスの枯渇[編集]

元来、インターネットに接続される全てのルータホストには、それぞれ固有のIPアドレス(グローバルIPアドレス)が割り当てられていた。しかし、インターネットに接続されるホストが著しく増えたため、約43億個を上限とするIPアドレスは枯渇するようになった。こうした状況へ対応するため、LAN内のホストにはプライベートIPアドレスを割り当て、インターネットに接続するときだけグローバルIPアドレスを使用する技術が開発された。このときに用いられる技術がNATである。

アメリカ以外の国、例えば日本などでは割り当てられた IP アドレスに比べてコンピュータの普及が著しいため、IP アドレスが不足しやすい。最近の予測[いつ?]によれば 2011 年ころに IP アドレスが枯渇するといわれている。したがって、これらの国においてはNATは特に重要性が高いといえる。日本向けに発売されている ADSLFTTH などに対応したブロードバンドルータにおいては、業務用、家庭用を問わずNAT機能を持っていることが多い。

動的 NAT[編集]

動的 NAT (ダイナミック NAT) とは、LAN 内部の IP アドレスをあらかじめ用意された外部 IP アドレスの中の 1 個を選択してその IP アドレスに動的にマップする技術のことである。動的 NAT はセキュリティや不足する IP アドレスの問題解決に役に立つが、IP アドレスが固定されないという問題点がある。例えば、LAN 内部のサーバをインターネットなど、外部から参照する必要が生じた場合、外部から参照するためにはグローバル IP アドレスが必要だが、動的 NAT では解決できない。

静的 NAT[編集]

静的 NAT (スタティック NAT) とは、LAN 内部の IP アドレスを常に同一の外部の IP アドレスに静的にマップする技術のことである。この技術を使用すれば、LAN の外部から常に同一の IP アドレスを指定することによって内部サーバにアクセスすることができる。

NATとNAPT[編集]

現在では、プライベートIPアドレスとグローバルIPアドレスの変換に加えてポート番号も変換できるNAPTが用いられることが多い。NATオーバーロード、オーバーロード変換、PAT(Port Address Translation、Cisco Systemsによる呼称)、IPマスカレードLinuxにおけるNAPTの実装名から。マスカレード(masquerade)は、仮面舞踏会の意味)などとも呼ばれる。

元来のNATは、送受信するパケット上のIPアドレスだけを識別して変換するものであるため、複数のホストから同時にローカル外のネットワークに接続しようとすると、ローカルのホスト数と同数のグローバルアドレスが必要になる。NAPTでは、IPアドレスに加えてポート番号の識別や変換をすることで、複数のホストからローカル外のネットワークに接続する際、異なるローカルアドレスを同一のグローバルアドレス配下の異なるポートとして表現し、必要なグローバルアドレスの数を減らすことができる。 動的NAPTは、インターネットプロバイダから利用者に対するグローバルIPアドレスの割り当て等でよく用いられる。

セキュリティ[編集]

NATには、セキュリティを高める効果もある。グローバルIPアドレスをプライベートIPアドレスに変換するときに、パケットフィルタリング(パケット(syn)の条件を指定して制限)ができるためである。実際には、プライベートIPアドレスを割り当てられたホストには、特別な設定をしない限り外部のネットワークからは接続できないことが多い。こうした特徴から、NATは簡易的なファイアウォールの一種と考えることもできる。

非難[編集]

その一方、インターネットが本来掲げていたピア・ツー・ピアでの接続に対する障害になりうると非難する意見もある(エンドツーエンド接続性)。また、FTPや、SIPなどのVoIPを機能させるためには工夫が必要な場合もある。

また、複数のローカルIPアドレスからのアクセスを、1つのグローバルIPアドレスで共有しているため、外からはローカルネットワーク内のどのノードがアクセスしたのかまでを特定することはできない。このためインターネットカフェなどの不特定多数の人が利用するアクセス端末からの、悪意のある利用(SPAM行為や掲示板荒らしネット犯罪など)がなされた場合、匿名性が高く特定がより困難になる。

NATの分類[編集]

NATはアドレスやポート番号を変換する様々な仕組みに実装されている。そして、それぞれのアプリケーションの通信プロトコルに異なった影響を及ぼす。IPアドレスの情報を使用するいくつかのアプリケーションプロトコルはマスカレードに用いられる外部のアドレスを決定する必要がある。そしてさらに、しばしば与えられたNAT機器に用いられるマッピングの種類を発見し、分類する必要がある。このために、Simple traversal of UDP over NATs (STUN) protocol は開発された。それ (STUN) はNATの実装をFull cone NATRestricted cone NATPort restricted cone NAT、もしくはSymmetric NAT[1][2] に分類し、それ(この分類)に応じて機器を検査するための1つの手法を提案した。しかしながら、その後これらの手順はスタンダードステータスから除外された。なぜならこれらの方法は不完全で、多くの機器を正しく評価するには不十分であると判明したからである。新しい方法は RFC 5389 (2008) に記述されており、STUNの頭文字は現在、この仕様の新しいタイトルを表す: Session Traversal Utilities for NAT

Full cone NAT(または1対1NAT)
  • 内部アドレス (iAddr:port1) は外部アドレス (eAddr:port2) にマップされた時点で、iAddr:port1 から来た任意のパケットは eAddr:port2 から送られる。任意の外部ホストはパケットを eAddr:port2 宛に送ることによって iAddr:port1 に送ることができる。
Full Cone NAT.svg
Address-Restricted cone NAT
  • 内部アドレス (iAddr:port1) は外部アドレス (eAddr:port2) にマップされた時点で、iAddr:port1 から来た任意のパケットは eAddr:port2 から送られる。外部ホスト (hostAddr:任意) は iAddr:port1 が hostAddr:任意 にパケットを送ったことがある場合にのみ、eAddr:port2 にパケットを送ることによって、パケットを iAddr:port1 に送ることができる。"任意" はポート番号が何でもよいということを意味する。
Restricted Cone NAT.svg
Port-Restricted cone NAT

Restricted cone NATのように振る舞うが、ポート番号も制限される。

  • 内部アドレス (iAddr:port1) は外部アドレス (eAddr:port2) にマップされた時点で、iAddr:port1 から来た任意のパケットは eAddr:port2 から送られる。外部ホスト(hostAddr:port3) は、 iAddr:port1 が hostAddr:port3 にパケットを以前に送った場合にのみ、 eAddr:port2 にパケットを送ることによって、パケットを iAddr:port1 に送ることができる。
Port Restricted Cone NAT.svg
Symmetric NAT
  • 同一内部IPアドレスとポートから特定の宛先IPアドレスに対する要求は全て、唯一の外部ソースIPアドレスとポートにマップされる
    異なる宛先に対しては、同一内部ホストがたとえ同じソースアドレスとポートでパケットを送っても、異なるマッピングが使われる。
  • 内部ホストからのパケットを受け取った外部ホストのみがパケットを送り返すことができる。
Symmetric NAT.svg

この用語は多くの混乱を招く原因であった。なぜならそれは現実のNATの振る舞いを記述するには不適切であると判明したからである。[3] 多くのNATの実装はこれらの種類を組み合わせている。従ってCone/Symmetricという用語を使う代わりに、それぞれ固有のNATの振る舞いに言及する方がよい。特に、たいていのNAT変換装置は外部に出て行く方向への接続に対するSymmetricNAT静的ポートマッピングとを組み合わせている。外部アドレスとポートに入ってくるパケットは特定の内部アドレスとポートにリダイレクトされる。いくつかの製品は、例えば何台かのサーバの間に負荷を分散するために、複数の内部ホストにパケットをリダイレクトできる。しかしながら、これは多くの相互接続パケットが存在するような、より複雑な通信の場合に問題を引き起こす。従って滅多に使われることはない。

多くのNATの実装はポート維持設計に従う。 ほとんどの通信において、NATは内部と外部のポート番号として同じ値を使う。 しかしながら、2つの内部ホストが同じポート番号を使って同じ外部ホストと通信しようとするならば、2番目のホストによって使われる外部ポート番号はランダムに選ばれる。このようなNATは、時にはRestricted cone NATのように見え、別の時にはSymmetric NATのように見える。

関連技術[編集]

Connection Tracking機能[編集]

NATやNAPTではFTPSIPなどのVoIPなどうまく動作しないアプリケーションがあるため、さらにコネクションとトラッキングすることでそれらに対処した技術。Linuxiptablesなどで実装されている。

GapNAT機能[編集]

住友電工製のADSLモデムに内蔵のルータに実装されたDMZを実現する機能の名称[1]。 1つのグローバルIPアドレスしか提供されないIP接続サービス環境下において、DHCPによりローカルの一つのコンピュータにグローバルIPアドレスを割り当て、それ以外のコンピュータにはローカルIPアドレスを割り当てる。これによって、グローバルIPアドレスを割り当てられたコンピュータは、グローバルIPアドレスを直接使用しなければならないネットワークアプリケーションを動作させることができる。

UPnP の規定するInternet Gateway Device(IGD)[編集]

UPnPのインターネットゲートウェイデバイス(IGD)仕様に準拠したNATルータは,それに対応したアプリケーションから様々な操作(Action)を受け付けることが可能である。この動作の中に、ポートマッピングを作成・削除・情報取得を行う操作(Action)がある。UPnP NAT Traversalとも呼ばれる。

これにより、使用するアプリケーションがポートマッピングを要求する場合、従来はユーザーがNATルータに例えばwebブラウザからアクセスするなどして、手動で設定を加えなければならなかったものが、アプリケーション自身が直接ルーターにアクセスしポートマッピングのエントリーを追加・削除できるようになった。

市場に出回る「ブロードバンドルータ」などの商品名のもので「UPnP機能搭載」や「UPnP NAT Traversal対応」などと書かれている製品がこれに当たる。

IPv4 IPv6間 NAT[編集]

2007現在、IPアドレス枯渇問題で足りないとされているIPv4のIPアドレスであるが、将来的にはIPv6のIPアドレス体系に移行すれば、枯渇問題は解決すると見られている。しかし、その移行期間においてはIPv4とIPv6の双方のネットワークが混在することになり、両ネットワークを接続するNAT(プロトコル変換も行うためゲートウェイと呼ぶのが妥当)が必要となる。実際のゲートウェイの実装方法がRFC 2766によって提案されている。

関連項目[編集]

参照[編集]

  1. ^ STUN
  2. ^ NAT Types (PDF).
  3. ^ Francois Audet, Cullen Jennings (January 2007) (text). RFC 4787 Network Address Translation (NAT) Behavioral Requirements for Unicast UDP. IETF. http://www.ietf.org/rfc/rfc4787.txt 2007年8月29日閲覧。. 

外部リンク[編集]

  • RFC 1631 - The IP Network Address Translator (NAT)
  • RFC 2766 - Network Address Translation - Protocol Translation (NAT-PT)
  • RFC 3022 - Traditional IP Network Address Translator (Traditional NAT)
  • RFC 3235 - Network Address Translator (NAT)-Friendly Application Design Guidelines
  • RFC 4787 - Network Address Translation (NAT) Behavioral Requirements for Unicast UDP
  • LinuxのConnection Tracking機能説明