前々回、前回はvJunos-routerでSR-MPLSを検証しましたが、今回はSRv6を検証してみます。
SRv6はIPv6拡張ヘッダーを使ったSegment Routingとなります。
例によってSRv6の詳しい説明はせず、設定と動作確認に着目して進めたいと思います。
今回は最低限のSRv6の設定をして、IPv4なCE間でSRv6 Tunnelを経由して疎通できるか確かめます。
1. SRv6 構成
物理構成はほぼ前々回の構成を流用します。
IP AddressingはIPv6のアサインも必要になります。
なので以下のようにAddressingしました。

疑似SP網には必ずしもIPv4アドレスは必要ありませんが、まあ、お約束で付与してます…。
また、疑似SP網内のIGPはIS-ISを使います。

2. SRv6 設定
では設定投入をしていきます。
まず、疑似SP網内のvJR-01~vJR-06にてお互いのLoopbackアドレスを学習するため、各ルーターでIS-ISを動かします。
一例としてvJR-01の設定だけ載せときます。
//vJR-01 set interfaces ge-0/0/1 unit 0 family iso set interfaces ge-0/0/2 unit 0 family iso set interfaces lo0 unit 0 family iso address 49.0001.0000.0000.0001.00 set protocols isis inerface ge-0/0/1.0 level 1 disable set protocols isis interface ge-0/0/2.0 level 1 disable set protocols isis interface lo0.0 passive set protocols isis level 2 wide-metrics-only
他のルーターではLo0.0のNSAPアドレスを変えるのと、動かしたいインターフェイスを追加するくらいでほぼコピペでOKです。
ちなみにSR-MPLSの時の設定と全く一緒です。
IS-ISは特に追加の設定をせずにIPv6 Prefixの広報が可能です。
次に、vJR-01とvJR-06間でCEネットワーク(111.111.111.0/24、221.221.221.0/24)の経路情報を交換するためにBGP Peeringを行います。

//vJR-01 set policy-options policy-statement CE11_v4 term 0011 from protocol direct set policy-options policy-statement CE11_v4 term 0011 from route-filter 111.111.111.0/24 exact set policy-options policy-statement CE11_v4 term 0011 then accept set policy-options policy-statement CE11_v4 term 9991 then reject set routing-options router-id 1.1.1.1 set routing-options autonomous-system 65550 set protocols bgp group INTERNAL type internal set protocols bgp group INTERNAL local-address 1:1:1::1 set protocols bgp group INTERNAL export CE11_v4 set protocols bgp group INTERNAL neighbor 6:6:6::6 family inet unicast extended-nexthop
//vJR-06 set policy-options policy-statement CE21_v4 term 0011 from protocol direct set policy-options policy-statement CE21_v4 term 0011 from route-filter 221.221.221.0/24 exact set policy-options policy-statement CE21_v4 term 0011 then accept set policy-options policy-statement CE21_v4 term 9991 then reject set routing-options router-id 6.6.6.6 set routing-options autonomous-system 65550 set protocols bgp group INTERNAL type internal set protocols bgp group INTERNAL local-address 6:6:6::6 set protocols bgp group INTERNAL export CE21_v4 set protocols bgp group INTERNAL neighbor 1:1:1::1 family inet unicast extended-nexthop
Peeringする際のアドレスはIPv6を指定します。
また、(IPv6アドレスのPeeringで)IPv4 Prefixな経路情報を広報するので「extended-nexthop」オプションが必要になります。
ここまで設定投入するとBGP PeerはUpしCEネットワークの経路情報を学習します。
ですが、まだCE間の通信はできません。
(vJR-01とvJR-06はPure IPv4パケットで転送し、vJR-02~vJR-05がCEネットワークの経路を学習していないため)
ここからいよいよSRv6の設定をしていきます。
まず、疑似SP網内の全ルーターにSRv6 SIDの一部となるlocatorを設定します。
今回、locatorは以下のとおりに定義します。
| ルーター名 | locator |
|---|---|
| vJR-01 | 539:0:0:1::/64 |
| vJR-02 | 539:0:0:2::/64 |
| vJR-03 | 539:0:0:3::/64 |
| vJR-04 | 539:0:0:4::/64 |
| vJR-05 | 539:0:0:5::/64 |
| vJR-06 | 539:0:0:6::/64 |
//vJR-01 set routing-options source-packet-routing srv6 locator LOC_01 539:0:0:1::/64
//vJR-02 set routing-options source-packet-routing srv6 locator LOC_01 539:0:0:2::/64
//vJR-03 set routing-options source-packet-routing srv6 locator LOC_01 539:0:0:3::/64
//vJR-04 set routing-options source-packet-routing srv6 locator LOC_01 539:0:0:4::/64
//vJR-05 set routing-options source-packet-routing srv6 locator LOC_01 539:0:0:5::/64
//vJR-06 set routing-options source-packet-routing srv6 locator LOC_01 539:0:0:6::/64
次に、End-SIDを設定します。
オプションのflavorはSRHをイイ感じにpopできればよく、全ルーター同じ設定としたいのでpspとusdを指定します。
End-SIDは以下のとおりに定義します。
なお、End-SIDはlocatorと同じサブネットにしないとcommitエラーになります。
| ルーター名 | End-SID |
|---|---|
| vJR-01 | 539:0:0:1:1:: |
| vJR-02 | 539:0:0:2:1:: |
| vJR-03 | 539:0:0:3:1:: |
| vJR-04 | 539:0:0:4:1:: |
| vJR-05 | 539:0:0:5:1:: |
| vJR-06 | 539:0:0:6:1:: |
//vJR-01 set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:1:1:: flavor psp set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:1:1:: flavor usd
//vJR-02 set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:2:1:: flavor psp set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:2:1:: flavor usd
//vJR-03 set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:3:1:: flavor psp set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:3:1:: flavor usd
//vJR-04 set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:4:1:: flavor psp set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:4:1:: flavor usd
//vJR-05 set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:5:1:: flavor psp set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:5:1:: flavor usd
//vJR-06 set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:6:1:: flavor psp set protocols isis source-packet-routing srv6 locator LOC_01 end-sid 539:0:0:6:1:: flavor usd
最後に、vJR-01とvJR-06にてBGP export policyに設定を追加します。
広報するCEネットワークのnext-hopをEnd-SIDとします。
next-hopをEnd-SIDとすることで、疑似SP網内にてSRv6 Tunnelを使用するようになります。
//vJR-01 set policy-options policy-statement CE11_v4 term 0011 then next-hop 539:0:0:1:1::
//vJR-06 set policy-options policy-statement CE21_v4 term 0011 then next-hop 539:0:0:6:1::
設定は以上です。
3. SRv6 確認
では確認をしていきます。
まずは最初に設定したIS-ISとBGPの設定をサラっと確認します。
//vJR-01
lab@vJR-01# run show route table inet6.0
inet6.0: 27 destinations, 27 routes (27 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
1:1:1::1/128 *[Direct/0] 00:46:22
> via lo0.0
2:2:2::2/128 *[IS-IS/18] 00:45:11, metric 10
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0
3:3:3::3/128 *[IS-IS/18] 00:41:12, metric 10
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0
4:4:4::4/128 *[IS-IS/18] 00:45:01, metric 20
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0
5:5:5::5/128 *[IS-IS/18] 00:41:02, metric 20
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0
6:6:6::6/128 *[IS-IS/18] 00:41:02, metric 30
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0
to fe80::5201:ff:fe03:1 via ge-0/0/2.0
<snip>
lab@vJR-01# run show bgp summary
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 1 Peers: 1 Down peers: 0
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet.0
1 1 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
6:6:6::6 65550 116 115 0 0 50:23 Establ
inet.0: 1/1/1/0IS-ISで各ルーターのIPv6 Loopbackアドレスを学習しており、BGP PeerがEstablishedになっているので問題なさそうですね。
それではSRv6の設定確認をしていきます。
まず、IS-IS overviewから見ていきます。
//vJR-01
lab@vJR-01# run show isis overview
<snip>
Source Packet Routing (SPRING): Enabled
Node Segments: Disabled
SRv6: Enabled
Locator: 539:0:0:1::/64, Algorithm: 0
END-SID: 539:0:0:1:1::, Flavor: PSP, USD
Post Convergence Backup: Disabled
<snip>Source Packet RoutingおよびSRv6がEnabledになっていることが確認できます。
また、設定したLocatorとEnd-SIDが確認できます。
続いて、Routing Tableを確認します。
//vJR-01
lab@vJR-01# run show route table inet6.3 | no-more
inet6.3: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
539:0:0:2::/64 *[SRV6-ISIS/14] 00:22:09, metric 10
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0, SRV6-Tunnel, Dest: 539:0:0:2::
539:0:0:2:1::/128 *[SRV6-ISIS/14] 00:16:24, metric 10
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0, SRV6-Tunnel, Dest: 539:0:0:2:1::
539:0:0:3::/64 *[SRV6-ISIS/14] 00:19:40, metric 10
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0, SRV6-Tunnel, Dest: 539:0:0:3::
539:0:0:3:1::/128 *[SRV6-ISIS/14] 00:15:30, metric 10
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0, SRV6-Tunnel, Dest: 539:0:0:3:1::
539:0:0:4::/64 *[SRV6-ISIS/14] 00:21:43, metric 20
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0, SRV6-Tunnel, Dest: 539:0:0:4::
539:0:0:4:1::/128 *[SRV6-ISIS/14] 00:14:52, metric 20
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0, SRV6-Tunnel, Dest: 539:0:0:4:1::
539:0:0:5::/64 *[SRV6-ISIS/14] 00:19:40, metric 20
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0, SRV6-Tunnel, Dest: 539:0:0:5::
539:0:0:5:1::/128 *[SRV6-ISIS/14] 00:14:17, metric 20
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0, SRV6-Tunnel, Dest: 539:0:0:5:1::
539:0:0:6::/64 *[SRV6-ISIS/14] 00:19:19, metric 30
to fe80::5201:ff:fe02:1 via ge-0/0/1.0, SRV6-Tunnel, Dest: 539:0:0:6::
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0, SRV6-Tunnel, Dest: 539:0:0:6::
539:0:0:6:1::/128 *[SRV6-ISIS/14] 00:13:19, metric 30
to fe80::5201:ff:fe02:1 via ge-0/0/1.0, SRV6-Tunnel, Dest: 539:0:0:6:1::
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0, SRV6-Tunnel, Dest: 539:0:0:6:1::inet6.3のRouting Tableにて各ルーターのlocatorとEnd-SIDを学習していますね。
ちなみに、locator Prefixは無印なIS-ISでも広報されます。
//vJR-01
lab@vJR-01# run show route table inet6.0 | no-more
inet6.0: 27 destinations, 27 routes (27 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
<snip>
539:0:0:1::/64 *[IS-IS/18] 01:22:07, metric 0
Reject
539:0:0:1:1::/128 *[IS-IS/18] 00:18:42, metric 0
Receive
539:0:0:2::/64 *[IS-IS/18] 01:20:56, metric 10
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0
539:0:0:3::/64 *[IS-IS/18] 01:16:57, metric 10
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0
539:0:0:4::/64 *[IS-IS/18] 01:20:46, metric 20
> to fe80::5201:ff:fe02:1 via ge-0/0/1.0
539:0:0:5::/64 *[IS-IS/18] 01:16:47, metric 20
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0
539:0:0:6::/64 *[IS-IS/18] 01:16:47, metric 30
to fe80::5201:ff:fe02:1 via ge-0/0/1.0
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0
<snip>SRv6を動作させてないルーターを経由させても、Routingされそうですね。
続いて、vJR-01にて(vJR-11からvJR-21宛のパケットの)宛先IPアドレスとなる221.221.221.0/24を確認します。
//vJR-01
lab@vJR-01# run show route 221.221.221.0
inet.0: 19 destinations, 19 routes (19 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
221.221.221.0/24 *[BGP/170] 00:13:01, localpref 100, from 6:6:6::6
AS path: I, validation-state: unverified
to fe80::5201:ff:fe02:1 via ge-0/0/1.0, SRV6-Tunnel, Dest: 539:0:0:6:1::
> to fe80::5201:ff:fe03:1 via ge-0/0/2.0, SRV6-Tunnel, Dest: 539:0:0:6:1::Entryが存在し、next-hopが決まっていることからパケットをForwardingしてくれそうですね。
また、"SRV6-Tunnel, Dest: 539:0:0:6::1"が出力されていることよりSRv6 TunnelにてForwardingしてくれそうです。
もう少し詳しく見ていきます。
//vJR-01
lab@vJR-01# run show route 221.221.221.0 detail | no-more
inet.0: 19 destinations, 19 routes (19 active, 0 holddown, 0 hidden)
221.221.221.0/24 (1 entry, 1 announced)
*BGP Preference: 170/-101
Next hop type: Indirect, Next hop index: 0
Address: 0x8941494
Next-hop reference count: 2
Kernel Table Id: 0
Source: 6:6:6::6
Next hop type: List, Next hop index: 1048575
Next hop: ELNH Address 0x893ce14, selected
Next hop type: Chain, Next hop index: 612
Address: 0x893ce14
Next-hop reference count: 1, Next-hop session id: 0
Kernel Table Id: 0
Next hop: via Chain Tunnel Composite, SRv6 (src 1:1:1::1 dest 539:0:0:6:1::)
Next hop: ELNH Address 0x8941214
SRV6-Tunnel: Reduced-SRH Encap-mode Remove-Last-Sid
Src: 1:1:1::1 Dest: 539:0:0:6:1::
Segment-list[0] 539:0:0:6:1::
Gateway opaque handle: 0xebf0710
Next hop type: Router, Next hop index: 609
Address: 0x8941214
Next-hop reference count: 22, Next-hop session id: 321
Kernel Table Id: 0
Next hop: fe80::5201:ff:fe02:1 via ge-0/0/1.0
<snip>Segment-listが作成されていることが確認できます。
今回はTraffic Engineeringはしないので、"Segment-list[0]"の1行だけになります。
最後にCE間で(vJR-11からvJR-21へ)Pingを飛ばして疎通確認します。
//vJR-11 lab@vJR-11# run ping 221.221.221.11 PING 221.221.221.11 (221.221.221.11): 56 data bytes 64 bytes from 221.221.221.11: icmp_seq=0 ttl=62 time=3.409 ms 64 bytes from 221.221.221.11: icmp_seq=1 ttl=62 time=3.716 ms 64 bytes from 221.221.221.11: icmp_seq=2 ttl=62 time=3.393 ms
無事、pingが飛びました!!
せっかくなので、ICMP Echo Requestパケットをキャプチャーをして見てみます。
単純なIPv4 over IPv6パケットとなってますね。Segment-list[0]のみだと、Wireshark上ではIPv6ヘッダーとして扱われるようです。
(SRH的な表示を期待していた…)

という訳でSRv6を使った通信ができました!!
次回はSRv6-TE(SRv6Traffic Engineering)を行ってみたいと思います!!!
今回は以上です。
ここまでお読みくださり、ありがとうございました!!!!
4. 参考資料
Juniper Blog Viewer - SRv6 Basics: Locator and End SIDscommunity.juniper.net
Juniper Documentation - IS-IS User Guide - Understanding SRv6 Network Programming in IS-IS Networkswww.juniper.net
Juniper Documentation - IS-IS User Guide - Example: Configuring SRv6 Network Programming in IS-IS Networkswww.juniper.net