← 記事一覧

同じルーター、3 つの異なる真実

1 台の物理筐体、複数のルーティング上の身元、そしてノードとエッジのグラフではそれを収められない理由

Michel Wijnberg

このシリーズの最初の 4 本は信頼についてでした。ネットワークを正しくモデル化し、安全 に観測し、転送を正直に再現し、推測を拒む。今回からは第 2 の束が始まります。その線を守り 続けるために実際に何が必要か、という話です。

そしてそれは、たいていのトポロジーツールが面白い問いにたどり着く前に転んでしまう、この 一点から始まります。ルーターはひとつのものではありません。


何もかもが 2 つあるルーター

こちらは私のラボの nrt1-cr1 です。

nrt1-cr1 のデバイスパネル。OSPFv2 と OSPFv3 に別々の ABR·ASBR バッジが付いている
nrt1-cr1 のデバイスパネル。OSPFv2 と OSPFv3 に別々の ABR·ASBR バッジが付いている

右上を見てください。ロールバッジはひとつではありません。2 つです。

OSPFv2   ABR·ASBR
OSPFv3   ABR·ASBR

そしてその下、Protocols & Areas には次のようにあります。

プロトコルインスタンスエリアロール
OSPFv2 · プロセス 1 (ipv4)0.0.0.014.18.20.0ABR · ASBR
OSPFv3 · プロセス 1 (ipv6)0.0.0.014.18.20.0ABR · ASBR

重複に見えます。違います。これは 2 つの独立したプロトコルインスタンスであり、2 つの独立し たリンクステートデータベースを持ちます。nrt1-cr1 は、そのインスタンスの中で複数の エリアに接続していることによって、それぞれ別個に ABR の称号を得ています。エリアのラベ ルが一致しているのは、誰かが一致するように採番したからであって、同じオブジェクトだからで はありません。データベース上では UUID が異なります。OSPFv2 のエリア 14.18.20.0 と OSPFv3 のエリア 14.18.20.0 は、たまたま名前を共有している別のエリアだからです。

この区別は、両者が食い違うまでは杓子定規に聞こえます。そして分かってみれば、両者は必ず食 い違います。


1 本の線、2 つのコスト、100 パーセントの確率で

こちらは 2 台のルーターのあいだの物理リンク 1 本です。

lax1-gw1 から lax1-gw2 へのリンクパネル。Physical、OSPFv2、OSPFv3 のタブとそれぞれ異なるコスト
lax1-gw1 から lax1-gw2 へのリンクパネル。Physical、OSPFv2、OSPFv3 のタブとそれぞれ異なるコスト

ケーブル 1 本。Et0/3 から Et0/3 へ、10G、172.24.2.13/30 fddb:10:24:2::6/127 の両方を運んでいます。Osprey はこれを 1 本のエッジとして描きます。物 理的に 1 本のエッジだからです。そのうえでプロトコルごとにタブを与えます。

ではコストを読んでみてください。

OSPFv2   Area 12.1.24.0   cost 10
OSPFv3   Area 12.1.24.0   cost 1

同じ線。同じエリア番号。異なるメトリック。

スクリーンショットのために演出したわけではありません。あとから AS 200 のデュアルスタックリ ンクをすべて調べたところ、単独の例よりも興味深い結果になりました。

AS 200 のデュアルスタックリンク124
…うち OSPFv2 と OSPFv3 のコストが異なるもの124(100%)
(v2 = 10, v3 = 1) のもの85
(v2 = 10000, v3 = 10) のもの39

1 本残らず異なっていますが、2 つのグループに注目してください。39 本は 1000 倍の開き、85 本 は 10 倍の開きです。この非対称性こそが面白いところで、説明するにはルーターに聞く必要があり ました。

Routing Process "ospf 1"     Reference bandwidth unit is 100000 mbps
Routing Process "ospfv3 1"   Reference bandwidth unit is 100 mbps

設定はひとつであって、2 つではありません。コストは参照帯域をインターフェース帯域で割ったも のなので、両プロセスは同じ線を、ちょうど 1000 倍違う数でスケーリングしていることになります。 10 Mbps のリンクではその差がそのまま出ます。10000 対 10 です。10 Gbps のリンクでは OSPFv3 が 100/10000 = 0.01 と計算しますが、ルーターが広告できる最小コストは 1 です。下限が残りを飲み 込みます。

つまりこの歪みは一様ではありません。そして、まさにそれが危険なのです。一様なスケーリング なら無害です。トポロジー内のすべてのコストを同じ定数倍しても、最短経路は動きません。ここでは 定数が、あるリンクでは 1000、別のリンクでは 10 になります。クランプが介入したからです。した がって 2 つのプロトコルは同じリンク群を互いに異なる順位で並べ、IPv4 と IPv6 のトラフィック はこのネットワークを別々の経路で通りうることになります。どれがそうなるかは目視では分かりま せん。両方を計算するしかありません。

「1 リンク、1 コスト」を描くツールは、その 2 つの数字のどちらかを選ばなければなりません。どち らを選んでも半分は間違いであり、しかもあなたがいまどちらの半分にいるのかを教えてくれることは 決してありません。


階層が荷重を支えている理由

これが、Osprey のデータモデルが NodeEdgeProtocol ではない理由です。

Network → Autonomous System → Routing Domain → Protocol Instance → Area → Device
                                                                      ↳ Interface

各レベルが存在するのは、ネットワークの中でそのレベルをまたいで異なりうるものがあるからです。

  • Network:テナント境界。同じ物理筐体を、異なる認証情報と異なるビューで、2 つのテナント の下から監視できます。
  • Autonomous System:BGP としての身元であり、BMP フィードが属するスコープです。
  • Routing Domain:グローバルテーブル、VRF、あるいは L3VPN。同じルーターで、異なるルーティ ングテーブル、本当に異なる到達性です。
  • Protocol Instance:(ルーティングドメイン、プロトコル、プロセス ID、アドレスファミリ) で一意。nrt1-cr1 を 2 台のルーターにしているのがこのレベルです。
  • Area:LSDB が実際に存在する場所であり、したがって SPF が実際に走る場所です。
  • Device:メンバーシップテーブルを介してエリアと多対多。外部キーではありません。外部キー なら「ルーターはひとつのエリアに住む」という嘘を強いていたはずです。

そしてインターフェースは (device_id, if_index, area_id) でスコープされます。同じ物理ポート が複数のプロトコルインスタンスに同時に参加し、それぞれで異なるコスト、異なるネイバー状態、異 なるアドレスファミリを持つからです。

導出されるロールは、ラベルとして保存されるのではなく、この構造から自然に出てきます。

  • ABR = あるインスタンスの中で複数のエリアに接続している
  • ASBR = ルーター自身の LSA で E ビットが立っていること(RFC 2328 §A.4.2)。すなわち、外 部ルーティング情報を生成するとルーター自身が述べていること。メンバーシップの数ではありませ ん。単一エリアに住みながら ASBR であることもあれば、複数インスタンスにまたがりながら ASBR でないこともあります
  • VRF-Lite = 複数のルーティングドメインに存在する

だからこそ nrt1-cr1 は 2 度 ABR になれますし、バッジも 2 つ描かれます。誰も「ABR」とどこか に打ち込んではいません。それはメンバーシップの帰結であり、LSDB から再計算されたものです。


トポロジーはすべて同時に本物です

これを考えるうえで役に立つのは、唯一のトポロジーなど存在しない、という捉え方です。トポロ ジーは複数あり、すべて同時に真であり、それぞれ別の問いに答えます。

トポロジー構築元答えるもの
物理LLDP / CDP、IP-MIB何が何とケーブルでつながっているか
L2ブリッジ/VLAN 隣接何が同じブロードキャストドメインを共有しているか
IGP(インスタンスごと)プロトコルごと・エリアごとの LSDB各プロトコルが何を信じているか
BGPBMP の RIB何に、誰を経由して到達できるか
転送各ルーター自身のテーブルパケットが実際にどこへ行くか

「A と B はつながっているか」には、どれを指して言ったかによって 5 つの異なる正解があります。 2 台のルーターがケーブルを共有していて IGP 隣接がないこともあります。IGP 隣接があってパケット を互いに転送しないこともあります。どちらからも見えない 3 台の機器を経由する経路で BGP ピアで あることもあります。

第 3 回は実のところ、この表の下 2 行についての議論でした。IGP トポ ロジーと転送トポロジーは同じグラフではなく、ひとつとして扱うと 8 回に 1 回は架空の経路が出て くる、という話です。今回はその議論をひとつ下の層で繰り返しています。物理トポロジーと プロトコルトポロジーもまた同じグラフではなく、私のラボの 124 本のリンクが 10 倍という係数 でそれを証明しています。


これの代償

ここで正直でいることはタダではありません。次のことを意味します。

  • 単純なツールが 1 つ歩けば済むところで、LSDB を 2 つ歩く
  • 外部キーではなくメンバーシップテーブル
  • ロールを保存するのではなく再計算する
  • すべてのパスクエリが、どのインスタンスのどのアドレスファミリについて聞かれているのかを知る 必要がある
  • リンクに数字ひとつではなくタブ列を出さなければならない UI

もう一方の選択肢は、描画が速く、デモ映えがよく、そしてあなたのネットワークのすべてのデュアル スタックリンクで 2 つのコストのうち片方を黙って選ぶグラフです。

IPv4 と IPv6 のパスが分岐していたのに何か月も誰も気づかなかったネットワークを、私は運用したこ とがあります。壁に掛かったどのツールも、2 台のルーターのあいだに線を 1 本描いていたからです。 その線は間違ってはいませんでした。ただ、誰も尋ねていない問いに答えていただけです。


次回は、これらの情報源が真っ向から矛盾したときに何が起こるかについて: ネットワークが自分自身と食い違うとき

Osprey は自社運用型のネットワーク可視化・エンジニアリング基盤です。32 台まで無料でお試しいただけます。他の記事を読むこともできます。