JANOG51ではNETCONの委員として問題を作成したので解説します!
ここでは私が作成した3問のうちLevel 3-2の回答をしようと思います。
その他の2問はこちら。
・Level 1-3
・Level 1-5
Level 3-2 問題内容
問題文
あなたは自宅でMPLSネットワークを運用しています。
ASNが重複した拠点Aと拠点Bで疎通できるようにする必要があります。
ネットワークエンジニアであるあなたは疎通できるように設定を投入してみましたが、
拠点Aと拠点B間で疎通ができません。
原因を特定するとともに是正しましょう。
達成条件
- RT1-AのloopbackからRT1-B/RT2-B/RT3-Bのloopbackに疎通できるようになること (下記記載のコマンド)
- 各拠点内のloopback同士の通信は常にその拠点内IGPで完結すること(RT[123]-B間の通信はMPLS網を通ってはいけない)
- 適切にECMPされていること
- 原因を特定して疎通ができなかった理由を述べること
# RT1-Aで実行
ping 10.2.0.1 source 10.1.0.1
ping 10.2.0.2 source 10.1.0.1
ping 10.2.0.3 source 10.1.0.1
問題制約
AD値の変更は不可
問題概要
この問題はSR-MPLSに関する問題で、何らかの原因で拠点間の通信ができない点を是正する問題です。
今回のNETCON問題の中では難度が高く、開催期間内での正解者は3名でした。
(実はこの問題最初はもう少し簡単にしていたのですが、Day0の時点で他の問題が全て解かれていたため、Day1の公開直前に少し難易度を上げる調整を行なっています)
ここからは問題について解説してきます。
問題解説
今回の問題では拠点Aと拠点BのLoopbackの疎通が取れず、原因を調査し是正する作業が必要です。
疎通が取れなかった理由として下記の二つの問題がありました。
・Segment Routing Prefix SIDの重複
・Site-of-Originの重複
これらの問題が解消することでLoopbackの経路が各拠点に広報され疎通できるようになります。
まずは構成の確認から、それぞれの原因と機能まで確認してみます。
構成
今回の問題ではIS-ISが動いているネットワーク上でSegment Routingが動作しており、データプレーンはラベル転送というSR-MPLSの構成となっています。
MPLSは他にもシグナリングプロトコルとしてLDP/RSVPなどを使う場合もありますが、
今回の問題ではIS-ISでラベル情報をやり取りしています。
拠点間ではSR-MPLSを用いたL3VPNでvpnv4経路の交換を行い、VRF SERVICE-Aにて拠点間の通信を行います。
それぞれの技術については探せばわかりやすい資料が見つかるのでここでは割愛します。
拠点AではCEルータが1台、拠点BではCEルータが2台存在します。
また、問題にあるように、AS番号が重複した拠点をMPLS網で繋げる必要があります。
BGPは通常Loop防止のためAS_PATHに自AS番号が含まれる場合は受け入れません。
そのため何らかの対応が必要になります。この問題ではその対応は既に実施済で2つの設定を行なっています。
・CEルータにてallowas-in
・PEルータにてas-path-loopcheck out disable
同じAS番号からの経路を受信する方法としてCEでallowas-inする方法とMPLS網でas-overideする方法があります。今回はCEでallowas-inしています。
しかし今回の問題で使われているIOS-XRではもう一つの罠があります。
AS_PATHの先頭が広報先のAS番号と同じ場合、経路を広報しないという動作があります。
広報するためにas-path-loopcheck out disableを設定しています。
# CEルータ(cEOS)
router bgp 65001
neighbor <neighbor> allowas-in 3
# PEルータ(IOS-XR)
router bgp 65000
vrf SERVICE-A
address-family ipv4 unicast
as-path-loopcheck out disable
Site-of-Originの重複
今回の問題で是正が必要なSite-of-Originの重複について解説します。
まず、PEルータ(RT1-Pのみ抜粋)のBGPの状態も確認してみます。
全てEstabしています。
RP/0/RP0/CPU0:RT1-P#show bgp neighbor brief
Neighbor Spk AS Description Up/Down NBRState
10.255.255.2 0 65000 RT2-P 13:20:53 Established
10.255.255.3 0 65000 RT3-P 13:20:52 Established
10.255.255.4 0 65000 RT4-P 13:20:44 Established
RP/0/RP0/CPU0:RT1-P#show bgp vrf SERVICE-A neighbors brief
Neighbor Spk AS Description Up/Down NBRState
10.1.255.2 0 65001 RT1-A 04:24:54 Established
次に経路を確認してみます。
GlobalなRIBはIS-ISにより学習した経路、
vrf SERVICE-AのRIBには拠点ABのLoopbackの経路が含まれています。
RP/0/RP0/CPU0:RT1-P#show route
Gateway of last resort is not set
C 10.255.0.0/30 is directly connected, 13:25:17, GigabitEthernet0/0/0/1
L 10.255.0.1/32 is directly connected, 13:25:17, GigabitEthernet0/0/0/1
C 10.255.0.4/30 is directly connected, 13:25:17, GigabitEthernet0/0/0/2
L 10.255.0.5/32 is directly connected, 13:25:17, GigabitEthernet0/0/0/2
i L1 10.255.0.8/30 [115/20] via 10.255.0.2, 13:24:46, GigabitEthernet0/0/0/1
[115/20] via 10.255.0.18, 13:24:46, GigabitEthernet0/0/0/3
i L1 10.255.0.12/30 [115/20] via 10.255.0.6, 13:24:46, GigabitEthernet0/0/0/2
[115/20] via 10.255.0.18, 13:24:46, GigabitEthernet0/0/0/3
C 10.255.0.16/30 is directly connected, 13:25:17, GigabitEthernet0/0/0/3
L 10.255.0.17/32 is directly connected, 13:25:17, GigabitEthernet0/0/0/3
i L1 10.255.0.20/30 [115/20] via 10.255.0.2, 13:24:46, GigabitEthernet0/0/0/1
[115/20] via 10.255.0.6, 13:24:46, GigabitEthernet0/0/0/2
L 10.255.255.1/32 is directly connected, 13:25:20, Loopback0
i L1 10.255.255.2/32 [115/20] via 10.255.0.18, 13:24:46, GigabitEthernet0/0/0/3
i L1 10.255.255.3/32 [115/20] via 10.255.0.2, 13:24:56, GigabitEthernet0/0/0/1
i L1 10.255.255.4/32 [115/20] via 10.255.0.6, 13:24:46, GigabitEthernet0/0/0/2
C 100.64.0.0/10 is directly connected, 13:25:17, MgmtEth0/RP0/CPU0/0
L 100.64.0.4/32 is directly connected, 13:25:17, MgmtEth0/RP0/CPU0/0
RP/0/RP0/CPU0:RT1-P#show route vrf SERVICE-A
Gateway of last resort is not set
B 10.1.0.1/32 [20/0] via 10.1.255.2, 13:23:39
C 10.1.255.0/30 is directly connected, 13:25:22, GigabitEthernet0/0/0/0
L 10.1.255.1/32 is directly connected, 13:25:22, GigabitEthernet0/0/0/0
B 10.2.0.1/32 [200/0] via 10.255.255.3 (nexthop in vrf default), 13:23:35
B 10.2.0.2/32 [200/0] via 10.255.255.4 (nexthop in vrf default), 13:23:35
B 10.2.0.3/32 [200/0] via 10.255.255.3 (nexthop in vrf default), 13:23:35
[200/0] via 10.255.255.4 (nexthop in vrf default), 13:23:35
次に拠点内の各ルータに入って現状を確認します。
問題で疎通するLoopbackが設定されているルータに入って経路を確認してみます。
拠点BではCEルータでBGPをOSPFに再配送しています。
RT1-A#show ip route
C 10.1.0.1/32 is directly connected, Loopback0
C 10.1.255.0/30 is directly connected, Ethernet1
C 10.1.255.4/30 is directly connected, Ethernet2
C 100.64.0.0/10 is directly connected, Management0
RT3-B#show ip route
O 10.2.0.1/32 [110/20] via 10.2.255.9, Ethernet1
O 10.2.0.2/32 [110/20] via 10.2.255.13, Ethernet2
C 10.2.0.3/32 is directly connected, Loopback0
C 10.2.255.8/30 is directly connected, Ethernet1
C 10.2.255.12/30 is directly connected, Ethernet2
C 100.64.0.0/10 is directly connected, Management0
拠点内のルータには対向拠点の経路は存在しないことがわかります。
つまり、PEルータの経路には問題がなく、PE→CEの広報で何らかの問題があることがわかります。
PEルータの設定を確認してみます。
CE向けの設定をみてみるとroute-policyやsite-of-originが設定されています。
router bgp 65000
vrf SERVICE-A
rd 65000:10
address-family ipv4 unicast
maximum-paths ibgp 2
as-path-loopcheck out disable
!
neighbor 10.1.255.2
remote-as 65001
description RT1-A
address-family ipv4 unicast
route-policy PERMIT_ALL in
route-policy PERMIT_ALL out
soft-reconfiguration inbound
site-of-origin 65000:10
!
このsite-of-originは全ルータで同じ値に設定されています。
ではこのsite-of-origin(SoO)が何なのかを調べてみると、名前の通り、拠点(site)の経路を一意に特定し、ループを防ぐBGPのコミュニティであることがわかります。
動作として、SoOが付与された経路を同じSoOの設定されたneighborに広報しないという動作になります。したがって、拠点A<=>拠点Bの経路が広報されず、CEルータで受信していないことがわかります。
ではそれを削除すればいいのでは?というのはこの問題の「拠点内IGPで完結すること」に反します。
今回の構成はCEルータが2台のマルチホーム構成であることがわかります。
つまりRT1-Bから広報された経路がMPLS網を通過して、RT2-Bに到達することができるということです。
AristaのAD値はCiscoと異なるためOSPFが優先されますが、この問題ではAD値を揃えてあり、
OSPFとBGPではBGPが優先されます。これを防ぐためにもSoOの設定は必須になります。
したがって、拠点A/Bで異なるSoOを設定することが一つ目の是正対象です。
また、拠点Aはマルチホームではないため、拠点Aだけ設定を削除も正解としています。
また、SoOの値のルールはここでは問わないため値は自由です。
# SoOが付与された経路の確認
RP/0/RP0/CPU0:RT3-P#show bgp vrf SERVICE-A 10.1.0.1
Fri Jan 27 05:03:21.028 UTC
BGP routing table entry for 10.1.0.1/32, Route Distinguisher: 65000:10
Versions:
Process bRIB/RIB SendTblVer
Speaker 8 8
Last Modified: Jan 26 15:03:41.766 for 13:59:39
Paths: (2 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65001, (received & used)
10.255.255.1 (metric 20) from 10.255.255.1 (10.255.255.1)
Received Label 24006
Origin IGP, localpref 100, valid, internal, best, group-best, multipath, import-candidate, imported
Received Path ID 0, Local Path ID 1, version 8
Extended community: SoO:65000:10 RT:65000:10
Source AFI: VPNv4 Unicast, Source VRF: SERVICE-A, Source Route Distinguisher: 65000:10
Path #2: Received by speaker 0
Not advertised to any peer
65001, (received & used)
10.255.255.2 (metric 20) from 10.255.255.2 (10.255.255.2)
Received Label 24006
Origin IGP, localpref 100, valid, internal, multipath, import-candidate, imported
Received Path ID 0, Local Path ID 0, version 0
Extended community: SoO:65000:10 RT:65000:10
Source AFI: VPNv4 Unicast, Source VRF: SERVICE-A, Source Route Distinguisher: 65000:10
# 回答例
# RT3-P/RT4-Pにてコンフィグを変更
router bgp 65000
vrf SERVICE-A
neighbor 10.1.255.2
address-family ipv4 unicast
- site-of-origin 65000:10
+ site-of-origin 65000:20
!
Segment Routing Prefix SIDの重複
ここまでの設定で経路の交換ができるようになりました。
RT1-Aの経路を確認とPingを実行します。
RT1-A#show ip route
Gateway of last resort is not set
C 10.1.0.1/32 is directly connected, Loopback0
C 10.1.255.0/30 is directly connected, Ethernet1
C 10.1.255.4/30 is directly connected, Ethernet2
B E 10.2.0.1/32 [20/0] via 10.1.255.1, Ethernet1
via 10.1.255.5, Ethernet2
B E 10.2.0.2/32 [20/0] via 10.1.255.1, Ethernet1
via 10.1.255.5, Ethernet2
B E 10.2.0.3/32 [20/0] via 10.1.255.1, Ethernet1
via 10.1.255.5, Ethernet2
C 100.64.0.0/10 is directly connected, Management0
RT1-A#ping 10.2.0.1 source 10.1.0.1
PING 10.2.0.1 (10.2.0.1) from 10.1.0.1 : 72(100) bytes of data.
From 10.1.255.5 icmp_seq=1 Destination Net Unreachable
--- 10.2.0.1 ping statistics ---
5 packets transmitted, 0 received, +1 errors, 100% packet loss, time 31ms
経路は受信できているが、Pingは失敗します。
Segment Routingでは特定のPrefixまでの最短経路のことをPrefix Segmentと呼び、そのセグメントに対してSRドメインでユニークなSIDが割り当てらます。
その中でも特定のノードを示すSIDであるNode SIDというものが存在し、Prefix Segmentなのでグローバルでユニークである必要があります。
この値はSRGB(SR Global Block)内から決定され、ベンダー毎にデフォルトは異なりますがIOS-XRは16000から始まり、コンフィグ設定時は絶対値、またはSRGBの最初からのindexで設定することができます。
上記の前提をもとに、IS-ISで交換されたラベルのテーブルを確認してみます。
RP/0/RP0/CPU0:RT1-P#show isis segment-routing label table
Sun Jan 29 14:14:52.471 UTC
IS-IS ISIS-1 IS Label Table
Label Prefix/Interface
---------- ----------------
16001 Loopback0
label conflict: 16001 10.255.255.2/32
label conflict: 16001 10.255.255.4/32
label conflict: 16001 10.255.255.3/32
RT1-Pではloopback0にprefix-sid index 1を設定しており、このPrefix SIDはSRGB + indexとして、
16001となります。
ここで気になるのは各ノード宛のLabelがconflictしているとの表示。
Prefix SIDはグローバルでユニークである必要があるため、おかしい。
他のRTのコンフィグを確認してみると、全てsidがindex 1に設定されています。
RP/0/RP0/CPU0:RT1-P# show run | i prefix
prefix-sid index 1
RP/0/RP0/CPU0:RT2-P# show run | i prefix
prefix-sid index 1
RP/0/RP0/CPU0:RT3-P# show run | i prefix
prefix-sid index 1
RP/0/RP0/CPU0:RT4-P# show run | i prefix
prefix-sid index 1
RT2-P~RT4-PのNode SIDをグローバルユニークな値に変更することが2つ目の是正ポイントです。
router isis ISIS-1
interface Loopback0
address-family ipv4 unicast
- prefix-sid index 1
+ prefix-sid index <SID_index>
!
!
再度IS-ISのSR label tableやforwardingを確認してみます。
RP/0/RP0/CPU0:RT1-P#show isis segment-routing label table
Sun Jan 29 15:02:11.730 UTC
IS-IS ISIS-1 IS Label Table
Label Prefix/Interface
---------- ----------------
16001 Loopback0
16002 10.255.255.2/32
16003 10.255.255.3/32
16004 10.255.255.4/32
RP/0/RP0/CPU0:RT1-P#show mpls forwarding
Sun Jan 29 15:02:45.574 UTC
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
------ ----------- ------------------ ------------ --------------- ------------
16002 Pop SR Pfx (idx 2) Gi0/0/0/3 10.255.0.18 0
16003 Pop SR Pfx (idx 3) Gi0/0/0/1 10.255.0.2 4888
16004 Pop SR Pfx (idx 4) Gi0/0/0/2 10.255.0.6 0
24000 Pop SR Adj (idx 0) Gi0/0/0/2 10.255.0.6 0
24001 Pop SR Adj (idx 2) Gi0/0/0/2 10.255.0.6 0
24002 Pop SR Adj (idx 0) Gi0/0/0/3 10.255.0.18 0
24003 Pop SR Adj (idx 2) Gi0/0/0/3 10.255.0.18 0
24004 Pop SR Adj (idx 0) Gi0/0/0/1 10.255.0.2 0
24005 Pop SR Adj (idx 2) Gi0/0/0/1 10.255.0.2 0
24006 Unlabelled 10.1.0.0/16[V] Gi0/0/0/0 10.1.255.2 0
無事に各ノードまでのラベルが表示され、Pingも到達できるようにります
RT1-A#ping 10.2.0.3 source 10.1.0.1
PING 10.2.0.3 (10.2.0.3) from 10.1.0.1 : 72(100) bytes of data.
80 bytes from 10.2.0.3: icmp_seq=1 ttl=61 time=33.4 ms
80 bytes from 10.2.0.3: icmp_seq=2 ttl=61 time=35.9 ms
80 bytes from 10.2.0.3: icmp_seq=3 ttl=61 time=34.3 ms
80 bytes from 10.2.0.3: icmp_seq=4 ttl=61 time=36.6 ms
80 bytes from 10.2.0.3: icmp_seq=5 ttl=61 time=40.1 ms
--- 10.2.0.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 96ms
rtt min/avg/max/mdev = 33.426/36.121/40.198/2.339 ms, pipe 3, ipg/ewma 24.111/34.927 ms
以上が今回の問題の是正箇所でした。
まとめると、以下の2ヶ所の是正と共に原因について述べられてれば満点です。
router isis ISIS-1
interface Loopback0
address-family ipv4 unicast
- prefix-sid index 1
+ prefix-sid index <SID_index>
!
!
router bgp 65000
vrf SERVICE-A
neighbor 10.1.255.2
address-family ipv4 unicast
- site-of-origin 65000:10
+ site-of-origin 65000:20
!
余談1
今回の構成ではPEルータが直接PEルータとつながっており、Pルータは存在しない。
MPLSのラベル操作であるPUSH/SWAP/POPとあるが、PHPという仕組みで一つ前のホップでPOPする。一つ前のホップはPUSHするルータとなるため、ShimヘッダにはNode SIDのラベルは存在せず、隣接ルータと交換したPrefix向けのラベルのみとなる。
全体を通して
以上が、Level3-2の解説になります。
採点の基準は以下のようにしていました。
+30%: Pingが通ること
+15%: Site-of-Originについて述べられていること
+15%: SIDについて述べられていること
+20%: Site-of-originが各拠点で違う値に設定されていること
+20%: SIDが各ルータで異なる値に設定されていること
ミス解答としてLDPを新規で設定して到達性を確保する解答が多くありました。
図に記載しただけだったのでSR-MPLSを利用することがわかりにくかったかもしれません、すみません。。
また、ECMPについては各Loopbackに同一ホップで到達できればOKとしているため、
RT1-Bのlo0をRT2-Bから広報などはしなくてOKです。
(SoOを削除した際に不正解となるように意図的にそうしています。MPLS網を経由してIGPで完結できなくなるため)
MPLSはかなり奥深いようで自分も勉強中です。
今回の問題ではSoOを出題してみました。皆様の勉強のきっかけになれば幸いです。
以上、ありがとうございました!