Linuxで SRv6 End.DT4 functionがサポートされたが情報があまり公開されていないため、
利用方法をまとめてみました。
SRv6 End.DT4とは
SRv6ルーターのエンドポイントノードが SRヘッダーを外して、そのルーターの指定された VRF RIBをルックアップして送信する Endpointファンクションである。
End.DX4の場合、コネクテッドな IPv4 Next-hopしか送信できないため、(ルーティングテーブルを参照しない)より柔軟な構成が可能である。
Build Linux kernel & iproute2
Ubuntu20.04 Linux kernel ビルド
Linuxの End.DT4は vrf strict modeの有効化が必要なため、CONFIG_NET_VRFが有効化されたカーネルが必要がある。
Ubuntu20.04の genericカーネルでは有効化されていないため、ビルドし直す必要がある。
以下のページのカーネルビルド方法を参考に、カーネルのビルド設定ファイル .config
の CONFIG_NET_VRFを有効に変更してビルドする。
(CONFIG_NET_VRF=y)
# vi .config
CONFIG_NET_VRF=y
iproute2最新版インストール
iproute2 を最新版をインストールする。
設定
細かい基礎設定は省きます。
Router A
ip route add default encap seg6 mode encap segs fd01:b::1 dev ens192
ip -6 route add fd01:a::1 encap seg6local action End.DX4 nh4 192.168.0.2 dev ens224
Router B
vrf strict modeを有効にする。
# sysctl -wq net.vrf.strict_mode=1
End.DT4は vrftableしか lookupできないので、vrfを作成する。
ip link add vrf100 type vrf table 100
ip link set vrf100 up
ip link set dev ens224 master vrf100
ip route add default via 192.168.1.1 table 100
ip route list vrf vrf100
ip route add 192.168.0.2 encap seg6 mode encap segs fd01:a::1 dev ens192 table 100
ip -6 route add fd01:b::1 encap seg6local action End.DT4 vrftable 100 dev ens192