Solaris のシステム管理 (IP サービス)

IPv6 トンネル

デュアルスタック (IPv4 と IPv6 の両用サイト) における依存を最小限に抑えるため、2 つの IPv6 ノード間のパス中にあるすべてのルーターが IPv6 をサポートする必要はありません。このようなネットワーク構成をサポートする機構のことを「トンネル」と呼びます。基本的に IPv6 パケットは IPv4 パケット内部に組み込まれ、IPv4 ルーター間を転送されます。次の図に、IPv6 ルーター (図中の “R”) を通るトンネル機構を示します。

図 11–5 IPv6 トンネル機構

IPv4 を使用するルーターを通るトンネルにおいて、IPv6 パケットが IPv4 パケット内にどのように格納されるかを示します。

Oracle Solaris IPv6 実装には、2 つの種類のトンネル機構があります。

作成されたトンネルは現在、インターネット上の、たとえば、MBONE (IPv4 マルチキャストバックボーン ) で、ほかの目的に使用されています。設定トンネルの作成手順からいうと、2 つのルー ターを設定して、その間に IPv4 ネットワーク経由の仮想ポイントツーポイントリンクを作成します。近い将来、インターネットのさまざまな局面に、この種のトンネルが利用されるでしょう。

自動トンネルには、IPv4 互換アドレスを必要とします。自動トンネルは、IPv6 ルーターが使用できない場合に IPv6 ノードを接続するために使用できます。このようなトンネルは、自動トンネルネットワークインタフェースを設定することによって、デュアルスタックホストまたはデュアルスタックルーターから作成できます。トンネルは常に、デュアルスタックホストで終了します。トンネルのはたらきにより、宛先 IPv4 アドレス (トンネルの終点) が IPv4 互換宛先アドレスから抽出されて動的に指定されます。

トンネルの設定

トンネルインタフェースのフォーマットは次のとおりです。


ip.tun ppa

ppa は物理的な接続ポイントです。

システムの起動時、トンネルモジュール (tun) は ifconfig コマンドによって IP の一番上にプッシュされ、仮想インタフェースが作成されます。このプッシュは、hostname6.* ファイルを作成することによって行われます。

たとえば、IPv4 ネットワーク経由で IPv6 パケットをカプセル化するためのトンネルを作成するには、次のファイルを作成します。


/etc/hostname6.ip.tun0

このファイルの内容は、インタフェースが plumb されたあとで、ifconfig に渡されます。ポイントツーポイントトンネルの設定に必要なパラメータになります。


例 11–11 IPv6 over IPv4 トンネルの hostname6.ip.tun0 ファイル

次に、hostname6.ip.tun0 ファイルのエントリの例を示します。


tsrc 10.10.10.23 tdst 172.16.7.19 up
addif 2001:db8:3b4c:1:5678:5678::2 up

この例では、IPv4 ソースアドレスと宛先アドレスは、IPv6 リンクローカルアドレスを自動設定するためのトークンとして使用されます。これらのアドレスは、ip.tun0 インタフェースのソースと宛先です。次の 2 つのインタフェース ip.tun0 インタフェースと、論理インタフェース ip.tun0:1 が設定されます。論理インタフェースには、addif コマンドによって指定されたソースと宛先 IPv6 アドレスがあります。

システムをマルチユーザーモードで起動すると、これらの設定ファイルの内容は変更されずに ifconfig に渡されます。例 11–11 内のエントリは、次と同等です。


# ifconfig ip.tun0 inet6 plumb
# ifconfig ip.tun0 inet6 tsrc 10.0.0.23 tdst 172.16.7.19 up
# ifconfig ip.tun0 inet6 addif 2001:db8:3b4c:1:5678:5678::2 up

次に、このトンネルにおける ifconfig -a の出力を示します。


ip.tun0: flags=2200850<UP,POINTOPOINT,RUNNING,MULTICAST,
  NONUD,IPv6> mtu 1480 index 6
        inet tunnel src 10.0.0.23  tunnel dst 172.16.7.19
        inet6 fe80::c0a8:6417/10 --> fe80::c0a8:713
ip.tun0:1: flags=2200850<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 
  index 5
        inet6 2001:db8:3b4c:1:5678:5678::2 

次の構文で設定ファイルに行を追加すれば、さらに論理インタフェースを設定できます。


addif IPv6-source IPv6-destination up

注 –

トンネルのどちらかの端がトンネル経由で 1 つ以上の接頭辞を通知する IPv6 ルーターである場合、トンネル設定ファイルには addif コマンドは必要ありません。ほかのアドレスは自動設定されるため、必要とされる可能性があるのは tsrctdst だけです。


場合によっては、特定のトンネルについて、固有のソースリンクローカルアドレスと宛先リンクローカルアドレスを手動で設定する必要があることもあります。その場合、設定ファイルの最初の行を変更して、これらのリンクローカルアドレスを組み込みます。次に例を示します。


tsrc 10.0.0.23 tdst 172.16.7.19 fe80::1/10 fe80::2 up

ソースのリンクローカルアドレスの接頭辞の長さが 10 であることに注目してください。この例では、ip.tun0 インタフェースは次のようになります。


ip.tun0: flags=2200850<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 
index 6
        inet tunnel src 10.0.0.23  tunnel dst 172.16.7.19
        inet6 fe80::1/10 --> fe80::2

IPv6 ネットワーク経由で IPv6 パケットをカプセル化するためのトンネル (IPv6 over IPv6 トンネル) を作成するには、次のファイル名を作成します。


/etc/hostname6.ip6.tun0

例 11–12 IPv6 over IPv6 トンネルの hostname6.ip6.tun0 ファイル

次に、IPv6 ネットワーク経由の IPv6 カプセル化における hostname6.ip6.tun0 ファイルのエントリの例を示します。


tsrc 2001:db8:3b4c:114:a00:20ff:fe72:668c 
        tdst 2001:db8:15fa:25:a00:20ff:fe9b:a1c3
fe80::4 fe80::61 up

IPv6 ネットワーク経由で IPv4 パケットをカプセル化するためのトンネル (IPv4 over IPv6 トンネル) を作成するには、次のファイル名を作成します。


/etc/hostname.ip6.tun0

例 11–13 IPv4 over IPv6 トンネルの hostname.ip6.tun0 ファイル

次に、IPv6 ネットワーク経由の IPv4 カプセル化における hostname.ip6.tun0 ファイルのエントリの例を示します。


tsrc 2001:db8:3b4c:114:a00:20ff:fe72:668c 
         tdst 2001:db8:15fa:25:a00:20ff:fe9b:a1c3
10.0.0.4 10.0.0.61 up

IPv4 ネットワーク経由で IPv4 パケットをカプセル化するためのトンネル (IPv4 over IPv4 トンネル) を作成するには、次のファイル名を作成します。


/etc/hostname.ip.tun0

例 11–14 IPv4 over IPv4 トンネルの hostname.ip.tun0 ファイル

次に、IPv4 ネットワーク経由の IPv4 カプセル化における hostname.ip.tun0 ファイルのエントリの例を示します。


tsrc 172.16.86.158 tdst 192.168.86.122
10.0.0.4 10.0.0.61 up

tun の固有の情報については、tun(7M) のマニュアルページを参照してください。IPv6 への移行期間におけるトンネルの一般的な概念については、「IPv6 トンネルの概要」を参照してください。トンネルを設定する手順については、「IPv6 サポート用にトンネルを構成するための作業 (作業マップ)」を参照してください。

6to4 自動トンネル

Oracle Solaris には、IPv4 から IPv 6 アドレス指定への移行期間における暫定的な優先方法として、6to4 トンネルがあります。6to4 トンネルを使用すると、孤立した IPv6 サイトが、IPv6 をサポートしていない IPv4 ネットワーク上の自動トンネルを通じて通信できるようになります。6to4 トンネルを使用するには、6to4 自動トンネルの片方のエンドポイントとして、境界ルーターを IPv6 ネットワークに設定する必要があります。そのあと、この 6to4 ルーターをほかの 6to4 サイトとの間のトンネルの構成要素として使用することも、あるいは必要に応じて 6to4 以外のネイティブ IPv6 サイトとの間のトンネルで使用することもできます。

この節では、6to4 に関連した次の参考情報を示します。

次の表では、6to4 トンネルを構成するための追加作業について説明し、有用な追加情報の入手先を示しています。

作業または技術情報 

参照先 

6to4 トンネルの設定作業 

「6to4 トンネルを設定する方法」

6to4 関連の RFC 

RFC 3056, "Connection of IPv6 Domains via IPv4 Clouds"

6to4 リレールーターとの間のトンネルのサポートを有効にする 6to4relay コマンドの詳細

6to4relay(1M)

6to4 のセキュリティー 

Security Considerations for 6to4

6to4 トンネルのトポロジ

6to4 トンネルは、あらゆる場所にあるすべての 6to4 サイトに IPv6 接続を提供します。同様に、リレールーターに転送するようにトンネルが構成されている場合、トンネルはネイティブ IPv6 インターネットも含むすべての IPv6 サイトへのリンクとしても機能します。次の図は、6to4 トンネルが 6to4 サイト間にこの接続を提供する仕組みを示しています。

図 11–6 2 つの 6to4 サイト間のトンネル

次の図は、6to4 トンネルを示したものです。この図の内容は、次の段落で説明しています。

この図は、独立した 2 つの 6to4 ネットワーク、サイト A とサイト B を示しています。各サイトは、IPv4 ネットワークに外部接続するようにルーターを設定してあります。IPv4 ネットワークを越える 6to4 トンネルによって、6to4 サイトをリンクする接続が提供されています。

IPv6 サイトを 6to4 サイトにするには、6to4 をサポートできるように 1 つ以上のルーターインタフェースを設定する必要があります。このインタフェースは、IPv4 ネットワークに対する外部接続を提供する必要があります。qfe0 で設定するアドレスは、一意 (世界で唯一) のものでなければなりません。次の図では、境界ルーター A のインタフェース qfe0 がサイト A を IPv4 ネットワークに接続しています。qfe0 を 6to4 擬似インタフェースとして設定するには、IPv4 アドレスを使用してあらかじめインタフェース qfe0 を設定しておきます。

上記の図では、6to4 サイト A はルーター A 上のインタフェース hme0hme1 に接続した 2 つのサブネットから構成されています。サイト A の両サブネットのすべての IPv6 ホストは、ルーター A からの通知を受け取ると 6to4 派生アドレスを使用して自動的に再設定を行います。

サイト B は、もう 1 つの独立した 6to4 サイトです。サイト A からトラフィックを正しく受け取るには、サイト B 側の境界ルーターを 6to4 をサポートするように設定する必要があります。この設定を行わないと、ルーターがサイト A から受け取るパケットが認識されずに削除されてしまいます。

6to4 トンネルを介したパケットフロー

この節では、ある 6to4 サイトにあるホストから、リモートの 6to4 サイトにあるホストまでのパケットのフローについて説明します。このシナリオでは、図 11–6 で使用したトポロジを使用します。このシナリオは、6to4 ルーターと 6to4 ホストがすでに設定済みであることを想定しています。

  1. 6to4 サイト A のサブネット 1 に存在するホストが伝送を行い、6to4 サイト B 上のホストが宛先として機能します。各パケットヘッダーには、送信元の 6to4 派生アドレスと宛先の 6to4 派生アドレスが含まれます。

  2. サイト A のルーターは、IPv4 ヘッダー内で各 6to4 パケットをカプセル化します。このプロセスでルーターは、カプセル化ヘッダーの IPv4 宛先アドレスを、サイト B のルーターアドレスに設定します。トンネルインタフェースを通過する各 IPv6 パケットの IPv6 宛先アドレスには、この IPv4 宛先アドレスも含まれています。したがって、ルーターはカプセル化ヘッダーに設定されている IPv4 宛先アドレスを特定することができます。続いてサイト A のルーターは、標準の IPv4 経路制御手続きを使用し IPv4 ネットワークを介してこのパケットを転送します。

  3. パケットが遭遇する IPv4 ルーターが、パケットの IPv4 宛先アドレスを使用して転送を行います。このアドレスはルーター B のインタフェースに使用される一意の (世界に 1 つしかない) IPv4 アドレスであり、6to4 擬似インタフェースとしても機能します。

  4. サイト A から送付されたパケットがルーター B に到着します。ルーター B は、IPv4 ヘッダーを削除して IPv6 パケットのカプセル化を解除します。

  5. 続いてルーター B は、IPv6 パケット内の宛先アドレスを使用してサイト B の受信ホストにパケットを転送します。

6to4 リレールーターとの間のトンネルについての考慮事項

6to4 リレールーターは、6to4 ではない ネイティブ IPv6 ネットワークと通信を行う必要がある 6to4 ルーターからのトンネルのエンドポイントとして機能します。本来、リレールーターは 6to4 サイトとネイティブ IPv6 サイトとの間のブリッジとして使用されます。この手法は安全ではない場合があるため、Oracle Solaris のデフォルト設定では 6to4 リレールーターのサポートは無効になっています。しかし、サイトでこのようなトンネルが必要な場合には 6to4relay コマンドを使用して次に示すようなトンネリングを有効にできます。

図 11–7 6to4 サイトと 6to4 リレールーター間のトンネル

この図は、6to4 ルーターと 6to4 リレールーター間のトンネルを示します。次のテキストは図について説明します。

図 11–7 において、6to4 Site A はネイティブな IPv6 Site B にあるノードと通信する必要があります。次の図に、Site A から IPv4 ネットワークを越える 6to4 トンネルに通じるトラフィックパスを示します。このトンネルは、6to4 ルーター A と 6to4 リレールーターをエンドポイントとして使用しています。6to4 リレールーターより先は IPv6 ネットワークであり、IPv6 サイト B はこのネットワークに接続されています。

6to4 サイトとネイティブ IPv6 サイト間のパケットフロー

この節では、6to4 サイトからネイティブな IPv6 サイトまでのパケットフローについて説明します。このシナリオでは、図 11–7 で使用したトポロジを使用します。

  1. 6to4 サイト A 上のホストから、ネイティブ IPv6 サイト B 上のホストに向けて伝送を行います。各パケットヘッダーには、その発信元アドレスとして 6to4 派生アドレスが指定されています。宛先アドレスは標準の IPv6 アドレスです。

  2. サイト A の 6to4 ルーターは、各パケットを宛先である 6to4 ルーターの Ipv4 アドレスを持つ IPv4 ヘッダー内でカプセル化します。この 6to4 ルーターは、標準の IPv4 経路制御手続きを使用し IPv4 ネットワークを介してこのパケットを転送します。パケットが遭遇する IPv4 ルーターが、6to4 リレールーターにパケットを転送します。

  3. サイト A に物理的にもっとも近いエニーキャスト 6to4 リレールーターが、192.88.99.1 エニーキャストグループ宛てのパケットを検出します。


    注 –

    6to4 リレールーターエニーキャストグループの一部である 6to4 リレールーターには、192.88.99.1 という IP アドレスが割り当てられます。このエニーキャストアドレスは、6to4 リレールーターのデフォルトアドレスです。特定の 6to4 リレールーターを使用する必要がある場合は、デフォルトを上書きしてそのルーターの IPv4 アドレスを指定できます。


  4. このリレールーターは、IPv4 ヘッダーを取り除いて 6to4 パケットのカプセル化を解除し、ネイティブ IPv6 宛先アドレスを明らかにします。

  5. 続いてこのリレールーターは、IPv6 のみとなったパケットを IPv6 ネットワークに送信します。IPv6 ネットワークにおいて、パケットは最終的に Site B のルーターによって検出されます。続いてこのルーターが、宛先である IPv6 ノードにパケットを転送します。