連載
» 2012年04月02日 00時00分 公開

簡単、便利、高信頼! IPv6ネットワークの冗長化これから始めるIPv6(5)(2/3 ページ)

[高津智明,株式会社日立製作所/アラクサラネットワークス株式会社]

IPv6 NDPを利用した経路障害の回避

 これまで見てきた冗長構成のIPv6ネットワークで、いずれかのルータが通信障害を起こしたとします。この時、ホストはどのようにして問題を検知し、通信路を切り替えるのでしょうか?

 ここでは、実験的に問題を起こしてWindows 7の挙動を見ていきます。

 まず、問題が発生していない通常の状態で、netstatコマンドを用いてIPv6ルーティングを確認します。

・Windows 7でのIPv6ルーティングテーブルの確認例

C:\>netstat -r
...
IPv6 ルート テーブル
===========================================================================
アクティブ ルート:
 If メトリック ネットワーク宛先         ゲートウェイ
 12    276 ::/0                     fe80::beef:1
 12    276 ::/0                     fe80::cafe:1
  1    306 ::1/128                  リンク上
 13     58 2001::/32                リンク上
 12     28 2001:db8:beef::/64       リンク上
 12     28 2001:db8:cafe::/64       リンク上
 12    276 fe80::/64                リンク上
 12    276 fe80::c414:4e77:b627:40e7/128
                       リンク上
===========================================================================
固定ルート:
 なし

 ルータAの“beef”の経路とルータBの“cafe”の経路が同一の優先度(メトリック 276)で登録されています。

 次に、IPv6の近隣キャッシュ(IPv4のARPテーブルに相当)を確認します。

・Windows 7でのIPv6近隣キャッシュの確認例

C:\>netsh interface ipv6 show neighbor
...
インターフェイス 12: ローカル エリア接続
インターネット アドレス                           物理アドレス       種類
--------------------------------------------  -----------------  -----------
2001:db8:beef::1                              00-12-e2-f8-3f-f2  到達可能 (ルーター)
2001:db8:cafe::1                              00-12-e2-f8-40-56  到達可能 (ルーター)
fe80::beef:1                                  00-12-e2-f8-3f-f2  到達可能 (ルーター)
fe80::cafe:1                                  00-12-e2-f8-40-56  到達可能 (ルーター)

 ルータAの“beef”とルータBの“cafe”の両方が通信可能であることが分かります。

 ここで、ルータAのIPv6機能をOFFにします。ルータAのインターフェイスで“no ipv6 enable”とし、配線やポートの状態は変更せずIPv6の通信機能だけを停止させます。ルータBの設定は変更しません。

・変更後のルータAの設定内容

interface vlan 100
  ipv6 address 2001:db8:beef::1/64
  ipv6 address fe80::beef:1 link-local
  no ipv6 enable
  no ipv6 nd suppress-ra
注:“no”で始まる設定内容は実際には表示されません

 念のため、netstatコマンドでルーティングを確認すると、ルーティングテーブルは何も変化せず、ホストはルータAの“beef”とルータBの“cafe”の両方のルートを保持しています。これはケーブルが抜けるなどの物理的な問題が発生していないためホストがリンクダウンせず、ルーティング上の問題を検出できないことに起因します。

 この状態でもう一度、“www.kokatsu.jp”宛ての通信路を確認すると、ルーティングテーブルには変化がないのに、もともとルータAの“beef”を経由していた通信が、ルータBの“cafe”へ自動的に変更されていることが確認できます。

・[ルータAで障害発生中]Windows 7で"www.kokatsu.jp"宛ての通信路を確認した例

C:\>tracert -h 1 www.kokatsu.jp
www.kokatsu.jp [2001:dc2:1000:2008::5456] へのルートをトレースしています
経由するホップ数は最大 1 です:
  1    <1 ms     *       <1 ms  2001:db8:cafe::1
トレースを完了しました。    

 さらに、ホストの近隣キャッシュを確認すると、ルータAの“beef”は利用できないことが確認できます。

・[ルータAで障害発生中]Windows 7でのIPv6近隣キャッシュの確認例

C:\>netsh interface ipv6 show neighbor
...
インターフェイス 12: ローカル エリア接続
インターネット アドレス                           物理アドレス       種類
--------------------------------------------  -----------------  -----------
2001:db8:beef::1                              00-12-e2-f8-3f-f2  Stale (ルーター)
2001:db8:cafe::1                              00-12-e2-f8-40-56  到達可能 (ルーター)
fe80::beef:1                                      到達不可        到達不可 (ルーター)
fe80::cafe:1                                  00-12-e2-f8-40-56  到達可能 (ルーター)

 このようにホストは、通信可能かどうかの状態も含めて、近隣のホストやルータの情報を常に確認し、最適な通信路を自動的に選択する機能を持っています。

 この近隣検出とキャッシュの仕組みは、NDP(Neighbor Discovery Protocol)を基にしていて、IPv6を実装するすべてのルータおよびノード(ホストやサーバ)で機能するようRFCで定義されています。このため、メーカーや機種を問わず共通して利用できます。

VRRPv3を用いたアクティブ/スタンバイ方式の冗長構成

 これまでホストの自動制御に主眼を置いて冗長制御の仕組みを見てきましたが、ここからは視点を変えて、ルータネットワークの場合やサーバ接続の用途を前提にした冗長化の仕組みを簡単にまとめます。

 ホストを収容する場合の自動的な冗長制御については、NDP(中でも特に、RA:Router Advertisement)が有効に働きます。しかしルータやサーバを接続する際は、自動化するのではなく、明示的に設定を行いたいケースが多いと思います。また、Webカメラやセンサなどの端末では、NDPのすべての機能を搭載するのが現実的でないこともあります。

 このような場合、ノードには固定アドレスと静的なゲートウェイアドレスを設定し、ゲートウェイ側で経路制御するアクティブ/スタンバイ方式の冗長構成を採用するのが一般的です。この方式で最も有力なのは、RFC5798で標準化されたVRRPv3プロトコルです。

 VRRPv3は、IPv4のVRRPを拡張するものです。IPv6独自の機能が追加されているものの、基本的な挙動は従来のVRRPと同様です。

 まず、冗長化された2台のルータにおける一般的なVRRPv3の設定を見てみましょう(図4)。

図4 VRRPv3を用いたIPv6ゲートウェイの冗長化 図4 VRRPv3を用いたIPv6ゲートウェイの冗長化

・ルータAの設定内容

interface vlan 100
  ipv6 address 2001:db8:ace::2/64
  ipv6 address fe80::ace:2 link-local
  ipv6 enable
  ipv6 nd suppress-ra
  vrrp 1 ipv6 2001:db8:ace::1
  vrrp 1 priority 100
  vrrp 1 accept

・ルータBの設定内容

interface vlan 100
  ipv6 address 2001:db8:ace::3/64
  ipv6 address fe80::ace:3 link-local
  ipv6 enable
  ipv6 nd suppress-ra
  vrrp 1 ipv6 2001:db8:ace::1
  vrrp 1 priority 10
  vrrp 1 accept

 ルータAとBは、ともにVRRP仮想アドレスとして“2001:db8:ace::1”を指定しています。仮想アドレスにはリンクローカルアドレスを使うのが一般的ですが、仮想インターフェイス(およびアドレス)への到達性を遠隔から監視したい場合には、リンクローカルアドレスは利用できません。従って、この例では上記のようにグローバルアドレスを設定しています。

 また、優先するルータを明示的に指定したい場合は、プライオリティを設定します。この例では、ルータAを“priority 100”、ルータBを“priority 10”とし、プライオリティ値の大きいルータAをマスター(優先)ルータとしています。

 この状態で各ルータのVRRPステータスを確認します。ケーブルが正常に接続されていればVRRPのネゴシエーションが行われ、ルータAで仮想IPv6アドレス“2001:db8:ace::1”が有効になります。

・ルータAのVRRPv3動作状態(VRRPv3 MASTER)

Router-A# show vrrpstatus
Date 2012/01/1 ...
VLAN0100 VRID 1 MASTER virtual-ip 2001:db8:ace::1 priority 100/100
Router-A# show ipv6 interface vlan 100
Date 2012/01/1 ...
VLAN0100: flags=8863
   mtu 1500
   inet6 2001:db8:ace::2/64
   inet6 fe80::ace:2%VLAN0100/64
   inet6 2001:db8:ace::1/128    (virtual router ip address)
   NIF00/Port24: UP media 100BASE-TX full(auto) 0012.e2f8.406f
   Time-since-last-status-change: 54,07:01:42
   Last down at: -----
   VLAN : 100

・ルータBのVRRPv3動作状態(VRRPv3 BACKUP)

Router-B# show vrrpstatus
Date 2012/01/1 ...
VLAN0100 VRID 1 BACKUP virtual-ip 2001:db8:ace::1 priority 10/10
Router-A# show ipv6 interface vlan 100
Date 2012/01/1 ...
VLAN0100: flags=8863
   mtu 1500
   inet6 2001:db8:ace::3/64
   inet6 fe80::ace:3%VLAN0100/64
   NIF00/Port24: UP media 100BASE-TX full(auto) 0012.e2f8.262a
   Time-since-last-status-change: 54,07:03:38
   Last down at: -----
   VLAN : 100

 ここで、各ルータで使われているMACアドレスに注目してください。ルータAのMACアドレスは“0012.e2f8.406f”、ルータBのMACアドレスは“0012.e2f8.262a”です。VRRPv3で共有される仮想IPv6アドレスに対して、どのMACアドレスが対応するのでしょうか?

 これを確かめるため、VRRPv3で収容されている隣接ルータでIPv6近隣キャッシュを確認します。

 一般的なルータでのIPv6近隣キャッシュの確認には、コマンド“show ipv6 neighbors”を使い、隣接ルータ(Neighbor)のIPv6アドレスとMACアドレス(Linklayer Address)を検証します。

・隣接ルータでのIPv6近隣キャッシュの確認例

Client-Switch# show ipv6 neighbors
Date 2012/01/1 ...
Total: 3 entries
Neighbor                        Linklayer Address Netif      Expire    S Flgs P
2001:db8:ace::1                 0000.5e00.0101    VLAN0100   19s       R R
2001:db8:ace::2                 0012.e2f8.406f    VLAN0100   22s       R R
2001:db8:ace::3                 0012.e2f8.262a    VLAN0100   26s       R R

 VRRPv3で共有サービスされている仮想IPv6アドレス“2001:db8:ace::1”に対して、ルータA(MACアドレス=0012.e2f8.406f)やルータB(MACアドレス=0012.e2f8.262a)のいずれの物理MACアドレスとも一致しない、“0000.5e00.0101”が登録されていることが分かります。すなわちVRRPv3では、明示的に設定した仮想IPアドレス“2001:db8:ace::1”と、自動的に割り振られた仮想MACアドレス“0000.5e00.0101”が対になって冗長制御されるのです。

 この仕組みによって、マスタールータで問題が生じてVRRPおよび通信経路が切り替わったときも、隣接するノード(ルータやサーバ、ホスト)は近隣キャッシュを更新/変更する必要がなく、冗長切り替えの影響をまったく意識することなく通信を継続できるのです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。