写在前面
你是否有打通异地的大二层需求选择什么方案而纠结?你是否还在为各种大二层 VPN 的组网工具不被专业路由设备支持而懊恼?
此篇的目的就是如何在 multicast 和 broadcast 不可用的情况下 ,通过 BGP EVPN 的方式打通多地的多个二层网络(VXLAN over WireGuard/IPSec/etc)。
也算是针对今年年初所配置的东西的一个总结和复习。
平时大家听过的 BGP 用的最多的是负责 IP 层的控制平面,主要传递的是路由和下一跳的信息和路由的各种属性。在 BGP EVPN(Ethernet Virtual Private Network) 中则是负责以太网层的控制平面,主要传递的则是 MAC 地址和其对应的 VTEP。
既然是 BGP ,我们也可以配合 OSPF 等动态路由协议进行多条路的选择和自动 failover,构建一个多地的大二层网络也非常的方便,网内也可在不同地区配置多个路由反射器(route reflector),以减少 iBGP 会话(session)的数量,减少故障发生的可能性。BGP 自身也可以进行过滤的操作,可以进行更严格的控制。
这种组网的方式也被绝大多数专业路由设备所支持,并且可以不依赖第三方服务。
在开始之前,我们仍然推荐读者先了解 VXLAN 的基础。可以查阅下方参考资料的第二个链接,本篇中不再重复。
Note: 如果想要简单一些的打通二层的组网工具的话,可以考虑使用 ZeroTier 和 Tinc,只要有 Linux 就可以用了,把接口往需要的地方一桥接,就 OK 了。
环境介绍
路由反射器使用 Alpine Linux 3.18,路由器 使用 Debian 12,均采用 FRRouting 8.5.2。
VNI 使用 100 和 200。
包括两个 VTEP,两个路由反射器。
本地回环地址就加到 dummy 接口上了,也是 rt1 和 rt2 各自的 VTEP IP。
目的是将 Region1 和 Region2 的 VM1 和 VM2,VM3 和 VM4 各自的二层网络打通。
IP 地址规划:
Router 正排,Route Reflector 反排。
名称 |
IP/Prefix |
evpn-rt1 loopback |
192.168.224.1/32 |
evpn-rt2 loopback |
192.168.224.2/32 |
evpn-rr1 loopback |
192.168.224.254/32 |
evpn-rr2 loopback |
192.168.224.253/32 |
WireGuard Iface |
169.254.1.0/30 |
br-rr1 |
169.254.2.0/30 |
br-rr2 |
169.254.3.0/30 |
iBGP session 采用 ASN 为 65001。
图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
+---------------------------+(br-rr1) (br-rr2)+---------------------------------+
| Region1: +----(RR1) (RR2)----+ Region2: |
| +-----+(vni100) | | +------+ (vni100) |
| | vm1 +-----+ (bridged) | | (bridged)+----+ vm2 | |
| +-----+ | +--------+| |+-------+ | +------+ |
| +-----+ +-+ VTEP 1 =+=======(VXLAN over WireGuard)======+= VTEP 2+-+ +------+ |
| | vm3 +-----+ +--------+| (WireGuard iface uses 169.254/30) |+-------+ +----+ vm4 | |
| +-----+(vni200) | | +------+ (vni200) |
+---------------------------+ +---------------------------------+
抽象出来则是:
+---------------------------------+ +----------------------------------+
|vm1 <----> br100 <---> vxlan100 <+===================+> vxlan100 <---> br100 <----> vm2 |
|vm3 <----> br200 <---> vxlan200 <+===================+> vxlan200 <---> br200 <----> vm4 |
+---------------------------------+ +----------------------------------+
|
本次假定 WireGuard 隧道已经配置完毕,过程涵盖 OSPF 和 iBGP 的配置。
正文
OSPF 部分
配置各自的 Loopback 接口
对于 evpn-rt1:
1
2
|
ip link add dummy2 type dummy
ip link set dummy2 up
|
此处的 dummy 接口为承载 loopback 地址所用,可在接口设定之时使用 ip addr add 192.168.224.1/32 dev dummy2
手动加上 loopbck 地址,也可使用 frr 的 zebra 在接口设定之时配置上地址。
其余节点照葫芦画瓢即可。
配置各自节点的 OSPFv2
此处我们使用 IPv4 作为 VTEP IP,就使用 OSPFv2 了。
先编辑 /etc/frr/daemons
,将 bgpd 和 ospfd 改为 yes 以启用 bgpd 和 ospfd。
再进入 vtysh 配置 OSPF 的 router-id,接口和 cost,导入内核时设定的src地址。
此处为 evpn-rt1 配置 OSPFv2。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
ip router-id 192.168.224.1
!
interface br-rr1
! set transport address for br-rr1
ip address 169.254.2.1/30
ip ospf area 0
ip ospf cost 1
exit
!
interface dummy2
! set loopback address for dummy interface
ip address 192.168.224.1/32
ip ospf area 0
ip ospf passive
exit
!
interface vxlan-wg
! set transport address for vxlan-wg
ip address 169.254.1.1/30
ip ospf area 0
ip ospf cost 10
exit
!
router ospf
ospf router-id 192.168.224.1
exit
!
ip prefix-list ospf-routes seq 5 permit 192.168.224.0/24 ge 24
!
route-map ospf-vxlan permit 10
match ip address prefix-list ospf-routes
! set source address for ospf routes
set src 192.168.224.1
exit
!
ip protocol ospf route-map ospf-vxlan
!
|
其余的 evpn-rt2, evpn-rr1, evpn-rr2 节点照葫芦画瓢即可。
配置完成之后我们可以用这个检查:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
evpn-rt1# show ip ospf route
============ OSPF network routing table ============
N 169.254.1.0/30 [10] area: 0.0.0.0
directly attached to vxlan-wg
N 169.254.2.0/30 [1] area: 0.0.0.0
directly attached to br-rr1
N 169.254.3.0/30 [11] area: 0.0.0.0
via 169.254.1.2, vxlan-wg
N 192.168.224.1/32 [1] area: 0.0.0.0
directly attached to dummy2
N 192.168.224.2/32 [11] area: 0.0.0.0
via 169.254.1.2, vxlan-wg
N 192.168.224.254/32 [2] area: 0.0.0.0
via 169.254.2.2, br-rr1
N 192.168.224.253/32 [12] area: 0.0.0.0
via 169.254.1.2, vxlan-wg
============ OSPF router routing table =============
============ OSPF external routing table ===========
evpn-rt1# show ip fib ospf
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
O>* 192.168.224.2/32 [110/11] via 169.254.1.2, vxlan-wg, weight 1, 00:07:51
O>* 192.168.224.254/32 [110/2] via 169.254.2.2, br-rr1, weight 1, 00:04:21
O>* 192.168.224.253/32 [110/12] via 169.254.1.2, vxlan-wg, weight 1, 00:06:03
evpn-rt1# quit
root@evpn-rt1:~# ip r
default via 192.168.80.1 dev lan onlink
10.196.0.0/24 dev mgmt-vnc proto kernel scope link src 10.196.0.1
169.254.1.0/30 dev vxlan-wg proto kernel scope link src 169.254.1.1
169.254.2.0/30 dev br-rr1 proto kernel scope link src 169.254.2.1
192.168.20.0/24 dev br0 proto kernel scope link src 192.168.20.3 linkdown
192.168.80.0/24 dev lan proto kernel scope link src 192.168.80.5
192.168.224.2 nhid 66 via 169.254.1.2 dev vxlan-wg proto ospf src 192.168.224.1 metric 20
192.168.224.254 nhid 64 via 169.254.2.2 dev br-rr1 proto ospf src 192.168.224.1 metric 20
192.168.224.253 nhid 66 via 169.254.1.2 dev vxlan-wg proto ospf src 192.168.224.1 metric 20
|
可以看到,所有路由器的环回地址都进入了 OSPF 了,并已正确导入 FIB 。
BGP EVPN 部分
配置 VXLAN 和 bridge 接口
因为实际上是 evpn-rt1 和 evpn-rt2 作流量的转发,我们在这两个上配置接口即可。
我们将会在 rt1 上开两个 bridge 接口,br100 给 vm1 , br200 给 vm3。rt2 上也将 br100 给 vm2 ,br200 给 vm4,并且分别创建 vni 为 100 和 200 的 VXLAN 接口,并将它们分别加到 br100 和 br200 上。
1
2
3
4
5
6
7
8
|
pic:
+-----------------------------------------------------+
|+---------+ +------------+ +=|======>>>>>
|| | (vnet1) | | +------------+ |
|| VM 1 +---------+ br100 +----+ VXLAN100 ==|======>>>>> (forward traffic)
|+---------+ +------------+ +------------+ |
| Hypervisor VTEP +=|======>>>>>
+-----------------------------------------------------+
|
具体步骤:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
lo_addr=192.168.224.1
for vni in 100 200; do
# create bridge
ip link add br${vni} type bridge
# create VXLAN interface with corresponding vni
ip link add vxlan${vni} type vxlan \
local ${lo_addr} \
dstport 4789 \
id ${vni} \
nolearning
# attach VXLAN interface to bridge
ip link set vxlan${vni} master br${vni} addrgenmode none
ip link set vxlan${vni} type bridge_slave neigh_suppress on learning off
ip link set vxlan${vni} up
ip link set br${vni} up
done
|
加完接口之后,我们可以用 show interface 来检查。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
evpn-rt1# show interface vxlan100
Interface vxlan100 is up, line protocol is up
Link ups: 1 last: 2023/07/23 17:50:49.98
Link downs: 3 last: 2023/07/23 17:50:49.97
vrf: default
index 45 metric 0 mtu 1500 speed 4294967295
flags: <UP,BROADCAST,RUNNING,MULTICAST>
Type: Ethernet
HWaddr: 8e:d9:0c:54:15:a5
Interface Type Vxlan
Interface Slave Type Bridge
VxLAN Id 100 VTEP IP: 192.168.224.1 Access VLAN Id 1
Master interface: br100
protodown: off
evpn-rt1# show interface vxlan200
Interface vxlan200 is up, line protocol is up
Link ups: 1 last: 2023/07/23 17:50:50.00
Link downs: 3 last: 2023/07/23 17:50:49.99
vrf: default
index 47 metric 0 mtu 1500 speed 4294967295
flags: <UP,BROADCAST,RUNNING,MULTICAST>
Type: Ethernet
HWaddr: 9a:9c:c6:80:ad:d4
Interface Type Vxlan
Interface Slave Type Bridge
VxLAN Id 200 VTEP IP: 192.168.224.1 Access VLAN Id 1
Master interface: br200
protodown: off
|
可以看到 frr 已经正确识别到 vxlan100 和 vxlan200 各自加到了 br100 和 br200 上,并且 VTEP IP 也已经正确配置。
此时 BGP 会话尚未建立,我们可以检查一下 vm1 加到 br100 接口上的网卡:
1
2
3
4
5
6
7
8
|
evpn-vm1:~# ping ff02::1%eth0
PING ff02::1%eth0 (ff02::1%2): 56 data bytes
64 bytes from fe80::5054:ff:fe35:e985: seq=0 ttl=64 time=0.149 ms
64 bytes from fe80::68b8:8fff:fea2:5609: seq=0 ttl=64 time=0.535 ms (DUP!)
^C
--- ff02::1%eth0 ping statistics ---
1 packets transmitted, 1 packets received, 1 duplicates, 0% packet loss
round-trip min/avg/max = 0.149/0.342/0.535 ms
|
可以看到,vm1 的接口上,目前整个大二层中只有它自己和物理机上的 br100。
配置 FRR
路由反射器(Route Reflector)
此处给 evpn-rr1
配置,evpn-rr2
也可类比配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
router bgp 65001
bgp router-id 192.168.224.254
bgp log-neighbor-changes
no bgp default ipv4-unicast
bgp cluster-id 192.168.224.254
bgp route-reflector allow-outbound-policy
neighbor vxlan-rrclient peer-group
neighbor vxlan-rrclient remote-as 65001
neighbor vxlan-rrclient update-source 192.168.224.254
neighbor vxlan-rrclient capability extended-nexthop
! allow 192.168.224.0/24 to automatically establish sessions.
bgp listen range 192.168.224.0/24 peer-group vxlan-rrclient
!
address-family l2vpn evpn
neighbor vxlan-rrclient activate
neighbor vxlan-rrclient route-reflector-client
advertise-all-vni
exit-address-family
exit
!
|
路由器(Router)
此处只需要将所有路由器都配置到连接到路由反射器(route reflector)即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
router bgp 65001
bgp router-id 192.168.224.1
no bgp default ipv4-unicast
neighbor vxlan-rr peer-group
neighbor vxlan-rr remote-as 65001
neighbor vxlan-rr update-source 192.168.224.1
neighbor vxlan-rr capability extended-nexthop
! Route reflectors placed here
neighbor 192.168.224.254 peer-group vxlan-rr
neighbor 192.168.224.253 peer-group vxlan-rr
!
address-family l2vpn evpn
neighbor vxlan-rr activate
advertise-all-vni
exit-address-family
exit
!
|
配置完成之后,我们可以在 evpn-rt1 上检查一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
evpn-rt1# show bgp sum
L2VPN EVPN Summary (VRF default):
BGP router identifier 192.168.224.1, local AS number 65001 vrf-id 0
BGP table version 0
RIB entries 7, using 1344 bytes of memory
Peers 2, using 1449 KiB of memory
Peer groups 1, using 64 bytes of memory
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc
192.168.224.254 4 65001 21 14 0 0 0 00:02:49 6 6 N/A
192.168.224.253 4 65001 25 19 0 0 0 00:08:48 6 6 N/A
Total number of neighbors 2
evpn-rt1# show evpn mac vni all
VNI 200 #MACs (local and remote) 2
Flags: N=sync-neighs, I=local-inactive, P=peer-active, X=peer-proxy
MAC Type Flags Intf/Remote ES/VTEP VLAN Seq #'s
52:54:00:5f:23:da remote 192.168.224.2 0/0
52:54:00:0c:a5:24 local vnet20 0/0
VNI 100 #MACs (local and remote) 2
Flags: N=sync-neighs, I=local-inactive, P=peer-active, X=peer-proxy
MAC Type Flags Intf/Remote ES/VTEP VLAN Seq #'s
52:54:00:29:ce:c0 remote 192.168.224.2 0/0
52:54:00:35:e9:85 local vnet19 0/0
|
我们也可以通过下述方法检查发送的 MAC + VTEP 信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
evpn-rt1# show bgp l2vpn evpn
BGP table version is 9, local router ID is 192.168.224.1
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: 192.168.224.1:2
*> [3]:[0]:[32]:[192.168.224.1]
192.168.224.1 32768 i
ET:8 RT:65001:100
Route Distinguisher: 192.168.224.1:3
*> [2]:[0]:[48]:[52:54:00:0c:a5:24]
192.168.224.1 32768 i
ET:8 RT:65001:200
*> [3]:[0]:[32]:[192.168.224.1]
192.168.224.1 32768 i
ET:8 RT:65001:200
Route Distinguisher: 192.168.224.2:2
*>i[3]:[0]:[32]:[192.168.224.2]
192.168.224.2 0 100 0 i
RT:65001:100 ET:8
* i 192.168.224.2 0 100 0 i
RT:65001:100 ET:8
Route Distinguisher: 192.168.224.2:3
*>i[3]:[0]:[32]:[192.168.224.2]
192.168.224.2 0 100 0 i
RT:65001:200 ET:8
* i 192.168.224.2 0 100 0 i
RT:65001:200 ET:8
Displayed 5 out of 7 total prefixes
|
以及使用 bridge
工具查看对应信息是否已经插入了桥的转发数据库(FDB)。
1
2
3
|
root@evpn-rt1:~# bridge fdb show dev vxlan100 | grep dst
00:00:00:00:00:00 dst 192.168.224.2 self permanent
52:54:00:29:ce:c0 dst 192.168.224.2 self extern_learn
|
可以看到 frr 已经正确给 kernel 提供了信息。
我们可以上 evpn-vm1
验证一下 vxlan100 的连通性。
1
2
3
4
5
6
7
8
9
10
|
evpn-vm1:~# ping ff02::1%eth0
PING ff02::1%eth0 (ff02::1%2): 56 data bytes
64 bytes from fe80::5054:ff:fe35:e985: seq=0 ttl=64 time=0.308 ms
64 bytes from fe80::68b8:8fff:fea2:5609: seq=0 ttl=64 time=0.863 ms (DUP!)
64 bytes from fe80::d0dc:61ff:fecd:44e9: seq=0 ttl=64 time=1.674 ms (DUP!)
64 bytes from fe80::5054:ff:fe29:cec0: seq=0 ttl=64 time=2.276 ms (DUP!)
^C
--- ff02::1%eth0 ping statistics ---
1 packets transmitted, 1 packets received, 3 duplicates, 0% packet loss
round-trip min/avg/max = 0.308/1.280/2.276 ms
|
可以看到, evpn-vm1 所接的 br100 已与另一个 region 的 br100 和 vm2 打通。
我们再来看 evpn-vm3
验证一下 vxlan200 的连通性。
1
2
3
4
5
6
7
8
9
10
|
evpn-vm3:~# ping ff02::1%eth0
PING ff02::1%eth0 (ff02::1%2): 56 data bytes
64 bytes from fe80::5054:ff:fe0c:a524: seq=0 ttl=64 time=0.297 ms
64 bytes from fe80::3c93:ebff:feaf:393a: seq=0 ttl=64 time=1.078 ms (DUP!)
64 bytes from fe80::9431:83ff:fe41:4e73: seq=0 ttl=64 time=1.886 ms (DUP!)
64 bytes from fe80::5054:ff:fe5f:23da: seq=0 ttl=64 time=1.975 ms (DUP!)
^C
--- ff02::1%eth0 ping statistics ---
1 packets transmitted, 1 packets received, 3 duplicates, 0% packet loss
round-trip min/avg/max = 0.297/1.309/1.975 ms
|
evpn-vm3 所接的 br200 已与另一个 region 的 br200 和 vm4 打通。
至此, 整个的流程就走完了。
接下来就是快乐的 cheatsheet 时间!
Cheatsheet: /etc/frr/frr.conf
- 路由器(Routers)的配置文件:使用
evpn-rt1
作为示例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
frr version 8.5.2
frr defaults traditional
hostname evpn-rt1
service integrated-vtysh-config
!
ip router-id 192.168.224.1
!
interface br-rr1
ip address 169.254.2.1/30
ip ospf area 0
ip ospf cost 1
exit
!
interface dummy2
ip address 192.168.224.1/32
ip ospf area 0
ip ospf passive
exit
!
interface vxlan-wg
ip address 169.254.1.1/30
ip ospf area 0
ip ospf cost 10
exit
!
router bgp 65001
bgp router-id 192.168.224.1
no bgp default ipv4-unicast
neighbor vxlan-rr peer-group
neighbor vxlan-rr remote-as 65001
neighbor vxlan-rr update-source 192.168.224.1
neighbor vxlan-rr capability extended-nexthop
neighbor 192.168.224.254 peer-group vxlan-rr
neighbor 192.168.224.253 peer-group vxlan-rr
!
address-family l2vpn evpn
neighbor vxlan-rr activate
advertise-all-vni
exit-address-family
exit
!
router ospf
ospf router-id 192.168.224.1
exit
!
ip prefix-list ospf-routes seq 5 permit 192.168.224.0/24 ge 24
!
route-map ospf-vxlan permit 10
match ip address prefix-list ospf-routes
set src 192.168.224.1
exit
!
ip protocol ospf route-map ospf-vxlan
!
|
- 路由反射器(route reflectors)的配置文件:
使用
evpn-rr1
作为示例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
frr version 8.5.1
frr defaults traditional
hostname evpn-rr1
log syslog informational
!
ip router-id 192.168.224.254
!
interface dummy2
ip address 192.168.224.254/32
ip ospf area 0
ip ospf passive
exit
!
interface eth1
ip address 169.254.2.2/30
ip ospf area 0
ip ospf cost 1
exit
!
router bgp 65001
bgp router-id 192.168.224.254
bgp log-neighbor-changes
no bgp default ipv4-unicast
bgp cluster-id 192.168.224.254
bgp route-reflector allow-outbound-policy
neighbor vxlan-rrclient peer-group
neighbor vxlan-rrclient remote-as 65001
neighbor vxlan-rrclient update-source 192.168.224.254
neighbor vxlan-rrclient capability extended-nexthop
bgp listen range 192.168.224.0/24 peer-group vxlan-rrclient
!
address-family l2vpn evpn
neighbor vxlan-rrclient activate
neighbor vxlan-rrclient route-reflector-client
advertise-all-vni
exit-address-family
exit
!
router ospf
ospf router-id 192.168.224.254
exit
!
ip prefix-list ospf-routes seq 5 permit 192.168.224.0/24 ge 24
!
route-map ospf-vxlan permit 10
match ip address prefix-list ospf-routes
set src 192.168.224.254
exit
!
ip protocol ospf route-map ospf-vxlan
!
|
Fixup: MTU 问题的(有点坏的)解决方式(2024.04)
实际使用了一段时间之后,发现跨 Site 时 Route Server 发送的路由,接收端接收不全,并且会出现 flap 的现象。随后请教了群友,得到了以下的解决方式:
一句话总结,大概就是 WireGuard 内套一层 GRE 隧道,GRE 隧道配上 ignore-df + nopmtudisc 即可。
之后就是 GRE Tunnel 的 local 和 remote 配上 WireGuard 内的传输地址。GRE MTU 设置为 9000+,GRE 内配上 ptp 地址之后跑 OSPF 就好。
于是就变成了 VXLAN over GRE over WireGuard。WireGuard 负责隧道加密,GRE 负责 igndf+nopmtudisc,VXLAN 最后。
命令大概就长这样:
ip link add $IFACE type gre local 169.254.44.1 remote 169.254.44.2 nopmtudisc ignore-df
如果路过的大佬有更优雅的解决方式,欢迎评论区提出。(物理拉线是不可能的,绝对是不可能的,我也想物理拉线,呜呜呜)
参考资料
本篇用到的
- Vincent Bernat - VXLAN: BGP EVPN with FRR
- FRRouting - Docs - EVPN
补充资料
- Fun with veth-devices, Linux bridges and VLANs in unnamed Linux network namespaces – IV
- Vincent Bernat - VXLAN & Linux
补充说明
- WireGuard 接口、与路由反射器连接的接口,都要记得配上ptp地址作为传输地址喔,本例 cheatsheet 使用的是 169.254.x.x/30 地址。
- frr 的 interface 设定中可以加上 ip address 来让 zebra 设定地址,或者自行在开接口的时候设定也是可以的。
- 承载 loopback address 接口的 dummy 接口设定为了 passive,因为并不需要往这个接口上发 ospf hello。
- frr 对于 evpn route-map 中 match evpn vni 似乎暂时不可用了。具体可见 Github issues。(2024.04)
结尾
此篇文章很大程度上依赖了 Vincent Bernat 的博文,以及感谢 Kusakabe Shi 对此方面示例配置文件的给出,以及群友的指教。
其实还有一点我还是没有写出,就是 VXLAN 接口加到 Linux Bridge 上之后在 bridge 上开启 bridge vlan filtering。之后在 bridge 上进行 tag/untag 之类的操作,这样在 vni 很多的时候就可以不用一个 vni 开一个 bridge了,比较遗憾。如果有读者感兴趣的话可以阅读补充资料,可以很大程度上起到帮助。
下一篇可能会写(水)这个?