JANOG43の発表を聞いてSRv6サービスチェイニングを試してみた
JANOG43のDAY1でSRv6についての発表を聞きました。
“SRv6でサービスチェイニングをやってみた”という発表が非常に分かりやすく、
自分もLinuxでSRv6を動かすことが出来るのではないかと思い、実際に検証を行ってみました。
動作環境
ESXi6.5
-Ubuntu18.10 (Linux Kernel 4.18) 6台
- SRv6動作マシン 4台
- クライアント/サーバ 2台(各1台)
SRv6はkernel 4.10以降で動作するとのことで、
CentOSではまだ3.x系のため、kernelをビルドし直す必要があるため、
今回はUbuntuを採用しました。
Linux Kernelの対応状況については下記を参照ください。
SRv6 とは(ざっくり)
Segment Routingは最短経路”以外”を指定することが可能です。
経由したいサービス(End)のSegment ID(SID)のリストをEdgeルータで挿入します。
※詳しくはInternet-Draftまたは、下記スライドを参照。
構成図
今回は、ワンアーム構成ではなくツーアーム構成で試しています。
動作イメージ
SRv6の設定
共通設定 (R1,R2,R3,R4)
SRv6を起動するサーバには、全て下記を設定。環境に応じて適宜書き換え。
root@srv6:/home/uchy# vim /etc/sysctl.conf
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.seg6_enabled = 1
net.ipv6.conf.default.seg6_enabled = 1
net.ipv6.conf.ens161.seg6_enabled = 1
net.ipv6.conf.ens224.seg6_enabled = 1
root@srv6:/home/uchy# sysctl -p
Client
sudo ip -6 route add fd:192:168:6::/64 via fd:192:168:1::2 dev ens192
R1(SRv6-1)
root@srv6-1:/home/uchy# vim /etc/iproute2/rt_tables
100 local1
101 local2
ip -6 route add fd:192:168:6::/64 encap seg6 mode encap segs fd:192:168:2::2,fd:192:168:4::2 dev ens224 table local1
ip -6 route add fd:192:168:6::/64 encap seg6 mode encap segs fd:192:168:3::2,fd:192:168:5::2 dev ens161 table local2
sudo ip -6 route add fd:192:168:2::1 encap seg6local action End.DX6 nh6 fd:192:168:1::1 dev ens256
sudo ip -6 route add fd:192:168:3::1 encap seg6local action End.DX6 nh6 fd:192:168:1::1 dev ens256
サービスチェイニング設定(AまたはBの設定を投入)
A: sudo ip -6 rule add from fd:192:168:1::1 table local1
B: sudo ip -6 rule add from fd:192:168:1::1 table local2
R2(SRv6-2)
sudo ip -6 route add fd:192:168:2::2 encap seg6local action End dev ens224
sudo ip -6 route add fd:192:168:4::1 encap seg6local action End dev ens192
R3(SRv6-3)
sudo ip -6 route add fd:192:168:3::2 encap seg6local action End dev ens224
sudo ip -6 route add fd:192:168:5::1 encap seg6local action End dev ens192
R4(SRv6-4)
root@srv6-4:/home/uchy# vim /etc/iproute2/rt_tables
100 local1
101 local2
sudo ip -6 route add fd:192:168:1::/64 encap seg6 mode encap segs fd:192:168:4::1,fd:192:168:2::1 dev ens224 table local1
sudo ip -6 route add fd:192:168:1::/64 encap seg6 mode encap segs fd:192:168:5::1,fd:192:168:3::1 dev ens224 table local2
sudo ip -6 route add fd:192:168:4::2 encap seg6local action End.DX6 nh6 fd:192:168:6::2 dev ens161
sudo ip -6 route add fd:192:168:5::2 encap seg6local action End.DX6 nh6 fd:192:168:6::2 dev ens161
サービスチェイニング設定(AまたはBの設定を投入)
A: sudo ip -6 rule add from fd:192:168:6::2 table local1
B: sudo ip -6 rule add from fd:192:168:6::2 table local2
※アドレスがfd00:xx::xxではなく、fd:xx::xxになっているのは見間違いです。。
SRv6の疎通性確認
Client -> R1 -> R2 -> R4 -> Serverの経路のキャプチャ
Client->R1間のキャプチャ
R1->R2間のキャプチャ
R2->R4間のキャプチャ
R4-Server間のキャプチャ
IPv6ヘッダのRouting HeaderにSIDのリストが格納されていることが分かります。
まとめ
JANOG43の発表を元にSRv6を動かして見ました。本ブログでは設定内容がほとんどでSRv6の動作の解説を特に行っていません。 詳しくはInternet-DraftやJanog43のDAY1の資料をご覧ください。とりあえず手を動かして動作を確認してみたいという方のお役に立てれば良いと思います。