以下の内容はhttps://yokohama539.hatenablog.com/entry/2025/06/08/035632より取得しました。


vJunosでSegment Routingしてみた。~SRv6編その1~

前々回前回は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/0

IS-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




以上の内容はhttps://yokohama539.hatenablog.com/entry/2025/06/08/035632より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14