「SRv6でサービスチェイニングをやってみた」の全configを載せてみた(前半)
最初に
JANOG43 (2019/1/23)にて「SRv6でサービスチェイニングをやってみた」という題名でプレゼンおよびデモを実施いたしました。
https://www.janog.gr.jp/meeting/janog43/program/sc
このデモではSpine 2台、Leaf 4台のLeaf/SpineのIP CLOS Fabricを組み、その中のトラフィック制御(サービスチェイニング)をSRv6によりコントロールできることを示しました。ここで、サービスチェイニングは以下の思想で行いました。
https://www.janog.gr.jp/meeting/janog43/program/sc
このデモではSpine 2台、Leaf 4台のLeaf/SpineのIP CLOS Fabricを組み、その中のトラフィック制御(サービスチェイニング)をSRv6によりコントロールできることを示しました。ここで、サービスチェイニングは以下の思想で行いました。
- SIDのprefixをBGPで配布
- SIDの配置はおよびサービスチェインはコントローラから中央集権的に設定
環境準備および設定ルール
デモ環境
このデモは以下の環境で実施しています。- GNS3の仮想ネットワーク上で試験環境を構築
- ルータはUbuntu18.04 + Kernel 4.15 + FRR 6.0 stable
https://github.com/frrouting/frr
IPv6アドレスおよびSIDルール
このデモでは、fd00:ffff::/32をSRv6のSID(Segment ID)用のprefixとして、fd00:0::/32を各装置のインタフェースに設定するIPv6アドレスのprefixとして使用しました。また、Leaf1~4については、Leaf番号を用いて、fd00:0:0:SRv6のSIDの割当ルール
このデモでは、SRv6のSIDを以下のように配置しました。(詳細は後半編で説明します)装置 | SRv6 function | SID |
---|---|---|
Service1 | End | fd00:ffff:0:2:1::1:1 |
Service2 | End | fd00:ffff:0:2:2::1:1 |
Leaf3 | End.DX6 | fd00:ffff:0:3::2:1 |
Leaf4 | End.DX6 | fd00:ffff:0:4::2:1 |
Leaf4 | End.DX6 | fd00:ffff:0:4::2:2 |
これらのSIDは、Leaf1がT.Encapsを実行する際に、ルーティング可能である必要があります。そのため、これらのSIDのprefixを全てBGPにより配布したいと思います。そこで、図1のように接続し、また各装置のAS番号を配置しました。
図1 装置接続とBGPのAS番号割当
FRR設定例
上記の図をもとに、各装置のFRRに以下の設定を行いました。
Leaf2
Leaf3
Leaf4
Spine1
Spine2
Service1
Service2
- Leaf1
hostname Leaf1
!
interface ens4
ipv6 address fd00:0:0:18::1/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens5
ipv6 address fd00:0:0:19::1/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens6
ipv6 address fd00::1:1:0:0:1/80
!
interface ens7
ipv6 address fd00::1:2:0:0:1/80
!
router bgp 65100
bgp router-id 1.1.1.1
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
neighbor ens5 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
hostname Leaf2
!
interface ens4
ipv6 address fd00:0:0:28::2/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens5
ipv6 address fd00:0:0:29::2/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens6
ipv6 address fd00::2:1:0:0:1/80
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens7
ipv6 address fd00::2:2:0:0:1/80
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens8
ipv6 address fd00::2:3:0:0:1/80
!
router bgp 65200
bgp router-id 2.2.2.2
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
neighbor ens5 interface peer-group FABRIC
neighbor ens6 interface peer-group FABRIC
neighbor ens7 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
hostname Leaf3
!
interface ens4
ipv6 address fd00:0:0:38::3/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens5
ipv6 address fd00:0:0:39::3/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens6
ipv6 address fd00:0:0:3::1/64
!
interface lo
ipv6 address fd00:ffff:0:3::1/64
!
router bgp 65300
bgp router-id 3.3.3.3
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
neighbor ens5 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
hostname Leaf4
!
interface ens4
ipv6 address fd00:0:0:48::4/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens5
ipv6 address fd00:0:0:49::4/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens6
ipv6 address fd00::4:1:0:0:1/80
!
interface ens7
ipv6 address fd00::4:2:0:0:1/80
!
interface lo
ipv6 address fd00:ffff:0:4::1/64
!
router bgp 65400
bgp router-id 4.4.4.4
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
neighbor ens5 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
hostname Spine1
!
interface ens4
ipv6 address fd00:0:0:89::8/64
!
interface ens5
ipv6 address fd00:0:0:18::8/64
!
interface ens6
ipv6 address fd00:0:0:28::8/64
!
interface ens7
ipv6 address fd00:0:0:38::8/64
!
interface ens8
ipv6 address fd00:0:0:48::8/64
!
router bgp 65000
bgp router-id 8.8.8.8
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
neighbor ens5 interface peer-group FABRIC
neighbor ens6 interface peer-group FABRIC
neighbor ens7 interface peer-group FABRIC
neighbor ens8 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
hostname Spine2
!
interface ens4
ipv6 address fd00:0:0:89::9/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens5
ipv6 address fd00:0:0:19::9/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens6
ipv6 address fd00:0:0:29::9/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens7
ipv6 address fd00:0:0:39::9/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface ens8
ipv6 address fd00:0:0:49::9/64
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
router bgp 65000
bgp router-id 9.9.9.9
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
neighbor ens5 interface peer-group FABRIC
neighbor ens6 interface peer-group FABRIC
neighbor ens7 interface peer-group FABRIC
neighbor ens8 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
hostname Service1
!
interface ens4
ipv6 address fd00::2:1:0:0:11/80
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface lo
ipv6 address fd00:ffff:0:2:1::1/80
!
router bgp 65210
bgp router-id 2.1.1.1
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
hostname Service2
!
interface ens4
ipv6 address fd00::2:2:0:0:11/80
ipv6 nd ra-interval 10
no ipv6 nd suppress-ra
!
interface lo
ipv6 address fd00:ffff:0:2:2::1/80
!
router bgp 65220
bgp router-id 2.1.2.2
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
ここで、Service 1, 2はEndに割り当てるSID(FD00:FFFF:0:2:1::/80およびFD00:FFFF:0:2:2::/80)のルーティング情報を配布する必要があります。ですので、Service 1, 2でも、BGPを動かして自装置のルーティング情報を広告させるようにしました。
設定のポイント
BGP Unnumberedの使用
今回はBGP Unnumberedを使用しましたので、peeringのneighborのアドレスを明示的に指定する必要はありません。例えば、Leaf1のBGPの設定は以下の通りです。router bgp 65100
bgp router-id 1.1.1.1
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor FABRIC peer-group
neighbor FABRIC remote-as external
neighbor FABRIC capability extended-nexthop
neighbor ens4 interface peer-group FABRIC
neighbor ens5 interface peer-group FABRIC
!
address-family ipv6 unicast
redistribute connected
neighbor FABRIC activate
exit-address-family
!
そのため、各装置に対して以下を変えて同様にBGPの設定をすれば良いことになります。
- AS番号
- router id
- peeringを実施するインタフェース
BGPルーティングの配布方法
BGPによるnetworkの配布については、"redistribute connected"を使用しました。これによって、自装置のインタフェースに設定したアドレスのprefixもBGPによるルーティング情報の配布対象になります。例えば、Leaf4には以下の通り、ens6(App2に接続), ens7(App3に接続)、lo(SIDのprefixの配布用)にアドレスを設定することで、BGPにてこれらのnetworkのprefixが配布されます。interface ens6
ipv6 address fd00::4:1:0:0:1/80
interface ens7
ipv6 address fd00::4:2:0:0:1/80
interface lo
ipv6 address fd00:ffff:0:4::1/64 ★SIDのprefixを広告するためにloopbackインタフェースに設定
BGPルーティングの確認
このように設定することで、Leaf1側でIPv6のルーティングの情報を確認すると以下の通りとなります。Leaf1# show ipv6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng,
O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR,
> - selected route, * - FIB route
C>* fd00:0:0:1:1::/80 is directly connected, ens6, 00:57:29
C>* fd00:0:0:1:2::/80 is directly connected, ens7, 00:57:28
B>* fd00:0:0:2:1::/80 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:2:2::/80 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:2:3::/80 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:3::/64 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:4:1::/80 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:4:2::/80 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
C>* fd00:0:0:18::/64 is directly connected, ens4, 00:57:28
C>* fd00:0:0:19::/64 is directly connected, ens5, 00:57:28
B>* fd00:0:0:28::/64 [20/0] via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:29::/64 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:27
B>* fd00:0:0:38::/64 [20/0] via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:39::/64 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:27
B>* fd00:0:0:48::/64 [20/0] via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:0:0:49::/64 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:27
B>* fd00:0:0:89::/64 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:ffff:0:2:1::/80 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:ffff:0:2:2::/80 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:ffff:0:3::/64 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
B>* fd00:ffff:0:4::/64 [20/0] via fe80::eeb:d2ff:fe81:9f02, ens5, 00:57:26
* via fe80::eeb:d2ff:fe75:2302, ens4, 00:57:26
C * fe80::/64 is directly connected, ens4, 00:57:28
C * fe80::/64 is directly connected, ens6, 00:57:28
C * fe80::/64 is directly connected, ens5, 00:57:28
C * fe80::/64 is directly connected, ens7, 00:57:29
C>* fe80::/64 is directly connected, ens3, 00:57:32
特に、以下のSRv6用のprefixがBGPにより広告されていることがポイントとなります。
- fd00:ffff:0:2:1::/80 Service1
- fd00:ffff:0:2:2::/80 Service2
- fd00:ffff:0:3::/64 Leaf3
- fd00:ffff:0:4::/64 Leaf4
Leaf1# ping fd00:ffff:0:2:1::1
PING fd00:ffff:0:2:1::1(fd00:ffff:0:2:1::1) 56 data bytes
64 bytes from fd00:ffff:0:2:1::1: icmp_seq=1 ttl=62 time=0.684 ms
Leaf1# ping fd00:ffff:0:2:2::1
PING fd00:ffff:0:2:2::1(fd00:ffff:0:2:2::1) 56 data bytes
64 bytes from fd00:ffff:0:2:2::1: icmp_seq=1 ttl=62 time=0.661 ms
Leaf1# ping fd00:ffff:0:3::1
PING fd00:ffff:0:3::1(fd00:ffff:0:3::1) 56 data bytes
64 bytes from fd00:ffff:0:3::1: icmp_seq=1 ttl=63 time=0.573 ms
Leaf1# ping fd00:ffff:0:4::1
PING fd00:ffff:0:4::1(fd00:ffff:0:4::1) 56 data bytes
64 bytes from fd00:ffff:0:4::1: icmp_seq=1 ttl=63 time=0.597 ms
しかし、SIDに割り当てるIPv6アドレスは各装置のインタフェースには設定しておりません。ですので、例えばService1に配置するEndのfd00:ffff:0:2:1::1:1に対してpingを実施しても反応はありませんので注意が必要です。
Leaf1:~$ ping fd00:ffff:0:2:1::1:1
PING fd00:ffff:0:2:1::1:1(fd00:ffff:0:2:1:0:1:1) 56 data bytes
--- fd00:ffff:0:2:1::1:1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4082ms
Leaf1:~$
これで、SRv6によるサービスチェイニングを実施するための、BGPルーティングの準備が完了しました。
最後に
今回は、SRv6によるサービスチェイニングを実施するにあたり、前段階としてのBGPの設定について説明いたしました。SIDの割当と、SRv6のサービスチェイニングの実験方法については、次回に説明いたします。