ケース 3 --二つのデフォルトルータと二つのグローバルアドレス--

Dyna1のインターフェイスrtk0を落した時



図1)テストのコンフィグ

(1)最初

Dyna1がどちらのルータをデフォルトルータとして選ぶかはタイミングなどによって決まる。
今、この場合ではDyna1はPower3をデフォルトルータとして選んだ。ping6はPower3をとおり、gr2000に到達する。エコーリプライもPower3を通っている。Dyna1はPower3を通っているので送信元アドレスには2001:200:0:8411:208:dff:fe76:f414を使っている。


図2)最初の経路

経路表

Dyna1
Power1
Power2
Power3

Dyna1のndpエントリ

Dyna1

(2)Power3のインターフェイスrtk0を落した時

Dyna1はルートを変えることができずに、引続きPower3にパケットを送り続ける。また、Power3は"2001:200:0:8410::/64"への経路をもち続けている。


図3)インターフェイスrtk0を落した時の経路

(2)Power2とPower3のインターフェイスrtk0での経路交換

そこで、Power2とPower3のインターフェイスwm0のパッシブインターフェイスを解除し、経路を交換させて、 Power3がDyna1へPower2の経路をリダイレクトして目的地へ到達するようにしようとしたした。 しかし、そこでPower2のコンソールに緑色で
nd6_storelladder sdl_alen=0, dst=2001:200:0:8411:208:dff:fe76:f414 if=wm0

とでてしまい。ping6のechoリプライが返ってこなくなってしまう。
これに関する記述をKAMEのなかに見つけた。 場所は/kame/kame/kame/sys/netinet6/のnd6.cの中です。
2419行目に
/* this should be impossible, but we bark here for debugging */
  printf("nd6_storelladdr: sdl_alen == 0, dst=%s, if=%s\n",
        ip6_sprintf(&SIN6(dst)->sin6_addr), if_name(ifp));
という記述があった。
これは、Dyna1がICMPリダイレクトを受け取って、経路変更した際、 まだソースアドレスに2001:200:0:8411:208:dff:fe76:f414を使っているのが問題である。 なぜなら、ソースアドレスに2001:200:0:8411:208:dff:fe76:f414を使っている ping6のechoリプライがPower2を通って帰ることはできないからだ。




図4)OSPFを動かした後の経路

経路表

Dyna1
Power1
Power2
Power3

Dyna1のndpエントリ

Dyna1