📘

Segment Routing(SID被った場合の挙動)をお兄さんと一緒に見てみよう

2020/10/07に公開

はじめに

この記事はシスコの同志による Advent Calendar の一部として投稿しています

今年度から入社したので一発目緊張しながら書いてますが
夏ぐらいから書きたいネタだったので書きます。
初めに少し前提知識を書いていきますが、Segment Routing知ってるしそんなのいらないという人は
本編まで飛ばしてください。

Segment Routingとは

ネットワークをSegmentという単位で表してそのSegmentを利用してRoutingして
パケットを転送しようとするものです。
概念自体は5~6年前からあった気がします。
Segment Routing特有の大切な言葉としてSIDというものが存在しています。
この言葉を解説したものが次のURLにあるので気になる人は見てください。
SIDについて

#本編
今回はNode SIDが被った時の処理を確認します。
そもそもコンフィグなどで設定するSIDのindex値は、ただの整数値なので間違えて入れちゃったなんてこともありそうな気がします。

NodeSID

簡単にいえばloopbackを示す特別なprefix-SIDのこと
意味的にはNodeのことを指し示すことが多い。
Node SIDはIGPのPrefix SIDです。
ユニークな値ではないといけない。

それでは今回のネットワーク図を確認していきましょう
<img width="810" alt="スクリーンショット 2019-04-17 18.23.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314181/26de62ed-d1aa-aeed-9fee-300cca4791d8.png">

今回はMPLSネットワークを作成しました。
役割的には
R1~R4 P
R5~R6 PE
CE-A1~CE-B2 CE
の役割を果たしています。
想定ではA社とB社がそれぞれMPLSなネットワークを利用して論理的には独立しているネットワークになっています。

では各ルーターのNodeSIDです。
R1 1001
R2 1002
R3 1003
R4 1004
R5 1005
R6 1006

まずCE-A1のLoopback0からCE-A2のLoopbackに対してpingをうってみます。

<img width="529" alt="スクリーンショット 2019-11-28 14.13.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314181/92c030fd-a704-6dbc-1593-ad996d1964ae.png">

特に問題がないので通ります。
続いてSIDを変更します。
<img width="463" alt="スクリーンショット 2019-11-28 14.25.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314181/ac764ae9-4db8-70bc-fd3c-17f8d57bfa07.png">

途中で間違えまくってますが気にしないでください。
個人的な意見になるんですが router ospf 1の配下とかにinterfaceを適用させるのって
毎回間違えるのでわかりにくいですね。
これでR5 1006 R6 1006になりました。
ではまたCE-A1のLoopback0からCE-A2のLoopbackに対してpingをうってみます。
<img width="553" alt="スクリーンショット 2019-11-28 15.55.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314181/c04da04a-e53d-1f01-55e1-99731c2c4eeb.png">

通らなくなりました。

これってどういう処理が起きているんでしょうか?
draftを見ていきましょう。
draft

読んでみるとSIDが競合した場合いくつかのルールがありそのルールに乗っ取って
どちらかを有効にする判定がされているみたいです。
ではルールを見ていきましょう(ここは翻訳しただけです)
競合を解決するための優先規則

競合が検出された場合は、次のアルゴリズムを使用して、
優先マッピング・エントリー。順番に評価する
が指定されました。接頭辞の競合が最初に評価されます。SIDの競合は次のとおりです。
プレフィックスの衝突後に残っているアクティブなエントリを評価します。
が解決されました。

1.高い優先度値が優先される
2.小さな範囲の勝利
3.IPv6エントリがIPv4エントリよりも優先されます
4.より長いプレフィックス長が勝ちます
5.小さい開始アドレス (符号なし整数と見なされる)
6.小さなアルゴリズムが勝つ
7.開始SIDが小さいほど勝つ
8.トポロジIDが同一でない場合、両方のエントリを無視しなければなりません

では今回の場合はどちらが優先されたのでしょうか?
結果から見ればR5が優先されていました。
<img width="322" alt="スクリーンショット 2019-11-28 16.06.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314181/d02a487a-4db0-7708-b1c0-00738c722d69.png">

<img width="338" alt="スクリーンショット 2019-11-28 16.06.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314181/0c936c15-6610-6312-bc9a-c8ce07b3a108.png">

R6が経路に入った瞬間おかしくなっていました。
今回はより小さい開始アドレスを持っていたR5が判定で勝ったと考えています。(本当はよく分かってないです。教えてください。)

最後に

まだdraft読んでもわからないことが多いので勉強します。
小さなアルゴリズムが勝つの部分や分かってないことあるので
今月中に第二弾の記事書きます
しばらくお待ちください。

Discussion