この文書はRFC3089の日本語訳(和訳)です。 この文書の翻訳内容の正確さは保障できないため、 正確な知識を求める方は原文を参照してください。 翻訳者はこの文書によって読者が被り得る如何なる損害の責任をも負いません。 この翻訳内容に誤りがある場合、訂正版の公開や、 誤りの指摘は適切です。 この文書の配布は元のRFC同様に無制限です。


Network Working Group                                        H. Kitamura
Request for Comments: 3089                               NEC Corporation
Category: Informational                                       April 2001


               A SOCKS-based IPv6/IPv4 Gateway Mechanism
             SOCKSを基にしたIPv6/IPv4ゲートウェイメカニズム

Status of this Memo
この文書の状態


   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.
   このメモはインターネット共同体のための情報を供給します。これは標準
   を指定しません。このメモの配布は無制限です。

Copyright Notice
著作権表示

   Copyright (C) The Internet Society (2001).  All Rights Reserved.

Abstract
概要

   This document describes a SOCKS-based IPv6/IPv4 gateway mechanism
   that enables smooth heterogeneous communications between the IPv6
   nodes and IPv4 nodes.
   この文書はIPv6ノードとIPv4ノードの間に滑らかな異種間通信を
   可能にするSOCKSを基にしたIPv6/IPv4ゲートウェイメカニ
   ズムを記述します。

   It is based on the SOCKS protocol [SOCKSv5].  By applying the SOCKS
   mechanism to the heterogeneous communications and relaying two
   "terminated" IPv4 and IPv6 connections at the "application layer"
   (the SOCKS server), the SOCKS-based IPv6/IPv4 gateway mechanism is
   accomplished.
   それはSOCKSプロトコル[SOCKSv5]に基づいています。異種間通信にSO
   CKSメカニズムを用いて、「アプリケーションレイヤ」(SOCKSサー
   バー)で2つの「終端した」IPv4とIPv6接続を中継することによっ
   て、SOCKSを基にしたIPv6/IPv4ゲートウェイ機構は達成され
   ています。

   Since it is accomplished without introducing new protocols, it
   provides the same communication environment that is provided by the
   SOCKS mechanism.  The same appearance is provided to the
   heterogeneous communications.  No conveniences or functionalities of
   current communications are sacrificed.
   こはが新しいプロトコルを導入しないで達成され、SOCKSメカニズムで
   供給されるのと同じ通信環境を供給します。同じ外観が異種間通信に供給さ
   れます。現在の通信の便利な道具や機能が犠牲になっていません。

1. Introduction
1. はじめに

   The SOCKS-based IPv6/IPv4 gateway mechanism is based on a mechanism
   that relays two "terminated" IPv4 and IPv6 connections at the
   "application layer" (the SOCKS server); its characteristics are
   inherited from those of the connection relay mechanism at the
   application layer and those of the native SOCKS mechanism.
   SOCKSを基にしたIPv6/IPv4ゲートウェイ機構は「アプリケー
   ションレイヤ」での2つの「終端した」IPv4とIPv6接続を中継す
   るメカニズム(SOCKSサーバー)に基づいています;その特徴はアプ
   リケーションレイヤでの接続リレーメカニズムとネイティブSOCKS機
   構から継承されます。

2. Basic SOCKS-based Gateway Mechanism
2. 基本的なSOCKSを基にしたゲートウェイメカニズム

   Figure 1 shows the basic SOCKS-based gateway mechanism.
   図1が基本的なSOCKSを基にしたゲートウェイメカニズムを示します。

                  Client C       Gateway G     Destination D
               クライアントC    (Server)       宛先D
               +-----------+   ゲートウェイG
               |Application|     (サーバ)
               |  アプリ   |
           +-->+===========+  +-------------+  +-----------+
      same-+   |*SOCKS Lib*|  |  *Gateway*  |  |Application|
       API +   |ライブラリ |  | ゲートウェイ|  |  アプリ   |
      同じ +-->+===========+  +=====---=====+  +-----------+
     API    | Socket DNS|  | Socket  DNS |  | Socket DNS|
               |ソケットDNS|  | ソケットDNS |  |ソケットDNS|
               +-----------+  +-------------+  +-----------+
               | [ IPv X ] |  |[IPvX]|(IPvY)|  | ( IPv Y ) |
               +-----------+  +-------------+  +-----------+
               |Network I/F|  | Network I/F |  |Network I/F|
               +-----+-----+  +---+-----+---+  +-----+-----+
                     |            |     |            |
                     +============+     +------------+
                       socksified           normal
                       connection         connection
                      (ctrl)+data          data only
                       ソケット化            通常
                          接続               接続
                   (制御)+データ        データのみ

                Fig. 1 Basic SOCKS-based Gateway Mechanism
                図1 基本的SOCKSを基にしたゲートウェイメカニズム

   In this figure, the Client C initiates the communication to the
   Destination D.  Two new functional blocks are introduced and they
   compose the mechanism.
   この図で、クライアントCは宛先Dに通信を始めます。2つの新しい機能ブ
   ロックが導入され、それらはメカニズムを構成します。

   One, *Socks Lib*, is introduced into the client side (Client C) (this
   procedure is called "socksifying").  The *Socks Lib* is located
   between the application layer and the socket layer, and can replace
   applications' socket APIs and DNS name resolving APIs (e.g.,
   gethostbyname(), getaddrinfo() etc.).  There is a mapping table in it
   for a "DNS name resolving delegation" feature (described below).
   Each socksified application has its own *Socks Lib*.
   クライアント側(クライアントC)に1つの*Socks Lib*が導入されます(こ
   の手順は"socksifying"と呼ばれます)。*Socks Lib*はアプリケーションレ
   イヤとソケットレイヤの間に位置し、アプリケーションソケットAPIとD
   NS名前解決APIを置き換えます(例えば、gethostbyname()、
   getaddrinfo()など)。その中に「DNS名解決委任」機能のためのマッピン
   グテーブルがあります(下で記述)。各ソケット化アプリケーションがそれ
   自身の*Socks Lib*を持ちます。

   The other, *Gateway*, is installed on the IPv6 and IPv4 dual stack
   node (Gateway G).  It is an enhanced SOCKS server that enables any
   types of protocol combination relays between Client C (IPvX) and
   Destination D (IPvY).  When the *Socks Lib* invokes a relay, one
   corresponding *Gateway* process (thread) is spawned from the parent
   *Gateway* to take charge of the relay connection.
   もう1つ、*Gateway*はIPv6とIPv4デュアルスタックノード(ゲート
   ウェイG)上に設置されます。これはクライアントC(IPvX)と宛先D間の
   どんな種類のプロトコルの組合せのリレーも可能にする拡張SOCKSサー
   バー(IPvY)です。*Socks Lib*がリレーをする時、対応する*Gateway*プロ
   セス(スレッド)がリレー接続を引き受けるために親*Gateway*から生まれま
   す。

   The following four types of combinations of IPvX and IPvY are
   possible in the mechanism.
   このメカニズムで次のIPvXとIPvYの4つの組合せの種類が可能です。

    type C ------ G ------ D
           [IPvX]   (IPvY)
     A      IPv4     IPv4       homogeneous (normal SOCKS)
     B      IPv4     IPv6     * heterogeneous *
     C      IPv6     IPv4     * heterogeneous *
     D      IPv6     IPv6       homogeneous

   Type A is supported by the normal SOCKS mechanism.  Type B and C are
   the main targets for the SOCKS-based IPv6/IPv4 gateway mechanism.
   They provide heterogeneous communications.  Type D can be supported
   by the natural extension of the SOCKS mechanism, because it is a
   homogeneous communication.
   タイプAが標準的なSOCKSメカニズムでサポートされます。タイプBと
   CはSOCKSを基にしたIPv6/IPv4ゲートウェイメカニズムの主
   な目標です。それらは異種間通信を供給します。タイプDは、同種の通信な
   ので、SOCKSメカニズムの自然な拡張でサポートできます。

   Since the *Socks Lib* communicates with the *Gateway* by using SOCKS
   protocol [SOCKSv5], the connection between them (the Client C and the
   Gateway G) is a special connection and is called a "socksified
   connection".  It can transfer not only data but also control
   information (e.g., the location information of Destination D).
   *Socks Lib*がSOCKSプロトコル[SOCKSv5]を使って*Gateway*と通信する
   ので、それら(クライアントCとゲートウェイG)の間の接続は特別な接続
   で、「ソケット化接続」と呼ばれます。これはデータだけではなく制御情報
   (例えば、宛先Dの場所情報)も転送できます。

   The connection between the Gateway G and the Destination D is a
   normal connection.  It is not modified (socksified).  A server
   application that runs on Destination D does not notice the existence
   of the Client C.  It recognizes that the peer node of the connection
   is the Gateway G (not Client C).
   ゲートウェイGとと宛先Dの間の接続は標準的な接続です。これは修正(ソ
   ケット化)されません。宛先D上で走るサーバーアプリケーションがクライ
   アントCの存在に気付きません。アプリケーションは接続相手ノードが(ク
   ライアントCではなく)ゲートウェイGと認識します。

   No new protocols are introduced to the SOCKS protocol [SOCKSv5] to
   accomplish the mechanism.
   メカニズムを達成するために新しいプロトコルがSOCKSプロトコル
   [SOCKSv5]に導入されません。

   * Packet Size Adjustment
   * パケットサイズ調整

     Since the length of the IPv6 header is different from that of the
     IPv4 header, it is necessary to consider the packet size adjustment
     in heterogeneous communications.  If this is not taken into
     consideration, the packet size may exceed the MTU of the network.
     IPv6ヘッダ長さがIPv4ヘッダと異なっているので、異種間通信で
     パケットサイズ調整があると思うことが必要です。もしこれを考慮に入れ
     られないなら、パケットサイズはネットワークMTUを超えるかもしれま
     せん。

     In the SOCKS-based IPv6/IPv4 gateway mechanism, it never exceeds
     the MTU, because the mechanism is based on relaying two
     "terminated" connections at the "application layer".  The relayed
     data is a simple data stream for the application, and the packet
     size is naturally adjusted at each relayed connection side.
     SOCKSを基にしたIPv6/IPv4ゲートウェイメカニズムでは、
     メカニズムは2つの「終端した」接続を中継する「アプリケーションレイ
     ヤ」に本拠地を置くので、決してMTUを越えません。中継されたデータ
     はアプリケーションの単純なデータ流で、パケットサイズは当然それぞれ
     の中継接続側で調整されます。

   * Authenticated Relay
   * 認証されたリレー

     Since the SOCKS is originally designed for firewall systems and it
     has various authentication methods, the relayed connections can be
     authenticated by the native SOCKS authentication methods.
     SOCKSが元来ファイアウォールシステムのために設計され、ファイア
     ウォールが種々な認証方法を持っているので、中継接続はネイティブのS
     OCKS認証方法で認証できます。

3. DNS Name Resolving Procedure
3. DNS名解決処理

   In all communication applications, it is a necessary to obtain
   destination IP address information to start a communication.  It is,
   however, theoretically impossible for the heterogeneous
   communications to obtain correct information, because an existing
   IPv4 application can not deal with an IPv6 address.  It prepares only
   a 4-byte address space to store an IP address information, and it can
   not store an IPv6 address information into there.  This is a critical
   problem caused by differences in address length.
   すべての通信アプリケーションで、通信を始めるためには宛先IPアドレス
   情報を得るのが必要です。しかし、既存のIPv4アプリケーションがIP
   v6アドレスを扱うことができないので、異種間通信にとって正しい情報を
   得ることは理論的に不可能です。IPv4アプリケーションは4バイトアド
   レス空間だけをIPアドレス情報用に準備し、IPv6アドレス情報を記憶
   することはできません。これはアドレス長の相違によって起こる重大な問題
   です。

   In order to solve the problem, a feature called "DNS name resolving
   delegation" is used in the SOCKS-based IPv6/IPv4 gateway mechanism.
   The feature involves the delegating of DNS name resolving actions at
   the source node (Client C) to the relay server (Gateway G).  Since
   the relay server is an IPv4 and IPv6 dual stack node, DNS name
   resolving queries for any address family types of destinations can be
   made without causing any problems.  Therefore, it is not necessary to
   modify the existing DNS mechanism at all.
   問題を解決するため、「DNS名解決委任」と呼ばれる機能がSOCKSを
   基にしたIPv6/IPv4ゲートウェイメカニズムで使われます。この機
   能はソースノード(クライアントC)でのDNS名解決動作のリレーサーバー
   (ゲートウェイG)への委任を伴います。リレーサーバーがIPv4とIP
   v6のデュアルスタックノードであるので、宛先のどのアドレスファミリー
   タイプのDNS名解決でも問題まく実行できます。それ故、既存のDNSメ
   カニズムの修正は必要ではありません。

   The feature supports not only the case in which a destination logical
   host name (FQDN) information is given but also the case in which a
   destination literal (numerical) IP address is given.  The latter case
   is supported in almost the same way as the former case.  Since the
   literal IPv6 address expression includes colons (":"), it is
   identified as an FQDN (not a literal IPv4 address) for the IPv4
   application.
   この機能は宛先の論理ホスト名(FQDN)情報がわかっている場合だけで
   なく、宛先の文字のIPアドレス(数)がわかっている場合もサポートしま
   す。後の場合もほとんど前の場合と同じ方法でサポートされます。文字のI
   Pv6アドレス表現がコロン(":")を含むので、IPv4アプリケーションは
   これを(文字のIPv4アドレスではなく)FQDNと認知します。

   The SOCKS protocol specification [SOCKSv5] defines that IPv4 address,
   IPv6 address, and DOMAINNAME (FQDN) information can be used in the
   ATYP (address type) field of the SOCKS protocol format.  In the "DNS
   name resolving delegation" feature, the DOMAINNAME (FQDN) information
   is used in the ATYP (address type) field.  The FQDN information is
   transferred from the Client C to the Gateway G to indicate the
   Destination D.
   SOCKSプロトコル仕様書[SOCKSv5]はIPv4アドレスとIPv6アドレ
   スとドメイン名(FQDN)情報を定義し、SOCKSプロトコルフォーマッ
   トのATYP(アドレスタイプ)フィールドで使うことができます。「DNS名
   解決委任」機能で、ドメイン名(FDQN)情報はATYP(アドレスタイプ)
   フィールドで使われます。FQDN情報は宛先Dを示すためにクライアント
   CからゲートウェイGまで転送されます。

   In order to solve the formerly explained critical problem, an
   appropriate "fake IP" address is introduced in the feature, and it is
   used as a virtual destination IP address for a socksified
   application.  A mapping table is also introduced in the *Socks Lib*
   (at the Client C) to manage mappings between "fake IP" and "FQDN".  A
   "fake IP" address is used as a key to look up the corresponding
   "FQDN" information.  The mapping table is local and independent of
   other applications or their *Socks Lib*s.
   前に説明した重大な問題を解くために、適切な「偽IP」アドレスをこの機
   能で導入し、これは仮想の宛先IPアドレスとしてソケット化アプリケーショ
   ンのために使われます。「偽IP」と「FQDN」の対応を管理するために
   *Socks Lib*(クライアントC)でマップテーブルを導入します。「偽IP」
   アドレスが対応する「FQDN」情報を調べる鍵として用いられます。マッ
   プテーブルはローカルで他のアプリケーションやその*Socks Lib*と独立です。

   The transparentness to applications is maintained in the feature.
   Nothing special is required to execute it except socksifying the
   applications.  Since DNS name resolving APIs are replaced by the
   *Socks Lib*, the "DNS name resolving delegation" is executed
   internally merely by calling the DNS name resolving APIs in ordinal
   methods.
   アプリケーションへの透過性は機能で持続されます。アプリケーションをソ
   ケット化する以外、特別な事を実行するように要求されません。DNS名変
   換APIが*Socks Lib*で置き換えられるので、「DNS名解決委任」は単に
   内部的に元々のDNS名解決APIを呼出す事で実行されます。

   The "DNS name resolving delegation" is accomplished only when FQDN
   information is used in the ATYP (address type) field of the SOCKS
   command.  Therefore, it is mandatory to do so for heterogeneous
   communications.  The method of using FQDN information in the ATYP
   field depends on the configuration setting and implementation of the
   SOCKS protocol.  In order to simplify the discussion, only the case
   in which the FQDN information is used in the ATYP field is discussed
   here.
   「DNS名解決委任」はFQDN情報がSOCKSコマンドのATYP(アドレ
   スタイプ)フィールドで使われる時だけ実行されています。それ故、異種間
   接続でこうすることは必須です。ATYPフィールドでFQDN情報を使う方法
   は設定とSOCKSプロトコルの実装に頼ります。論議を単純化するため、
   FQDN情報がATYP フィールドで使われる場合だけがここで論じられます。

   The detailed internal procedure of the "DNS name resolving
   delegation" and address mapping management related issues are
   described as follows.
   「DNS名解決委任」の詳細な内部の手順と、関連した問題が記述されるア
   ドレスマッピング管理は次の通りです。

   1. An application on the source node (Client C) tries to get the
      IP address information of the destination node (Destination D) by
      calling the DNS name resolving function (e.g., gethostbyname()).
      At this time, the logical host name ("FQDN") information of the
      Destination D is passed to the application's *Socks Lib* as an
      argument of called APIs.
   1. ソースノード(クライアントC)上のアプリケーションがDNS名解決機
      能を呼出して宛先ノード(宛先D)のIPアドレス情報を得ようとします
      (例えば、gethostbyname())。この時、宛先Dの論理ホスト名(「FQ
      DN」)情報ががAPIの引数としてアプリケーションの*Socks Lib*に
      渡されます。

   2. Since the *Socks Lib* has replaced such DNS name resolving APIs,
      the real DNS name resolving APIs is not called here.  The argued
      "FQDN" information is merely registered into a mapping table in
      *Socks Lib*, and a "fake IP" address is selected as information
      that is replied to the application from a reserved special IP
      address space that is never used in real communications (e.g.,
      0.0.0.x).  The address family type of the "fake IP" address must be
      suitable for requests called by the applications.  Namely, it must
      belong to the same address family of the Client C, even if the
      address family of the Destination D is different from it.  After
      the selected "fake IP" address is registered into the mapping
      table as a pair with the "FQDN", it is replied to the application.
   2. *Socks Lib*がDNS名解決APIを置き換えるので、本当のDNS名解
      決APIはここで呼び出されません。引数の「FQDN」情報はただ
      *Socks Lib*のマッピング表に登録され、アプリケーションに返すために
      「偽IP」アドレスが特別なIPアドレス空間から選択されます、この
      IPアドレスは実際の通信で使われることのないものです(例えば
      0.0.0.x)。「偽IP」アドレスのアドレスファミリータイプはアプリケー
      ションの呼出しに適合しているに違いありません。すなわち、宛先Dの
      アドレスファミリーと異なっていても、クライアントCと同じアドレス
      ファミリーに属さなくてはなりません。選択された「偽IP」アドレス
      がマッピング表の中で「FQDN」とペアで登録され、それがアプリケー
      ションに返されます。

   3. The application receives the "fake IP" address, and prepares a
      "socket".  The "fake IP" address information is used as an element
      of the "socket".  The application calls socket APIs (e.g.,
      connect()) to start a communication.  The "socket" is used as an
      argument of the APIs.
   3. アプリケーションは「偽IP」アドレスを受信し、「ソケット」を準備し
      ます。「偽IP」アドレス情報は「ソケット」の要素として用いられます。
      アプリケーションはソケットAPI(例えば、connect())を呼出し、接
      続を始めます。「ソケット」はAPIの引数として用いられます。

   4. Since the *Socks Lib* has replaced such socket APIs, the real
      socket function is not called.  The IP address information of the
      argued socket is checked.  If the address belongs to the special
      address space for the fake address, the matched registered "FQDN"
      information of the "fake IP" address is obtained from the mapping
      table.
   4. *Socks Lib*がこのようなソケットAPIを置き換えたので、真のソケッ
      ト機能は呼び出されません。引数ソケットのIPアドレス情報はチェック
      されます。もしアドレスが偽アドレスのための特別なアドレス空間に属す
      るなら、「偽IP」アドレスと対応する登録された「FQDN」情報がマッ
      ピング表から得られます。

   5. The "FQDN" information is transferred to the *Gateway* on the
      relay server (Gateway G) by using the SOCKS command that is
      matched to the called socket APIs.  (e.g., for connect(), the
      CONNECT command is used.)
   5. 「FQDN」情報はリレーサーバ(ゲートウェイG)の*Gateway*に、呼
      び出したAPIに対応するSOCKSコマンドを使って送られます(例え
      ば、connect()に対して接続コマンドが使われます)。

   6. Finally, the real DNS name resolving API (e.g., getaddrinfo()) is
      called at the *Gateway*.  At this time, the received "FQDN"
      information via the SOCKS protocol is used as an argument of the
      called APIs.
   6. 最終的に、本当のDNS名解決API(例えば、getaddrinfo() )は
      *Gateway*で呼び出されます。今、SOCKSプロトコルによって得た
      「FQDN」情報が呼出すAPIの引数に用いられます。

   7. The *Gateway* obtains the "real IP" address from a DNS server,
      and creates a "socket".  The "real IP" address information is used
      as an element of the "socket".
   7. *Gateway*はDNSサーバーから「本当のIP」アドレスを得て、「ソ
      ケット」を作ります。「本当のIP」アドレス情報は「ソケット」の要
      素として用いられます。

   8. The *Gateway* calls socket APIs (e.g., connect()) to communicate
      with the Destination D.  The "socket" is used as an argument of the
      APIs.
   8. *Gateway*は宛先Dと通信するためソケットAPI(例えば、connect())
      を呼出します。「ソケット」はAPIの引数として用いられます。

   The problem with the feature is that failures of the DNS name
   resolving process are detected incorrectly at the source node (Client
   C).  They are detected as connection-establishment failures.
   この機能の問題はDNS名解決処理の失敗がソースノード(クライアントC)
   で間違って検出されるということです。それは接続設定の失敗として検出さ
   れます。

   (Restrictions on applicability of "fake IP" address, etc., are
   described in Section 5.)
   (「偽IP」アドレスの適用の制限が、5章で記述されます。)

   * Operations for Address Management (reservation, mapping etc.)
   * アドレス管理(予約、マッピングなど)のオペレーション。

   The SOCKS-based gateway mechanism does not require the reserving of a
   wide global address space for the address mapping, and complex
   address allocation and garbage-collection mechanisms are not
   necessary.
   SOCKSを基にしたゲートウェイメカニズムはアドレスマッピングのため
   に広いグローバルアドレス空間の予約を必要としません、そして複雑なアド
   レス割当とガーベジコレクションメカニズムは必要ではありません。

   Such address management operations are done at the *Socks Lib* by
   using the fake IP address and the mapping table for the DNS name
   resolving delegation.  Since the mapping table is prepared in each
   application, it is locally closed and independent of other
   applications.  Therefore, it is easy to manage the table, and it is
   not necessary to reserve a wide global address space.
   このようなアドレス管理オペレーションはDNS名解決委任のための偽IP
   アドレスマッピング表を使うことによって*Socks Lib*で行われます。マッ
   ピング表が各アプリケーションで準備されるので、他のアプリケーションと
   区別され、他と独立です。それ故に、テーブル管理は容易で、広いグローバ
   ルなアドレス空間を予約する必要はありません。

4. Multiple Chained Relay Mechanism (Advanced usage)
4. 多数連鎖リレーメカニズム(拡張使用法)

   The SOCKS-based gateway mechanism has the flexibility to support
   multiple chained relay topologies.  With the mechanism, IPv4 and IPv6
   mixed various communication topologies are accomplished.
   SOCKSを基にしたゲートウェイメカニズムは多数連鎖リレートポロジー
   を支援する柔軟性を持っています。このメカニズムで、IPv4とIPv6
   の入り混ざった種々な通信トポロジーが達成されます。

   Figure 2 shows the structure of the multiple chained relay mechanism.
   図2が多数連鎖リレーメカニズムの構造を示します。

        Client C       Gateway G1       Gateway G2    Destination D
    クライアントC     (Server 1)       (Server 2)       宛先D
     +-----------+   ゲートウェイG1 ゲートウェイG2
     |Application|    (サーバ1)     (サーバ2)
     |  アプリ   |
     +===========+  +-------------+  +-------------+  +-----------+
     |*SOCKS Lib*|  |  *Gateway1* |  |  *Gateway2* |  |Application|
     |ライブラリ |  |ゲートウェイ1|  |ゲートウェイ2|  |  アプリ   |
     +===========+  +=====---=====+  +=====---=====+  +-----------+
     | Socket DNS|  | Socket  DNS |  | Socket  DNS |  | Socket DNS|
     |ソケットDNS|  | ソケットDNS |  | ソケットDNS |  |ソケットDNS|
     +-----------+  +-------------+  +-------------+  +-----------+
     | [ IPv X ] |  |[IPvX]|(IPvY)|  |(IPvY)|{IPvZ}|  | { IPv Z } |
     +-----------+  +-------------+  +-------------+  +-----------+
     |Network I/F|  | Network I/F |  | Network I/F |  |Network I/F|
     +-----+-----+  +---+-----+---+  +---+-----+---+  +-----+-----+
           |            |     |          |     |            |
           +============+     +==========+     +------------+
             socksified        socksified          normal
             connection        connection        connection
            (ctrl)+data       (ctrl)+data         data only
             ソケット化        ソケット化           通常
                接続              接続              接続
         (制御)+データ   (制御)+データ     データのみ

                  Fig. 2 Multiple Chained Relay Mechanism
                  図2 多数連鎖リレーメカニズム

   In this figure, the source node (Client C) initiates the
   communication with the destination (Destination D).  Underneath, the
   connection is replaced with three connections, and they are relayed
   at the two relay servers (Gateway G1 and G2).  The *Gateway* includes
   the same type of functions of *Socks Lib*.  By enabling the *Socks
   Lib* functions at the *Gateway1* on the first relay server (Gateway
   G1), the multiple chained relay topology is accomplished.
   この図で、ソースノード(クライアントC)は宛先(宛先D)と通信を始め
   ます。下で接続は3つの接続で置き換えられ、2つのリレーサーバー(ゲー
   トウェイG1とG2)で中継されます。*Gateway*は*Socks Lib*の機能と同じ
   種類の機能を含みます。最初のリレーサーバー(ゲートウェイG1)上の
   *Gateway1*で*Socks Lib*機能を可能にすることで、多数連鎖リレートポロジー
   が達成されます。

   There is no limitation on the number of relay operations between the
   source node and the final destination node.  It is possible to have
   more than two intermediate relay servers.  To simplify the
   explanation, a twice-relayed topology is shown here.
   ソースノードと最終宛先ノード間のリレーオペレーションの数に限界があり
   ません。2以上の中間リレーサーバーを持つことは可能です。説明を単純化
   するために、2段リレートポロジーがここで示されます。

   Since the multiple chained relay is more complex than one-time relay
   and causes complexity, it is recommended that the multiple chained
   relay communication should be used only when it is necessary for some
   reason (e.g., usable protocols or topologies are limited by routers
   etc.).
   多数連鎖リレーが1段リレーより複雑で、複雑になるため多数連鎖リレー通
   信が、何らかの理由で必要な時だけ使われることが勧められます(例えば、
   利用したプロトコルかトポロジーがルータに制限される場合)。

5. Applicability statement
5. 適用性声明

   The SOCKS-based gateway mechanism requests socksification of
   applications (install *Socks Lib*) to accomplish heterogeneous
   communications.  It is not necessary to modify (change source codes
   and recompile them, etc.) the applications, because typical
   socksification is done by changing the linking order of dynamic link
   libraries (specifically, by linking the SOCKS dynamic link library
   before the dynamic link libraries for normal socket and DNS name
   resolving APIs).
   SOCKSを基にしたゲートウェイメカニズムは異種間接続を達成するため
   にアプリケーションのソケット化(*Socks Lib*のインストール)を要請しま
   す。典型的なソケット化がダイナミックリンクのリンク順序を変えることで
   行えるので(特に、ソケットとDNS名解決APIの標準ダイナミックライ
   ブラリより前にSOCKSダイナミックリンク・ライブラリをリンクするこ
   とで)、アプリケーションの変更(ソースコードの変更と再コンパイルなど)
   が必要ありません。

   The mechanism does not request modification of the DNS system,
   because the DNS name resolving procedure at the Client C is delegated
   to the dual stack node Gateway G.
   クライアントCのDNS名解決手順はデュアルスタックノードGに委任され
   るので、このメカニズムはDNSシステムの修正を求めません。

   Other than the socksification, the SOCKS-based gateway mechanism has
   the following three types of constraints.
   ソケット化以外で、SOCKSを基にしたゲートウェイメカニズムは次の3
   つの制約を持っています。

   1. Essential constraints:
   1. 不可欠な制約:

      Constraints are caused by the address length difference between
      IPv4 and IPv6.
      IPv4とIPv6のアドレス長さの相違による制約があります。

      Functions that request an IP address as one of the return values
      (e.g., getpeername() and getsockname() etc.) can not provide the
      correct IP address as a return value.  However, a suitable port
      value can be provided, because IPv4 and IPv6 use the same size
      port space and an appropriate port information is transferred by
      the SOCKS protocol.
      IPアドレスを返り値として要求する関数(例えば、getpeername()と
      getsockname()など)が正しいIPアドレスを供給できません。しかしな
      がら、IPv4とIPv6は同じサイズのポート空間を使い、適切なポー
      ト情報がSOCKSプロトコルによって転送されすので、適当なポート
      値は供給できます。

   2. Constraints of the SOCKS mechanism:
   2. SOCKSメカニズムの制約:

      Since the current SOCKS system can not socksify all of the tricky
      applications in which extraordinary manners are used to create
      connections, the SOCKS-based gateway mechanism can not be applied
      to them.
      現在のSOCKSシステムが、接続を作る再に通常でない動作をする扱い
      にくいアプリケーションをソケット化できないので、SOCKSを基にし
      たゲートウェイメカニズムはそれらに用いることができません。

   3. Constraints to deal with the fake address:
   3. 偽アドレスの扱う制約:

      The fake address must be dealt with as a temporary value at the
      application.  It is used as a key value in the mapping table for
      the "DNS name resolving delegation" feature.  When the application
      is finished and the mapping table disappears, the fake address
      information must be also released.
      偽アドレスはアプリケーションで一時的な値と扱われなくてはなりません。
      これは「DNS名解決委任」機能のマッピング表のキー値として用いられ
      ます。アプリケーションが終了し、マッピング表が消える時、偽アドレス
      情報も開放されなくてはなりません。

      Even if it is recorded permanently (e.g., recorded as a bookmark),
      serious problems will not occur.  The recorded fake address
      information will merely become useless, because fake address
      information is taken from a reserved special IP address space that
      is never used in real communications (e.g., 0.0.0.x) and such a
      information is useless for the normal communication applications.
      Furthermore, such cases will be rare because most applications
      usually record FQDN information (not fake IP address information)
      to the bookmark, etc.
      たとえそれが永久に記録されるとしても(例えば、ブックマークとして記
      録される)、問題が起こらないことは重要です。偽アドレス情報が本物の
      通信で決して使われない予約の特別なIPアドレス空間からとられ(例え
      ば、0.0.0.x)、この情報が標準通信アプリケーションの役に立たないた
      め、記録された偽アドレス情報はただ無効になるでしょう。さらに、たい
      ていのアプリケーションが通常ブックマークなどに(偽IPアドレス情報
      ではなく)FQDN情報を記録するから、このような場合は稀でしょう。

5.1 Native SOCKS mechanism considerations
5.1 ネイティブのSOCKSメカニズムの考察

   The characteristics of the SOCKS-based IPv6/IPv4 gateway mechanism
   are inherited from those of the native SOCKS mechanism.  Therefore,
   consideration issues of the native SOCKS mechanism are discussed in
   this section.
   SOCKSを基にしたIPv6/IPv4ゲートウェイメカニズムの特徴は
   ネイティブSOCKSメカニズムから継承されます。それ故に、ネイティブ
   SOCKSメカニズムの問題の考察がこの章で論じられます。

   The SOCKSv5 protocol is composed of three commands (CONNECT, BIND and
   UDP ASSOCIATE).  All of three commands can be applied in the SOCKS-
   based IPv6/IPv4 gateway mechanism.
   SOCKSv5プロトコルは3つのコマンド(接続、結びつけ、UDP連携)で構成
   されています。3つのコマンドのすべてはSOCKSベースのIPv6/I
   Pv4ゲートウェイメカニズムで適用されます。

   This document is described with assuming the usage of the CONNECT
   command mainly, because the CONNECT command is the main and most
   frequently used command in the SOCKS mechanism.  Since the CONNECT
   command does not have clear week points, we can use it freely without
   considerations.
   接続コマンドがSOCKSメカニズムで主なコマンドで、最も頻繁に使われ
   るコマンドであるため、この文書は主に接続コマンドの使用を仮定して記述
   されます。接続コマンドが明確な弱点を持っていないので、我々は考慮無し
   で自由にそれを使うことができます。

   The other (BIND and UDP ASSOCIATE) commands have the following weak
   points.  So, we have to consider these points when we use the BIND or
   UDP ASSOCIATE commands in the mechanism.
   他コマンド(結びつけ、UDP連携)が次の弱点を持っています。それで、
   このメカニズムで結びつけやUDP連携コマンドを使う時、これらの点を考
   慮しなければなりません。

   The BIND command is basically designed to support reverse-channel
   rendezvous of the FTP type applications.  So, general usages of the
   BIND command may cause problems.
   結びつけコマンドは基本的にFTPタイプアプリケーションの反対チャネル
   待合わせをサポートするよう意図されます。それで、結びつけコマンドの一
   般的な使用が問題を起こすかもしれません。

   The UDP ASSOCIATE command is basically designed for simple UDP
   applications (e.g., archie).  It is not general enough to support a
   large class of applications that use both TCP and UDP.
   UDP連携コマンドは基本的に単純なUDPアプリケーションのために設計
   されます(例えば、archie)。これはTCPとUDPの両方を使うアプリケー
   ションの大きいクラスをサポートするのに十分一般的ではありません。

6. Security Considerations
6. セキュリティの考察。

   Since the SOCKS-based IPv6/IPv4 gateway mechanism is based on SOCKSv5
   protocol, the security feature of the mechanism matches that of
   SOCKSv5.  It is described in the Security Considerations section of
   the SOCKS Protocol Version 5 [SOCKSv5].
   SOCKSを基にしたIPv6/IPv4ゲートウェイ機構がSOCKSv5プロト
   コルに基づいているので、メカニズムのセキュリティの特徴はSOCKSv5と一致
   します。それはSOCKSプロトコルバージョン5[SOCKSv5]のセキュリティ
   の考察の章で記述されます。

   The mechanism is based on relaying two "terminated" connections at
   the "application layer".  The end-to-end security is maintained at
   each of the relayed connections (i.e., between Client C and Gateway
   G, and between Gateway G and Destination D).  The mechanism does not
   provide total end-to-end security relay between the original source
   (Client C) and the final destination (Destination D).
   このメカニズムは「アプリケーション層」で2つの「終端」接続を中継する
   ことを基本にします。エンドエンドセキュリティは各リレー接続で維持され
   ます(すなわち、クライアントCとゲートウェーG間と、ゲートウェイGと
   宛先D間)。このメカニズムは本来のソース(クライアントC)と最終宛先
   (宛先D)の間の完全なエンドエンドセキュリティを供給しません。

Appendix A. Implementations
付録A.実装

   Currently, there are two independent implementations of the SOCKS-
   based IPv6/IPv4 gateway mechanism.  Both of them are open to the
   public.
   現在、SOCKSを基にしたIPv6/IPv4ゲートウェイメカニズムの
   独立な実装が2つあります。それらの両方が公開されています。

   One is NEC's implementation.  Its source codes are available at the
   following URL.
   1つはNECの実装です。そのソースコードは次のURLで利用可能です。

            http://www.socks.nec.com/

   The other is Fujitsu Lab.'s implementation, which is called
   "SOCKS64".  Its source codes are available at the following URL.
   他は富士通研究所の実装で、それは"SOCKS64"と呼ばれます。そのソースコー
   ドは次のURLで利用可能です。

            ftp://ftp.kame.net/pub/kame/misc/socks64-...

References
参考文献

   [SOCKSv5]    Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D. and
                L. Jones, "SOCKS Protocol V5", RFC 1928, April 1996.

   [TRANSMECH]  Gilligan, R. and E. Nordmark, "Transition Mechanisms for
                IPv6 Hosts and Routers", RFC 2893, August 2000.

   [IPv6]       Deering, S. and R. Hinden, "Internet Protocol, Version 6
                (IPv6) Specification", RFC 2460, December 1998.

   [INET99]     H. Kitamura, "Entering the IPv6 communication world by
                the SOCKS-based IPv6/IPv4 Translator", in Proceedings of
                INET99, July 1999.

Author's Address
著者のアドレス

   Hiroshi Kitamura
   NEC Corporation
   Development Laboratories
   (Igarashi Building 4F) 11-5, Shibaura 2-Chome,
   Minato-Ku, Tokyo 108-8557, JAPAN

   Phone: +81 (3) 5476-1071
   Fax:   +81 (3) 5476-1005
   EMail: kitamura@da.jp.nec.com


Full Copyright Statement
著作権表示全文

   Copyright (C) The Internet Society (2001).  All Rights Reserved.
   著作権(C)インターネット学会(2001)。すべての権利は保留される。

   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.
   この文書とここに含む情報は無保証で供給され、そしてインターネット学会
   とインターネット技術標準化タスクフォースは、特別にも暗黙にも、この情
   報の利用が権利を侵害しないことや商業利用や特別の目的への利用に適当で
   ある事の保障を含め、すべての保証を拒否します。

Acknowledgement
謝辞

   Funding for the RFC Editor function is currently provided by the
   Internet Society.
   RFCエディタ機能のための資金供給が現在インターネット学会によって
   供給されます。

Japanese translation by Ishida So