Phase 2 Version1 2001/2/18 Version2 2002/03/13 -02-j.txt by Kuniaki Kondo Kuniaki Kondo IIJ March 2002 Network Address Translation with Sub-Address(NATS) Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026 except that the right to produce derivative works is not granted. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as ``work in progress.'' The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. 1. Abstract 現在のIPv4アドレスを利用したネットワークにおいては、様々な理由からネッ トワークのエンドノードでNAT[1]などのアドレス変換技術が多様されている。しか し、これらの技術は場合により、双方向での透過的通信に支障をきたす場合があ る。  この文書では、これらNATなどのアドレス変換技術を拡張し、任意のホスト間 で双方向で透過的通信を行うことを可能にするために、IPv4アドレスにサブアド レスを付加し、拡張する方法について定義する。 なお、ここで定義するプロトコルを以降NATS(Network Address Translation with Sub-Address)と呼ぶ。 2. Overview  この文書で定義される拡張には、大きく3つの特徴がある。   a) 利用エリアを、ネットワークのエンドノードに限定している。   b) ホスト、ルータ共に実装が容易である。 つまり、NATSでは、エンドノードが上位ネットワークに接続される(ダイアル アップルータのような)ルータを含むエンドノードセグメントの機器とアプリケ ーションに軽微な変更を加えるだけである。  この拡張は、IPv4アドレスに付加する形で、IPv4アドレス1つにつき16ビット のサブアドレス空間を持たせる。このサブアドレス空間は、IPv4アドレスと同様 に、ソースアドレスとディスティネーションアドレスをもち、これらをIPv4パケ ットのオプションフィールドに挿入することで実現する。  この実装により、仮にNATSを実装していないルータやホストでNATS対応パケッ トを受け取った場合でもそれらの機器には特別な処理を要求しない。  プロトコルの設計に当たっては、NATS対応機器が未対応パケットを受信した場 合や未対応機器が対応パケットを受信した場合でも、これまでの通信に影響与え ないような互換性を重視して設計する。 3. Sub-Address空間   Sub-Addressの空間は16bitの空間で指定される。   ただし、以下のアドレスは予約されている。   0x0000 : Unknown Sub-Address (USA) 4. NATSのデータ通信  NATSでのデータ通信は、IPパケットのオプションとしてサブアドレス情報を付 加することで行う。これらのNATSパケットは、IPv4パケットのOptionフィールド を検査することで判別できる。ただし、バックボーンルータのような場面におい ては、特にこの部分を気にする必要はなく、従来のIPv4プロトコルに規定される 動作を行えば問題ない。オプションにNATSのオプションが付加されていなければ、 通常のIPv4として利用し、NATSオプションが付加されていればNATSパケットと認 識して、以降に定義する挙動をしなくてはならない。  以下にNATSのIPオプションフォーマットを示す。  - IP Option Header Format Copied Flag : copied : 1 Option Class : Control : 0 Option Numebr : Not Defined : N/A Option Length : Fixed : 8 Octets 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 100nnnn | 00001000 | N/C | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ N/C: Not Care: 通常は0x00を指定する。 5. NATSの制御情報  NATSでは、サブアドレス情報をルータとホストの間で交換したり、その他必要 な制御情報をやり取りするために、以下に示すような制御情報交換用のインタフ ェースを定義する。  - NATSルータ   制御情報交換用のインタフェースとして、UDPのポートnnでその要求を待機   しなくてはならない。  - NATSクライアント   制御情報交換用のインタフェースは持たない。  以下に、このインタフェースのエンコードを示す。  - NATS Control Port Encording 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type  | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  Typeフィールド: Typeフィールドは、NATSヘッダのNATS Data部のデータの種類を指定     する。詳しくは、後述する。 6. 制御情報のType別機能とフォーマット Typeフィールドは、制御情報フォーマットのDataフィールドの種類を指定す る。Typeフィールドに指定できる値は以下のとおり。   0: 予約     (Capsulated NATSとの互換性のため)   1: Sub-Address Discovery 本メッセージは、NATSルータからSub-Addressの情報を受け取ったり     Sub-Addressとローカルネットワーク内のIP Addressとのバインディング     情報を取得したりするのに利用される。     このため、本メッセージは、ローカルネットワーク内のホストから     NATSルータに対して要求が行われる。また、NATSルータは本メッセージ     を受け取った場合でも、送信元のホストがNATS対応ホストと判断しない。     ホストがNATS対応であるかどうかの判断は、Type 2の     Sub-Address Registrationのみによって行われる。 以下に、メッセージのフォーマットを示す。 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Error Num. | SA | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IP address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type番号は1. フォーマットで利用されるError Num.は以下のとおり。      0x00 : No Error 0x01 : Unknown IP Address 0x02 : Unknown Sub-Address     本メッセージを受信したNATSルータは、メッセージ内に含まれる情報     によって以下に示す挙動を行う。     - SA = 0x00(USA) / IP Address = 0.0.0.0 NATSルータは、送信元ホストのIP Addressを元に対応するSub-Addressを   内部テーブルより検索し、その結果をSAフィールドおよびIP Address   フィールドに設定して応答する。 対応するIP Addressが見つからない場合、NATSルータは、Error Num. が0x01(Unknown IP Address)で送信元ホストに応答する。     - SA != 0x00(USA) / IP Address = 0.0.0.0 NATSルータは、SAフィールドに設定されているSub-Addressを       元に対応するIP Addressを内部テーブルより検索し、その結果を       IP Addressフィールドに設定し応答する。       対応するSub-Addressがない場合には、Error Num.が0x02 (Unknown Sub-Address)で応答する。     - SA = 0x00(USA) / IP Address != 0.0.0.0 NATSルータは、IP Addressフィールドに設定されているIP Address を元に対応するSub-Addressを内部テーブルより検索し、その結果を       SAフィールドに設定し応答する。   対応するIP Addressがない場合には、Error Num.が0x01(Unknown IP Address)で応答する。     また、一般的にこの要求に対するタイムアウトは任意であるが、デフォ     ルトで30秒とすることが望ましい。 2. Get I/F Address ホストがNATSルータのI/F Numフィールドに指定されるのIP Addressを     取得するために用いる。ただし、このメッセージをNATSルータが受け     取っても、送信元ホストがNATSをサポートしていると判断してはなら     ない。     このメッセージは主にNATSルータに割り当てれられている、WAN側     インタフェースのIP Addressを取得するために利用される。 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | I/F Num. | Error Num. | N/C | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IP Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type番号は2。     アドレス要求と応答で同一のフォーマットを用いる。     要求時、Error Num.とIP addressは、0x00でクリアされていることと     する。     I/F Num.は対象NATSルータが固有で持つI/F番号とする。一般にSNMP で用いられるI/F番号と同一なのが望ましい。     尚、I/F Numに OxFFが指定された場合は、デフォルトのインタフェー     スをさすこととする。     応答時は、これらすべてのフィールドが適切な値に設定されていなく     てはならない。     Error Num.フィールドでは、NATSルータでアドレスを取得するに際し     エラーが発生し、アドレスを通知できないときにその内容を通知する ために用いられる。エラー番号は以下の通り。     0: No Error 1: I/F Not Available 指定のI/F番号のインタフェースがNATSルータにない場合に        用いられる。 2: I/F Not Enabled        指定のI/FがNATSルータで有効になっていない場合に用い        られる 3: I/F Not Active        指定のI/Fにアドレスが割り当てられていないなど、通信が        できない状態にあるときに用いられる。 4: System Error その他、システムに不具合があり、I/Fの情報が取得できな        かった場合に用いられる。     尚、上記エラー1から4の場合、IP Addressフィールドは0x00で     埋められることとする。   3: 予約     (Capsulated NATSとの互換性のため) 7. アドレス表記 - 直接指定 !example.com は10進数表記で表現することとする。    参考:ホストがNATS未対応の場合、名前解決の際、FQDNが "!example.com"のアドレスを検索しようとする。この際、DNS       のAレコードに "!example.com"のエントリが解決できるように       設定しておくことで、アクセス対象となるNATSセグメントのゲートウ       エイアドレスが解決できる。これは実質的な解決ではないが、接続の       要求を可能な限り努力するという観点では非常に重要であるため、 NATS拡張のホストをDNSにエントリする際には、このような登録をし       ておくことを推奨する。  - 名前指定 名前によるアドレス解決は通常のDNSを利用して行なわれる。    DNSでのSub-Addressの解決にHINFOを利用する。HINFOフォーマットは以下の    通り。    hostname HINFO "/SUBA:!/" "" 名前によるアドレス解決は通常のDNSを利用して行なわれる。    DNSでのSub-Addressの解決にHINFOを利用する。HINFOフォーマットは以下の    通り。    hostname HINFO "/SUBA:!/" "" '/SUBA:'から'/'の区間にかかれた受信表示がNATSで利用されるアドレスを表 現し、はSub-Addressを、はIPv4アドレスを表現す る。については、FQDNでの記述がゆるされ、その場合、ホスト側 では、Aレコードを再度検索し、そのアドレスに対して適切な動きをしなくて はならない。    指定部以外の部分は無視されることとする。また、この区間はHINFO内で表現 される文字列のいかなる部分にあっても良いこととする。    HINFOリソースフィールドは、CPU情報とOS情報の2つのフィールドに分かれ    ているが、サブアドレス情報はどちらかに上記フォーマットで記述されてい    れば有効となり、2回以上の指定が合った場合には、最初に指定されたサブ    アドレスが有効となる。 8. 挙動 8.1 ホスト ホストは、コネクションの要求パケットを送出する際、以下の条件に合致す  るときにNATSオプションヘッダを追加して送出しなければならない。   1. ホスト名をDNSから検索するとき、7章に記述した方法でIP Addressおよび     Sub-Addressを検索し、Sub-Addressが、USA以外で指定されている場合。   2. アプリケーションより直接、Sub-Addressが指定された場合。 また、ホストはNATSエンコードされたパケットによってコネクション要求を  受け取った場合はの応答は、NATSエンコードしたパケットで返さなくてはなら  ない。   ただし、NATSサポートホストが自Sub-Addressをもたない場合は、いかなる  場合もNATSエンコードしたパケットを送出しない。 8.2 ルータ 8.2.1 NATSルータに必要な機能 NATSルータは、ルータ内にセグメント内で利用するIP Addressとそのアドレ  スに対応するSub-Addressのテーブルを保持する必要がある。 仮に、セグメント内から受信したNATSエンコードされたパケットのSSAが既 にルータ内にあるテーブルと一致しない場合は、受信したパケットの Sub-Addressが有効なものとして処理する。 8.2.2 NATSルータによるDNSフックメカニズム NATSルータでは、ローカルセグメントにNATS未対応ホストがつながれている 場合でも極力NATSの効果を発揮できるようにするためにホストからのDNS検索 要求をフックするようなメカニズムを導入する事が望ましい。 以下にDNS検索要求をフックするメカニズムを示す。  1)NATS対応ルータでは、ローカルネットワーク(LN)からのDNSクエリをフック   する。理想的には、LN内からのDNSの向け先は、NATSルータとするが、そう   なっていない場合でも、NATS対応ルータを通過するDNSクエリはHookしなけ  ればならない。  2)LN内のホストからNATSルータがAレコードのDNSクエリを受信した場合、この クエリを代理でNATSルータがグローバルにあるDNSにクエリを発行する。こ のとき、AレコードおよびHINFOレコードのクエリを発行する。 ただし、クエリが"!"型の場合、HINFOは検索せず、   のAレコードのクエリのみを発行し、対象ホストはNATS対応ホス   トと判定され、下記4)以降の処理を実施する。  3)NATSルータが発行したクエリの応答によりHINFOレコードが取得され、且つ   HINFOレコードに適切にIPアドレスとサブアドレスが記述されている場合、   該当ホストはNATS対応ホストと判定される。 4)DNS検索の結果、検索対象ホストがNATS対応ホストと判断される場合、NATS ルータは、NATS用に確保された仮想のIPアドレスを該当するクエリに対し   割り当て、この対をNATSルータ内に記憶する。NATSルータはその仮想のIP   アドレスをLN内から受けたAレコードDNSクエリの応答として返す。このとき   の応答パケットには、HINFOレコードの値も格納しておく。  この仕組みにより、LN内のNATS未対応ホストは外部のNATS対応ホストと通  信する際には、NATS対応ルータより返される仮想のIPアドレスをDestination アドレスとして接続を行う。この接続要求はNATSルータで適切なIPアドレス  に変換されると共に、サブアドレス付きのNATSパケットに変換され、グロ  ーバルネットワークに送信されることになる。  また、接続先ホストから返されるパケットをNATSルータが受信した場合、 そのソースアドレスは先に割り当てた仮想のIPアドレスに変換され接続元 ホストに返される必要がある。 これらの様子を下図に示す。 - Case 1: Normal Case  NATS non-support host NATS Router DNS Host A (Local Network) | | | | |DNS Query:Host A |DNS Query:    | | |---------------------->| 'A'/'HINFO' RR     | | |   |---------------------->| | | | | | | | DNS Answer | | | | HINFO = | | | | '/SUBA:100!10.0.0.1/'| | | |<----------------------| | | DNS Answer(Assigned) | | | | A = 172.0.0.1 | | | | HINFO = | | | | '/SUBA:100!10.0.0.1/'| | | |<----------------------| | | | | | |Dest = 172.0.0.1 | | |Src = 192.168.0.1 | | |---------------------->|Dest = 100!10.0.0.1 | | |Src = 50!192.168.100.1 | | |---------------------------->| | | | | |Dest = 50!192.168.100.1 | | |Src = 100!10.0.0.1 | | |<----------------------------| |Dest = 192.168.0.1 | | |Src = 172.0.0.1 | | |<----------------------| | | | | - Case 2: Pre-Specified Case  NATS non-support host NATS Router DNS Host A (Local Network) | | | | |DNS Query:Host A |     | | |(100!example.com) | | | |---------------------->|DNS Query: 'A' RR   | | |   |---------------------->| | | | | | | | DNS Answer | | | | A = 10.0.0.1 | | | |<----------------------| | | DNS Answer(Assigned) | | | | A = 172.0.0.1 | | | |<----------------------| | | | | | | |Dest = 172.0.0.1 | | |Src = 192.168.0.1 | | |---------------------->|Dest = 100!10.0.0.1 | | |Src = 50!192.168.100.1 | | |---------------------------->| | | | | |Dest = 50!192.168.100.1 | | |Src = 100!10.0.0.1 | | |<----------------------------| |Dest = 192.168.0.1 | | |Src = 172.0.0.1 | | |<----------------------| | | | | 8.2.3 NATS対応ルータの挙動 - WAN側よりNATS対応パケットを受信した場合、内部のテーブルを参照し、適 切なホストにパケットを転送する。   この際、転送先ホストのNATS対応可否にかかわらず、オプションヘッダの内   容を変更せず、アドレス変換のみを行って転送する。   指定のSub-Addressに対応するホストが見つからない場合、送信元ホストに対   してICMP_UNREACH/ICMP_UNREACH_HOST_UNKNOWNを返すこととする。  - WAN側よりNATS未対応パケットを受信した場合、そのパケットはDefault Host に指定されたホストに転送する。しかし、Default Hostの指定がない場合は、 送信元ホストに対してICMP_UNREACH/ICMP_UNREACH_HOST_UNKNOWNを返すこと   とする。  - LAN側よりNATS対応パケットを受信した場合、そのパケットはNATS対応パケ ットのままターゲットホストに転送される。このとき、ルータはIPv4ソース アドレスをWAN側のアドレスに変更してパケットを送出しなくてはならない。  - LAN側よりNATS未対応パケットを受信した場合、そのパケットはNATS未対応   パケットのまま、ターゲットホストに向けて転送される。このとき、ルータ はIPv4ソースアドレスをWAN側のアドレスに変更してパケットを送出しなく てはならない。 ただし、NATSルータにDNS検索フック機構が実装されており、受信したパケ ットのDestinationアドレスがNATSルータより割り当てられたNATS用スプー ルアドレスだった場合、NATSルータはスプールアドレスに関連付けされてい る適切なサブアドレスとIPアドレスでNATSパケットを構成して転送しなくて はならない。 また、このDNS検索フック機能を利用してローカルネットワークから接続さ れたセッションの場合、WAN側より受信したSource Addressを先に割り当て たNATS用スプールアドレスに変換して転送先ホストにパケットを送らなくて はならない。 9. 実装上の推奨 NATSの実装に当たっては、ローカルセグメントとグローバルネットワークを 接続するゲートウエイルータとNATSの機能を利用するすべてのホストに実装さ れることが望ましい。しかし、NATSの機能を利用するすべてのホストに実装す ることは困難である。   このため、以下に記述する機器へ実装することによって、ホストへの実装を 最小限に抑える事ができる。   1. NATSの機能を利用するセグメントに接続されるすべてのゲートウエイルー タ 2. グローバルなセグメントに接続され、NATSの機能を有するセグメント内の ホストへ接続するすべてのホスト   つまり、この段階でNATSルータで分断されているローカルネットワーク内の  ホストへの実装は必須ではない。   また、ルータおよびホストへの実装にあたり、Sub-Address Discoveryおよび Sub-Address Registrationの機能は、ルータ内に適切にサブアドレステーブル  を持つことによって代用できるため、これらの機能についても実装は必須では ない。 10. IANA Considerations The Type Field value 0 - 3 are assigned in this document. Type Field value 4 - 127 for extended-type are to be assigned by IANA, using the "First Come First Served" policy defined in RFC2434. Type values 128 - 255 for extended types are for vendor-specific types, and values in this range are not to be assigned by IANA. 11. Acknowledgements Thanks to Toshiya Asaba, Ikuo Nakagawa, Ryo Shimizu, Kiyoshi Ishida, Tomokazu Takizawa, Masahiko Tsuda, Junichi Watanabe and Susan Harris for their comments. Appendix 1: Implementations(実装) NATSの実装は、以下の予定で開発されています。   - Linux RedHad Linux上でNATSホストおよびNATSルータの実装を行っています。     3月にテストバージョンをリリース予定です。   - Products     製品としての実装は以下のものを予定しています。     - IIJ/SEIL - SOHO Router Appendix 2: Mainling List NATSに関する議論は、下記のメーリングリストで行われています。 また、NATSに関する情報は、下記のホームページにまとめられています。   - メーリングリスト    nats@nats-project.org - nats-ctl@nats-project.org宛てのメールの本体に、      "subscribe "とかかれたメールを送付することで      登録することができます。   - ホームページ    http://www.nats-project.org/ http://www.nats-project.org/index-h.html (日本語) REFERENCES [1] P. Srisuresh and M. Holdrege "IP Network Address Translator (NAT) Terminology and Considerations", RFC2663, August 1999 Authors' Address Kuniaki Kondo IIJ, Inc. 3-13 Kanda, Nishiki-Cho, Chiyoda-ku, Tokyo, Japan Email: kuniaki@iij.ad.jp Full Copyright Statement Copyright (C) The Internet Society (2002). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.