IPv6アドレスの自動生成による不具合解消法:UNIX処方箋
「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたへ贈る珠玉のTips集。今回は、IPv6アドレスの自動生成による不具合解消法だ。
社内で試験的に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のホストとは通信ができません。何が原因なのでしょうか?
IPv6では、1つのネットワークインタフェースに対して複数のIPアドレスを割り当てることが可能です。ここでは、複数のIPアドレスを自動生成してしまったことが、通信に失敗した原因だと思われます。
RAによって複数のIPアドレスを自動生成
質問にあるネットワーク初めからネットワーク2に移動したホスト(以下ホストA)は、ネットワーク1に接続していた時点でRAを受信してネットワーク1のIPアドレスを生成しています。さらに、ネットワーク2に移ってからもRAを受信してネットワーク2のIPアドレスを生成したため、1つのネットワークインタフェースにネットワーク1とネットワーク2のIPアドレスを持っているわけです(実行例1)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
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)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これによって、ネットワーク1とネットワーク2のIPアドレスは両方とも削除されますが、ネットワーク2上では一定期間でRAが配信されています。ホストAがそのRAを受信すると、ネットワーク2のIPアドレスは再度生成されるので、最終的にはネットワーク1のアドレスだけが削除されることになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
RA
Router Advertisementの略。ネットワークのプレフィックス情報を通知するために、主にルーターから配信されるメッセージ。これを受け取ったホストは、プレフィックス情報と自身のMACアドレスを組み合わせて、IPアドレスを自動生成できる。
NS
Neighbor Solicitationの略。MACアドレスの問い合わせを行うメッセージ。IPv4でのARPの役割に相当する。
Copyright © ITmedia, Inc. All Rights Reserved.