リンクローカルアドレスとは — IPv4(169.254)とIPv6(fe80::)の仕組み・確認方法・運用とセキュリティ対策

リンクローカルアドレスとは

リンクローカルアドレス(link-local address)は、ネットワーク上の「同一リンク(同一ブロードキャストドメインや同一セグメント)」内でのみ有効なIPアドレスのことを指します。ルーターによって他のネットワークへルーティングされることを想定しておらず、そのリンク内の自動構成、近隣探索(neighbor discovery)やローカルサービスの発見などのために用いられます。IPv4とIPv6で仕様や振る舞いが異なるため、ここでは両者について詳しく説明します。

IPv4 のリンクローカル(APIPA)

IPv4におけるリンクローカルアドレスはRFC 3927で定義され、アドレスレンジとして 169.254.0.0/16 が予約されています。ただし実際に自動割当てで使用される範囲は 169.254.1.0 〜 169.254.254.255(つまり先頭と末尾の /24 は推奨されて使用されない)です。

  • 用途:DHCPサーバからアドレスが取得できない場合などに、ホストが自動的に自分に割り当てて、同一リンク上の他ホストと直接通信できるようにするための仕組み(MicrosoftではAPIPA: Automatic Private IP Addressing と呼ぶ)。
  • 割当手順:ホストはランダムにアドレスを選び、ARPによる衝突検出(ARP probe)を行います。衝突がなければそのアドレスを使用し、グラチュイタスARPなどで存在を通知します(RFC 3927)。
  • 制限:ルーターはこれらのアドレスを別リンクへ転送してはならないため、基本的に同一セグメント内の通信に限定される。

IPv6 のリンクローカル(fe80::/10)

IPv6ではリンクローカルアドレスのプレフィックスは fe80::/10 と定義されています(RFC 4291)。実装上は一般的に fe80::/64 が用いられ、インターフェース識別子(64ビット)が続きます。主な特徴は次のとおりです。

  • 必須の存在:ほぼ全てのIPv6対応インターフェースには少なくとも1つのリンクローカルアドレスが割り当てられます。これはNDP(Neighbor Discovery Protocol)やルーター、隣接ノードとのやり取りのために必須です。
  • 自動生成:インターフェース識別子は従来EUI-64方式(MACから生成)を用いましたが、プライバシー拡張(RFC 4941)や安定的なID生成(RFC 7217)などの方式も使われます。
  • スコープとゾーンID:リンクローカルは複数のインターフェースに同じアドレスが存在し得るため、OSではゾーンインデックス(例:fe80::1%eth0 または fe80::1%12)でどのインターフェースかを指定します。
  • 非ルーティング:ルーターはリンクローカルパケットを別のリンクへ転送しないのが原則です。

動作の仕組み(詳細)

リンクローカルアドレスの割当・確認・利用にはプロトコルレベルの手順があります。

  • IPv4(RFC 3927):アドレス選択→ARPプローブ(自分が選んだアドレスに対しARPを投げる)→応答がなければ割当→グラチュイタスARPで通知。定期的に衝突や再割当のチェックを行う実装もある。
  • IPv6(RFC 4862、RFC 4861):Duplicate Address Detection(DAD)として、隣接探索のNeighbor Solicitationを使って衝突確認を行います。問題なければアドレスを有効化し、NDPを通じて近隣情報のやり取り(隣接表更新、アドバタイズ等)を行います。ルーターはRA(Router Advertisement)やRS(Router Solicitation)を用いてプレフィックスやルータ情報を配布します。
  • ローカルサービス検出:mDNS、LLMNR、NetBIOSなどのローカルネーム解決もリンクローカルやマルチキャストを使って行われることが多く、これらはリンク外では機能しない。

実運用での利用用途

  • DHCP障害時の一時的な通信確保(IPv4のAPIPA)
  • ルーターや隣接機器の管理やデバッグ(IPv6ではルータのリンクローカルアドレスがデフォルトゲートウェイとして使われることがある)
  • ゼロコンフィギュレーション(Zero-configuration)や簡易なピアツーピア接続(例:プリンタやIoT機器の初期接続)
  • NDP、RA、DHCPv6などのプロトコルの基盤としての利用(多くはリンクローカルをソース/宛先にしてやり取りされる)

確認・操作方法(コマンド例)

主要なOSでのリンクローカルアドレスの確認方法例です。

  • Linux:
    • IPv4: ip addr show
    • IPv6: ip -6 addr show
    • 近隣情報: ip neigh
    • 例: ping6 fe80::abcd:ef12:3456:7890%eth0
  • Windows:
    • ipconfig /all — IPv4で169.254.x.x が割り当たっているか、IPv6で fe80:: プレフィックスが見えるか確認
    • ping -6 fe80::xxxx%インターフェース番号 (Windowsはインターフェース番号でゾーン指定する場合がある)
  • macOS: ifconfigで確認。ping6でゾーンIDを指定する。

セキュリティと運用上の注意点

リンクローカルは利便性が高い一方、同一リンク上の攻撃者からの脅威に対して脆弱です。代表的なリスクと対策を挙げます。

  • リスク
    • ARP/NDPスプーフィングやNDPポイズニングによる中間者攻撃
    • 悪意あるRAによるデフォルトルートの改竄(IPv6)
    • リンク内の悪意あるホストによるサービス妨害や偽情報の配布
  • 対策
    • RA Guard、ND監視、ポートベースのフィルタリング(スイッチレベルでの制御)
    • Secure Neighbor Discovery(SEND:RFC 3971)やIPsecの利用(ただしSENDは普及が限定的)
    • ネットワーク分離・VLANによるアクセス制限や、ゼロトラストに基づく認証の導入

よくある誤解

  • 「リンクローカルは常に‘使える’」 — 実際にはルータを越えて使えないため、インターネット接続や別セグメントとの通信には使えません。
  • 「IPv4の169.254はDHCPとは別の正式なネットワーク」 — RFCで定義されたローカル範囲であり、DHCPに失敗したときの暫定手段として用いられますが、運用上はDHCP復旧や手動設定が望ましいです。
  • 「IPv6のリンクローカルは自動的にプライバシー保護がある」 — 古いEUI-64方式はMACアドレス由来でトラッキングされ得るため、プライバシー拡張(RFC 4941)を用いることが推奨される場合があります。

まとめ

リンクローカルアドレスは、「同一リンク内での通信を確保・支援する」ために設計された重要な仕組みです。IPv4ではDHCP障害時の自動割当(169.254.x.x)、IPv6ではNDPやRAを支える必須のアドレスとして広く使われています。一方でルーティングされない性質や、ローカル攻撃に対する脆弱性を理解した上で、適切な運用と対策(RA Guard、DAD、プライバシー拡張など)を講じることが重要です。

参考文献