GNS3+VyOSでEVPN-VXLAN
背景
自己研鑽したメモを備忘として残そうと思います。
最初はGNS3上で動かしたvyosを使ってIP CLOSを作り、vtep間でMACアドレスをBGP上広告することでToR間でL2を延伸できる?の挙動およびキャプチャデータを記録します。
「その設定イケてないよ」、「本場はこうやるよ」があればコメントほしいです。
トポロジー
環境
PC:HP ENVY
CPU: AMD Ryzen 7 4700U with Radeon Graphics
MEM: 16GB
GNS3: 2.2.51
VyOS: VyOS 1.5-rolling-202411230007
Configuration
設定メモ(日本語)
spine/vtep間はnon-addressing(ipv6 unnumbered)
spine/vtep間はebgp
spine/vtep間はipv4 loopback addrのみbgpで広告※network文を書く
vtepの設定 - bgp
# ipv4 unicastでloを広告
set protocols bgp address-family ipv4-unicast network 3.3.3.3/32
# l2vpn evpnでvniをすべて広告する
set protocols bgp address-family l2vpn-evpn advertise-all-vni
# ipv6 unnumbered設定(インタフェースでbgpを動かす)
set protocols bgp neighbor eth1 interface v6only peer-group 'fabric'
set protocols bgp neighbor eth2 interface v6only peer-group 'fabric'
set protocols bgp parameters router-id '3.3.3.3'
# 各インタフェースで適用するpeer-groupを設定
set protocols bgp peer-group fabric address-family ipv4-unicast
set protocols bgp peer-group fabric address-family l2vpn-evpn
set protocols bgp peer-group fabric remote-as 'external'
set protocols bgp system-as '64530'
vtepの設定 - vxlan
# bridgeインタフェースでsub-ifとvxlanを紐づけ
set interfaces bridge br10 member interface eth3.10
set interfaces bridge br10 member interface vxlan10010
set interfaces bridge br20 member interface eth3.20
set interfaces bridge br20 member interface vxlan10020
set interfaces bridge br30 member interface eth3.30
set interfaces bridge br30 member interface vxlan10030
# sub-ifを作る
set interfaces ethernet eth3 vif 10
set interfaces ethernet eth3 vif 20
set interfaces ethernet eth3 vif 30
# vxlanを作る(src-addr, vniはだいじ)
set interfaces vxlan vxlan10010 source-address '3.3.3.3'
set interfaces vxlan vxlan10010 vni '10010'
set interfaces vxlan vxlan10020 source-address '3.3.3.3'
set interfaces vxlan vxlan10020 vni '10020'
set interfaces vxlan vxlan10030 source-address '3.3.3.3'
set interfaces vxlan vxlan10030 vni '10030'
spineの設定 - bgp
設定はvtepとほぼ同じなのでコメントは割愛
set protocols bgp address-family ipv4-unicast network 1.1.1.1/32
set protocols bgp neighbor eth1 interface v6only peer-group 'fabric'
set protocols bgp neighbor eth2 interface v6only peer-group 'fabric'
set protocols bgp neighbor eth3 interface v6only peer-group 'fabric'
set protocols bgp parameters router-id '1.1.1.1'
set protocols bgp peer-group fabric address-family ipv4-unicast
set protocols bgp peer-group fabric address-family l2vpn-evpn
set protocols b gp peer-group fabric remote-as 'external'
set protocols bgp system-as '64520'
状態確認
vtep
# 各ノードのloopbackがbgpで見えている(Nexthopはipv6 linklocal)
vyos@vtep1:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
t - trapped, o - offload failure
B>* 1.1.1.1/32 [20/0] via fe80::ed8:e6ff:feb3:1, eth1, weight 1, 01:56:02
B>* 2.2.2.2/32 [20/0] via fe80::efa:a1ff:fe8f:1, eth2, weight 1, 00:58:55
C>* 3.3.3.3/32 is directly connected, lo, 02:00:45
B>* 4.4.4.4/32 [20/0] via fe80::ed8:e6ff:feb3:1, eth1, weight 1, 01:53:12
B>* 5.5.5.5/32 [20/0] via fe80::ed8:e6ff:feb3:1, eth1, weight 1, 01:47:18
vyos@vtep1:~$
# vtep[23]のloはマルチパスで見えている
vyos@vtep1:~$ show bgp ipv4
BGP table version is 5, local router ID is 3.3.3.3, vrf id 0
Default local pref 100, local AS 64530
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 eth1 0 0 64520 i
*> 2.2.2.2/32 eth2 0 0 64521 i
*> 3.3.3.3/32 0.0.0.0 0 32768 i
* 4.4.4.4/32 eth2 0 64521 64531 i
*> eth1 0 64520 64531 i
* 5.5.5.5/32 eth2 0 64521 64532 i
*> eth1 0 64520 64532 i
Displayed 5 routes and 7 total paths
vyos@vtep1:~$
# R1 - R2間でpingを打った後の確認結果
# R1/R2のMacAddrが見えている
vyos@vtep1:~$ show bgp l2vpn evpn
BGP table version is 6, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]:[Frag-id]
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 3.3.3.3:2
*> [2]:[0]:[48]:[ca:01:45:c0:00:00]
3.3.3.3 32768 i
ET:8 RT:64530:10010
*> [3]:[0]:[32]:[3.3.3.3]
3.3.3.3 32768 i
ET:8 RT:64530:10010
Route Distinguisher: 3.3.3.3:3
*> [2]:[0]:[48]:[ca:01:45:c0:00:00]
3.3.3.3 32768 i
ET:8 RT:64530:10020
*> [3]:[0]:[32]:[3.3.3.3]
3.3.3.3 32768 i
ET:8 RT:64530:10020
Route Distinguisher: 3.3.3.3:4
*> [2]:[0]:[48]:[ca:01:45:c0:00:00]
3.3.3.3 32768 i
ET:8 RT:64530:10030
*> [3]:[0]:[32]:[3.3.3.3]
3.3.3.3 32768 i
ET:8 RT:64530:10030
Route Distinguisher: 4.4.4.4:2
* [2]:[0]:[48]:[ca:02:3a:7c:00:00]
4.4.4.4 0 64521 64531 i
RT:64531:10020 ET:8
*> 4.4.4.4 0 64520 64531 i
RT:64531:10020 ET:8
* [3]:[0]:[32]:[4.4.4.4]
4.4.4.4 0 64521 64531 i
RT:64531:10020 ET:8
*> 4.4.4.4 0 64520 64531 i
RT:64531:10020 ET:8
Route Distinguisher: 4.4.4.4:3
*> [2]:[0]:[48]:[ca:02:3a:7c:00:00]
4.4.4.4 0 64520 64531 i
RT:64531:10030 ET:8
* 4.4.4.4 0 64521 64531 i
RT:64531:10030 ET:8
*> [3]:[0]:[32]:[4.4.4.4]
4.4.4.4 0 64520 64531 i
RT:64531:10030 ET:8
* 4.4.4.4 0 64521 64531 i
RT:64531:10030 ET:8
Route Distinguisher: 4.4.4.4:4
* [2]:[0]:[48]:[ca:02:3a:7c:00:00]
4.4.4.4 0 64521 64531 i
RT:64531:10010 ET:8
*> 4.4.4.4 0 64520 64531 i
RT:64531:10010 ET:8
* [3]:[0]:[32]:[4.4.4.4]
4.4.4.4 0 64521 64531 i
RT:64531:10010 ET:8
*> 4.4.4.4 0 64520 64531 i
RT:64531:10010 ET:8
Route Distinguisher: 5.5.5.5:2
* [3]:[0]:[32]:[5.5.5.5]
5.5.5.5 0 64521 64532 i
RT:64532:10020 ET:8
*> 5.5.5.5 0 64520 64532 i
RT:64532:10020 ET:8
Route Distinguisher: 5.5.5.5:3
*> [3]:[0]:[32]:[5.5.5.5]
5.5.5.5 0 64520 64532 i
RT:64532:10030 ET:8
* 5.5.5.5 0 64521 64532 i
RT:64532:10030 ET:8
Route Distinguisher: 5.5.5.5:4
*> [3]:[0]:[32]:[5.5.5.5]
5.5.5.5 0 64520 64532 i
RT:64532:10010 ET:8
* 5.5.5.5 0 64521 64532 i
RT:64532:10010 ET:8
Displayed 15 out of 24 total prefixes
vyos@vtep1:~$
パケットキャプチャの記録
MP_REACH_NLRIでNextHopが3.3.3.3であることが分かる
MP_REACH_NLRIでEVPN NLRIであることが確認できる
RDが3.3.3.3:4であることが確認できる
VNI10030のMAC Addressがca01.45c0.0000であることが確認できる
EXTENDED_COMMUNITIESでRTが64530:10030であることが確認できる
VXLANでカプセル化されていることが分かる
生のICMPパケットがUDPでカプセル化されていることが分かる(VXLANだ)
所感
OSSだけでこんなことが出来ることが、まず便利
L2ネットワークがL3の上で動くことで冗長性を持ったL2NWを容易に作り出すことができるのは非常に便利
remote-as external便利、個別設定不要はかなりうれしい
IPv6 Unnumberedも便利、P2PのIPアサイン不要(=addressing不要)+IPv6上でIPv4 Unicast通信ができることも非常に便利
カプセル化するときの機器への負荷、気になる
(商用運用となる場合、頭の良い機器=高価な機器が必要となる?)L2VPN EVPNのbgp tableの読み方難しい。
おすすめの解説サイトとあれば教えてほしい。