アドレス解決の仕組みと実践ガイド:ARPからNDP、セキュリティ・運用まで徹底解説
はじめに:アドレス解決とは何か
ネットワークにおける「アドレス解決」は、上位の論理アドレス(IPv4/IPv6のIPアドレス)を下位の物理アドレス(主にイーサネットのMACアドレス)に結びつけるプロセスを指します。IPパケットを同一リンク上の宛先に届けるために必須の処理であり、プロトコルや実装によって方式が異なります。ここではIPv4で広く使われるARP、IPv6で使われるNeighbor Discovery(NDP)を中心に、実装、運用、セキュリティ対策、トラブルシューティングまで深掘りします。
ARPの基本(IPv4)
Address Resolution Protocol(ARP)は、IPv4アドレスから対応するMACアドレスを取得するためのプロトコルです。動作はシンプルで、送信元が宛先IPのMACを知らない場合、ARP RequestをブロードキャストしてそのIPを持つホストからARP Replyを受け取ります。ARPメッセージはレイヤ2(イーサネット)上で送られ、ARP Requestはブロードキャスト(ff:ff:ff:ff:ff:ff)で送信されます。
ARPの実装と重要概念
- ARPテーブル(キャッシュ):OSはIP→MACのマッピングを一時的にキャッシュします。キャッシュの保持時間や更新ポリシーは実装によって異なります。
- Gratuitous ARP:自分のIPアドレスについて自発的にARPリクエストを出し、重複検出やスイッチのMAC学習情報更新を行います。
- Proxy ARP:ルータやゲートウェイが他のホストのためにARPに応答し、パケットを中継する技術。レガシー環境や一部のVPNで使われることがありますが、誤用はルーティング混乱を招きます。
- Reverse ARP(RARP):古いプロトコルで、MACからIPを取得する用途に使われましたが、現在はDHCPに置き換えられています。
IPv6のアドレス解決:Neighbor Discovery Protocol(NDP)
IPv6ではNDP(RFC 4861)がARPの機能を統合し、アドレス解決、ルータ検出、重複アドレス検出(Duplicate Address Detection:DAD)などを扱います。ICMPv6メッセージ(Neighbor Solicitation/Advertisement、Router Solicitation/Advertisement)を使用し、リンクローカルスコープのマルチキャストを用いる点が特徴です。
NDPの追加機能とSLAAC
NDPは単なるアドレス解決に留まらず、SLAAC(Stateless Address Autoconfiguration、RFC 4862)と連携してホストが自身のアドレスを生成・構成するのに用いられます。またDADによって同一リンク上でのアドレス重複を防止します。
セキュリティ上の脅威と対策
アドレス解決系は攻撃対象になりやすく、代表的な脅威にはARPスプーフィング(ARPポイズニング)やNDPスプーフィングによる中間者攻撃(MITM)が含まれます。これらに対する対策は複層的に実施するのが望ましいです。
ARP/NDP攻撃への対策手法
- 静的エントリの利用:重要機器に対しては静的なARP/NDPエントリを設定する。ただしスケーラビリティや運用性の問題がある。
- スイッチのセキュリティ機能:Dynamic ARP Inspection(DAI)、ARP ACL、RA Guardなどのスイッチ機能により悪意ある応答を除去する。
- DHCPスヌーピングやポートセキュリティ:DHCPと連動して正当なIP-MAC対応を検証する。ポートごとのMAC固定で不正接続を抑止。
- 暗号化とエンドツーエンド保護: TLS/SSH/IPsec等により、MITMの影響を受けにくくする。
- IPv6特有の対策:SEND(Secure Neighbor Discovery、RFC 3971)などの導入。ただし運用面や鍵管理のハードルがある。
運用・設計上の留意点
アドレス解決の運用で重要なのは「可視化」と「一貫性」です。ARP/NDPテーブルやスイッチのMACアドレステーブルを監視し、異常な変動や重複をアラート化します。また、サブネット設計やVLANの分割、ゲートウェイ配置を適切に行うことで不要なブロードキャスト/マルチキャストの影響を減らせます。
トラブルシューティングの実践手順
- 症状把握:通信不達が発生しているノード、時間帯、範囲(ホスト単位かサブネット全体か)を特定する。
- テーブル確認:arp -a や ip neigh show、ip -6 neighbour show 等でキャッシュを確認する。
- パケットキャプチャ:tcpdumpやWiresharkでARP(またはICMPv6 Neighbor)メッセージをキャプチャし、Request/Replyのやり取りを確認する。
- グラチュイタスARPや重複の確認:同一IPの複数MACや頻繁なARP更新を検出したら原因追及(仮想IP、フェイルオーバー、誤設定など)。
- スイッチの挙動確認:MAC学習やフラッディング、ポートのミラリング設定を見直す。
実運用でよくある問題と原因例
- ARPテーブルの頻繁な更新:短い生存時間設定、ネットワーク機器の不具合、スプーフィング。
- プロキシARPが原因の通信不具合:意図しない応答でトラフィックが誤った経路へ行く。
- ARP Flux:マルチホーミングやLinuxのソースアドレス選択による不整合で、複数のインターフェースがARPに応答するケース。
- IPv6でのRA多発:不正なルータ広告が送信されている可能性(RA Guardで検知)。
実例コマンド(確認用)
日常の確認で使う代表的なコマンド例は次の通りです。環境に応じて管理者権限で実行してください。例: "arp -an"、"ip neigh show"、"ip -6 neigh show"、"tcpdump -i
将来動向と運用のヒント
IPv6の普及に伴い、NDPの重要性はますます高まっています。SENDなどのセキュリティ拡張は理想的ですが、鍵管理やデバイス対応の課題が残ります。短期的にはスイッチのセキュリティ機能を適切に設定し、継続的な監視とログ収集、インシデント対応手順の整備が現実的な対策です。
まとめ
アドレス解決はネットワークの基礎であり、性能や可用性、セキュリティに直結します。ARPとNDPの違いを理解し、監視・防御・設計の観点から多層的に対策を行うことが重要です。運用ではキャッシュやスイッチの学習テーブルを可視化し、疑わしい変化を早期に検出する仕組みを整えましょう。
参考文献
- RFC 826 - An Ethernet Address Resolution Protocol
- RFC 4861 - Neighbor Discovery for IP version 6 (IPv6)
- RFC 4862 - IPv6 Stateless Address Autoconfiguration
- RFC 3971 - SEcure Neighbor Discovery (SEND)
- RFC 5227 - IPv4 Address Conflict Detection
- Cisco - Dynamic ARP Inspection
- Linux kernel - Neighbour (ARP/NDP) parameters


