ARPとは?IPv4のIP→MAC変換の仕組み、パケット構造、脆弱性と実践的対策

ARPとは — ネットワークで「IPアドレス」を「MACアドレス」に結びつける仕組み

ARP(Address Resolution Protocol)は、IPv4 ネットワーク上で IP アドレス(論理アドレス)を対応する物理アドレス(MAC アドレス)に変換するためのプロトコルです。イーサネット等のブロードキャスト可能なリンク層で動作し、「同一リンク内の相手」の物理アドレスをどう取得するかを定義します。ARP は RFC 826(1982年)で定義され、Ethernet + IPv4 の環境で今も広く使われています。

ARP の位置づけ(OSIモデル上)

ARP はしばしば「レイヤ2.5」と呼ばれます。理由は、IP(レイヤ3)で表される論理アドレス情報を、Ethernet(レイヤ2)のフレーム送信に必要な物理アドレスへ解決するためのブリッジ役を果たすためです。実装上はカーネルのネットワークスタックに組み込まれ、リンク層フレームとして送受信されます(EtherType 0x0806)。

ARP の基本動作

同一サブネット内で、送信元がある IP アドレス 宛のパケットを送る場合、まず送信先の MAC アドレスが分かっている必要があります。送信元が ARP キャッシュにその IP の対応が無い場合、次の手順が行われます。

  • 送信元は ARP リクエストをブロードキャスト(FF:FF:FF:FF:FF:FF)で送信。リクエストは「IP X の MAC アドレスを教えてください」という問いかけ。
  • 同一リンク内のホストのうち、ターゲット IP を所持するホストだけが ARP リプライをユニキャストで返答し、自分の MAC を送信元に通知。
  • 送信元は受け取った MAC と IP の対応を ARP キャッシュに保存し、以降は直接イーサネットフレームを送れる。

ARP パケットのフォーマット(主要フィールド)

ARP は固定構造のパケットを持ち、RFC 826 によって規定されています。主要なフィールドは以下の通りです。

  • Hardware Type (HTYPE):物理アドレスのタイプ(Ethernet は 1)
  • Protocol Type (PTYPE):プロトコルタイプ(IPv4 は 0x0800)
  • Hardware Addr Length (HLEN):物理アドレス長(Ethernet では 6)
  • Protocol Addr Length (PLEN):プロトコルアドレス長(IPv4 では 4)
  • Operation (OPER):1=Request、2=Reply(その他実装依存の値もある)
  • Sender Hardware Addr (SHA)、Sender Protocol Addr (SPA)、Target Hardware Addr (THA)、Target Protocol Addr (TPA):送信者/ターゲットの MAC と IP

Ethernet/IPv4 の場合(HLEN=6、PLEN=4)の ARP ペイロード長は 28 バイト(ヘッダ 8 バイト + アドレス群)になります。フレームは EtherType 0x0806 で識別されます。

ARP のバリエーションと関連機能

  • ARP Request / Reply:通常の問い合わせと応答。
  • Gratuitous ARP(無償 ARP):自身の IP をターゲット IP にして送るリクエスト/リプライ。主に重複 IP の検出、スイッチの MAC テーブルや他ノードの ARP キャッシュの更新、フェイルオーバ(VRRP/HSRP/CARP 等)時の通知などに使われます。
  • Proxy ARP:ルータやゲートウェイが、他ノードのために代わりに ARP に応答する機能。異なるサブネットにあるがあたかも同一リンク内にあるかのように隣接ノードへ応答して通信を可能にします。用途は特定の互換性確保や移行時だが、一般には推奨されない場合もあります(RFC 1027)。
  • RARP(Reverse ARP):物理アドレスから IP を取得する旧プロトコル(現在は BOOTP/DHCP に置き換えられた)。

ARP キャッシュとその管理

ホストは ARP の問い合わせ/応答結果を ARP キャッシュ(テーブル)に保存します。キャッシュには動的エントリと静的エントリがあり、動的エントリは一定時間経過で破棄されます。これにより毎回ブロードキャストを送る必要を減らしますが、キャッシュの stale(古くなった)エントリにより通信障害が起きることもあります。

運用上よく使う操作例:

  • Windows: arp -a でテーブル確認、arp -s で静的登録
  • Linux: ip neigh, arp, /proc/sys/net/ipv4/neigh/* でパラメータ確認・調整
  • トラブルシュート: tcpdump/wireshark で ether proto 0x806 をフィルタして ARP のやり取りを解析、arping ツールで直接 ARP レベルの応答確認

ARP による問題とセキュリティリスク

ARP は認証機能を持たないため、悪意ある第三者が ARP メッセージを偽装することで次のような攻撃が可能です。

  • ARP スプーフィング/ポイズニング:ターゲットの ARP キャッシュを偽情報で上書きし、通信を攻撃者の MAC に向けさせる。これにより MITM(中間者攻撃)やパケット盗聴、セッションハイジャックが可能になる。
  • ARP フラッディング:大量の偽 ARP を送ってネットワークを混乱させる、スイッチの CAM テーブルを溢れさせる等の DoS 的な影響。
  • ARP ベースのルーティング誤動作:プロキシ ARP を悪用してトラフィックを誘導する等。

対策とベストプラクティス

ARP に対する対策は複数の層で行います。主な手段は以下の通りです。

  • ネットワーク機器側対策
    • Dynamic ARP Inspection (DAI):スイッチが DHCP スヌーピング等で得た IP-MAC バインディングと照合し、正当な ARP だけを通す(Cisco 等の商用スイッチでサポート)。
    • ポートセキュリティ:特定ポートに許可する MAC を制限。
    • ARP レートリミティング:異常に多い ARP を制限。
  • ホスト側対策
    • 重要なサーバには静的 ARP エントリを設定(運用コストとスケーラビリティのトレードオフあり)。
    • ARP スプーフィング検知ツール(arpwatch、ArpON、OS のセキュリティエージェント等)を導入。
    • 重要通信には上位プロトコルレベルでのセキュリティ(TLS、IPsec)を適用し、中間者攻撃の影響を低減。
  • 設計上の考慮
    • IPv6 の導入:IPv6 では ARP の代わりに Neighbor Discovery Protocol (NDP, RFC 4861) を使用するが、NDP も固有の脆弱性があり、SEcNDP/RA-guard 等での防御が必要。
    • 論理ネットワーク分割(VLAN)でブロードキャストドメインを限定し、ARP ブロードキャストの影響を抑える。

実務でのトラブルシューティング例

代表的な障害と診断の流れを簡単に示します。

  • 通信が遅い/できない → ARP キャッシュ確認(arp -a / ip neigh):正しい MAC が登録されているか確認。
  • 不審な MAC が登録されている → tcpdump/wireshark で ARP パケットをキャプチャし、ARP リプライの送信元を特定。
  • ARP スプーフィング疑い → arpwatch や arpspoof 検出ツールで監視、必要なら該当端末のポート遮断。
  • フェイルオーバ後に通信が更新されない → Gratuitous ARP を手動で送る、またはフェイルオーバ実装が正しく gratuitous ARP を発行しているか確認。

仮想化・クラウド環境における注意点

ハイパーバイザや仮想スイッチは ARP の挙動に影響を与えます。仮想マシンの移動(ライブマイグレーション)や NAT、ブリッジ設定により ARP キャッシュの不一致や ARP フラッディングが発生することがあります。クラウドの仮想ネットワークではプラットフォームによって ARP をプロキシする振る舞いが異なるため、設計時に確認が必要です。

まとめ

ARP は古典的で単純なプロトコルですが、現代の LAN 運用において非常に重要な役割を果たします。利点は実装のシンプルさと即時性にありますが、認証がないためセキュリティ上の弱点も抱えています。したがって、ネットワーク設計・運用では ARP の特性を理解した上で、DAI や VLAN、暗号化など複数の対策を組み合わせることが望まれます。IPv6 環境では ARP の代替として NDP が使われますが、同様の注意(検出と防御)が必要です。

参考文献