IPv6アドレスの自動生成による不具合解消法UNIX処方箋

「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたへ贈る珠玉のTips集。今回は、IPv6アドレスの自動生成による不具合解消法だ。

» 2007年09月07日 01時48分 公開
[ITmedia]

社内で試験的にIPv6ネットワークを構築しています。IPv6対応ルーターでネットワーク1(1:1:1:1::/64)とネットワーク2(2:2:2:2::/64)をルーティングし、各ネットワーク上にSolaris 8のホストを数台配置しています。ルーターは、ネットワーク1とネットワーク2にRA*を配信し、各ホストはRAを受け取って動的にIPv6アドレスを生成しています。最近、ネットワーク1のホストを1台だけネットワーク2へ移動しました(図1)。ネットワーク2のRAを受け取って自動的にIPv6アドレスを生成し、ネットワーク2上のホストと通信できるようになったのですが、ネットワーク1のホストとは通信ができません。何が原因なのでしょうか?

図1 図1 試験的に構築したIPv6ネットワーク

 IPv6では、1つのネットワークインタフェースに対して複数のIPアドレスを割り当てることが可能です。ここでは、複数のIPアドレスを自動生成してしまったことが、通信に失敗した原因だと思われます。

RAによって複数のIPアドレスを自動生成

 質問にあるネットワーク初めからネットワーク2に移動したホスト(以下ホストA)は、ネットワーク1に接続していた時点でRAを受信してネットワーク1のIPアドレスを生成しています。さらに、ネットワーク2に移ってからもRAを受信してネットワーク2のIPアドレスを生成したため、1つのネットワークインタフェースにネットワーク1とネットワーク2のIPアドレスを持っているわけです(実行例1)

ifconfig -a6
lo0: flags=2000849 mtu 8252 index 1
        inet6 ::1/128
hme0: flags=2000841 mtu 1500 index 2
        ether 8:0:20:a2:74:4
        inet6 fe80::a00:20ff:fea2:7404/10
hme0:1: flags=2080841 mtu 1500 index 2
        inet6 1:1:1:1:a00:20ff:fea2:7404/64
hme0:2: flags=2080841 mtu 1500 index 2
        inet6 2:2:2:2:a00:20ff:fea2:7404/64
# netstat -nr -f inet6
Routing Table: IPv6
  Destination/Mask            Gateway                   Flags Ref   Use  If
--------------------------- --------------------------- ----- --- ------ -----
1:1:1:1::/64                1:1:1:1:a00:20ff:fea2:7404  U       1      2 hme0:1
2:2:2:2::/64                2:2:2:2:a00:20ff:fea2:7404  U       1      0 hme0:2
fe80::/10                   fe80::a00:20ff:fea2:7404    U       1      3 hme0
ff00::/8                    fe80::a00:20ff:fea2:7404    U       1      0 hme0
default                     fe80::2a0:deff:fe27:4574    UG      1      0 hme0
default                     fe80::2a0:deff:fe27:4577    UG      1      0 hme0
::1                         ::1 UH 1 0 lo0

実行例1 ネットワーク2のRAを受信したときのネットワーク情報

 RAで動的にIPアドレスを生成する場合、そのホストのデフォルトゲートウェイはRAを配信したルーターになります。通常、ネットワーク2のホストは、ネットワーク1のホスト宛てのパケットをデフォルトゲートウェイであるルーターに送ります。しかしホストAは、ネットワーク1のIPアドレスを持っているのでネットワーク1をローカルネットワークと認識し、ネットワーク1宛てのパケットをルーターへ送りません。

 ローカルネットワーク上にNS*を送信して、パケットのあて先であるネットワーク1のホストのMACアドレスを探し出そうとします。ローカルネットワーク上にネットワーク1のホストは存在しないため、パケットはあて先に到達せず、通信は失敗します。これが、ホストAがネットワーク1のホストと通信できない理由です。

 ホストAがネットワーク1のホストと通信するためには、ホストA上にあるネットワーク1のIPアドレスを削除します。この結果、ネットワーク1をローカルネットワークと認識しなくなるため、ネットワーク1宛てのパケットをルーターに送るようになります。

IPアドレスの削除

 ネットワーク1のIPアドレスを削除する手順は以下のとおりです。

 まず、RAで取得したIPv6アドレス情報をすべて削除します。RAによって生成されたIPv6アドレス、更新時間、有効期間の情報は、/var/inet/ndpd_state.<interface>ファイルに保存されているので、これを削除(あるいはファイル名を変更)します(実行例2)。削除後、in.ndpdデーモンを再起動すると、RAによって生成されたIPv6アドレスは初期化されます(実行例3)


# rm /var/inet/ndpd_state.hme0
あるいは
# mv /var/inet/ndpd_state.hme0 /var/inet/ndpd_state.hme0.org

実行例2 /var/inet/ndpd_state.<interface>ファイルの削除
ps -ef | grep ndpd
    root   615     1  0  14:29:37  ?        0:00  /usr/lib/inet/in.ndpd
    root   709   697  0  14:48:22  pts/9    0:00  grep ndpd
# kill -HUP 615ifconfig -a6
lo0: flags=2000849 mtu 8252 index 1
        inet6 ::1/128
hme0: flags=2000841 mtu 1500 index 2
        ether 8:0:20:a2:74:4
        inet6 fe80::a00:20ff:fea2:7404/10

実行例3 in.ndpdデーモンの再起動

 これによって、ネットワーク1とネットワーク2のIPアドレスは両方とも削除されますが、ネットワーク2上では一定期間でRAが配信されています。ホストAがそのRAを受信すると、ネットワーク2のIPアドレスは再度生成されるので、最終的にはネットワーク1のアドレスだけが削除されることになります。

このページで出てきた専門用語

RA

Router Advertisementの略。ネットワークのプレフィックス情報を通知するために、主にルーターから配信されるメッセージ。これを受け取ったホストは、プレフィックス情報と自身のMACアドレスを組み合わせて、IPアドレスを自動生成できる。

NS

Neighbor Solicitationの略。MACアドレスの問い合わせを行うメッセージ。IPv4でのARPの役割に相当する。


関連キーワード

IPv6 | 自動生成 | 不具合 | Solaris


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ