More than Engineering

技術メモと日記

RFC7404: Using Only Link-Local Addressing inside an IPv6 Networking

少し古い記事であるが、『Change of paradigm with IPv6 : no global addresses on router interfaces | APNIC Blog』という RFC7404 の内容に関する解説記事を読んだ。

記事の内容を一言で要約すると「IPv6のネットワークを構築するにあたって、ルータ間のリンクにグローバルユニキャストアドレスやユニークローカルアドレスを振る必要ってないし、リンクローカルアドレス (LLA: Link-local Addres) だけでも実現できるよね」というものである。

その内容が技術的に面白く、自分自身関心のある領域であったということもあったので、原文を読んでみてその内容をまとめてみた。

RFC7404 の概要

RFC 7404 - Using Only Link-Local Addressing inside an IPv6 Network では、IPv6ネットワークを構築する際に、ルータ間のインターフェースにリンクローカルアドレスのみを設定してネットワークを構築する手法について述べられている。また、これを実現することで得られるメリットや、そのような手法を用いる際に考慮すべき事項についても言及している。

ここで生じる疑問として「なぜ、何のために、ルータ間のインターフェースにリンクローカルアドレスを使用するのか」という点がある。

この理由については、ルータ間のインターフェースに設定されるIPアドレスにアクセスする必要がなく、外部からトラフィックを受信する必要もないためであると本文中に述べられている。一般的なコア設備でのネットワークではL3のインターフェースごとにIPアドレスが設定されているが、そもそもこうしたインターフェースのIPアドレスに接続するような機会自体少なく、外部から不必要にトラフィックを受信する必要性もない。(通常は不用意に接続されないように経路を対外組織に広告しなかったり、フィルタを書いて接続されないようにする場合がほとんど。)また、経路情報の交換は隣り合うルータ同士で行われるため、隣接するノードとの通信が可能であればトポロジー情報や経路情報の生成が可能である。

リンクローカルアドレスは1つのセグメントに閉じたアドレスであるため、同じセグメントに存在するホストとは通信することができるが、外部から接続することはできない。それでも経路情報の交換ができ、ルーティングテーブルの構築やパケットの転送が可能である理由は、下記のとおりである。

  • コントロールプレーンとして用いられるプロトコル(BGP, IS-IS, OSPFv3, RIPng, PIM)はリンクローカルアドレスでも動作するように設計されているため。
  • SSH, telnet, SNMP などの管理系のプロトコルについては、宛先をループバックアドレスIPアドレスにすることで使用できたり、いわゆる out-of-band方式(コンソールを経由した設定など)で管理できるため。
  • ICMPv6 については送信元をルータのループバックアドレスに付与したグローバルアドレスにすることで、送受信が可能であるため。(ルータ間のリンクに設定されるアドレスである必要がない)
  • IPv6 の Neighbor Discovery は、リンクローカルユニキャストとマルチキャストパケットアドレスを用いて行われるため。
  • データプレーンはリンクのアドレスの種別とは無関係に転送されるため。

要するに、リンクローカルアドレスを用いた場合でもコントロールプレーンの通信が可能であり、管理系プロトコルの使用やデータプレーンの転送にも影響を与えないことから、グローバルアドレスをルータ間のリンクに設定せずともルーティングテーブルを構築できるということだ。

リンクローカルアドレスを用いることのメリット

ルータ間のインターフェースにリンクローカルアドレスを設定するメリットとしては次の事柄が挙げられている。

  • ルーティングテーブルのサイズが小さくなるため、ルーティングの収束時間を短くできる
  • 管理すべきグローバルアドレスがループバックアドレスだけになるので、アドレス管理がの負荷が減る
  • ルータの設定がシンプルになる
  • ルータのインタフェースアドレスが外部からアクセスできないため、攻撃を軽減できる

リモートからの疎通性を確保したり管理用プロトコルを使用するためにルータのループバックアドレスにグローバルアドレスを設定する必要はあるものの、それ以外のインターフェースごとにグローバルアドレスを設定する必要がない。このため、DNSの逆引き設定やアドレス設定や管理といった運用上の負荷が軽減するといった利点がある。再三述べることになるが、リンクローカルアドレスをL3インターフェースのアドレスとして設定した場合でも、管理系プロトコルの使用やデータプレーンの転送にも影響を与えることはない。

また、リンクローカルアドレスを用いることの大きなメリットとして、外部から攻撃を受けるリスクを最小限に抑えることが可能となる。依然としてループバックアドレスに設定したグローバルアドレスは外部から不必要なパケットを受信するリスクを孕んでいるが、ルータ間のアドレスにリンクローカルアドレスを用いることで。インターフェースに設定されたアドレスに対して逐一フィルタを書いて対処する必要性もなくなり、外部から不要なトラフィックを受信することもなくなる。

考慮すべき事項

その一方で、ルータ間の接続にリンクローカルアドレスを用いる上で考慮すべき点についても述べられている。具体的には次のような項目である。

  • 特定のインターフェースに対してpingをしたり、tracerouteからインターフェースの情報を取得することができない。
  • NMS(ネットワーク管理システム)が適切に利用できなくなる場合がある
  • ハードウェア依存 (明示的に指定しない場合、ラインカードを交換したときにアドレスが変わってしまう)
  • RSVP-TE を動作させることができない

pingやtracerouteの問題は拡張ICMP (RFC5837) 用いることで、ICMPの応答に受信したインタフェース名を含めたり、ルータのループバックアドレスに付与したグローバルアドレスからネットワーク上のルータを識別するという方法を取ることができる。また、インターフェースのIPアドレスを元に監視パラメータを作成したり監視パラメータの作成にNDPを用いるようなソフトウェアであった場合、ネットワーク管理システムが予期した通りに動作しないという問題が発生しうることも考慮される。
その他、IPv6アドレスはEUI-64という方法で自動的にアドレスが生成されることから、明示的にリンクローカルアドレスを指定していない場合、ラインカードの交換などでリンクローカルアドレスが変更されてしまうことや、LSPを張ることができないため、RSVP-TEを動作させることができないといった問題がある。

所感

本文中では具体的なユースケースとしてIXでの利用が述べられていることからIXでの利用を想定したものだと思われるが、それに限らずDCの設計など、汎用的に用いることができる運用方法であるように思った。ただし万能包丁というわけではなく、RSVP-TEのような特定のプロトコルを用いることができなくなってしまう場合もあるため、ネットワークの要件と照らし合わせて採用するかどうかの判断を行うべきだ(と、本文中にも書かれている)。

リンクローカルアドレスを用いた方法については RFC 5549 - Advertising IPv4 Network Layer Reachability Information with an IPv6 Next Hop をはじめとして他にも提案されていることからも、今後IPv6のネットワークを構築するにあたってはグローバルアドレスに限らず、アドレススコープをどう組み合わせて使うかが鍵なのかなとも思った。IPv6の勉強もちゃんとしなきゃなあ…φ(.. )