Skip to content

Commit f8b9601

Browse files
authored
Document undesired interactions between EVPN and VRF routing protocols (#2519)
While #2477 waits for a resolution, the best we can do is document what needs to be done to get things to work.
1 parent 117debc commit f8b9601

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

docs/module/evpn.md

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Ethernet Virtual Private Network (evpn) Configuration Module
1+
# Ethernet Virtual Private Network (EVPN) Configuration Module
22

33
This configuration module configures the BGP EVPN address family to implement L2VPN or L3VPN. It supports:
44

@@ -19,7 +19,7 @@ This configuration module configures the BGP EVPN address family to implement L2
1919

2020
## Platform Support
2121

22-
The following table describes per-platform support of individual EVPN/VXLAN features:
22+
The following table describes the per-platform support of individual EVPN/VXLAN features:
2323

2424
| Operating system | VLAN-based<br>service | VLAN Bundle<br>service | Asymmetric<br>IRB | Symmetric<br>IRB |
2525
| ------------------ | :-: | :-: | :-: | :-: |
@@ -35,14 +35,14 @@ The following table describes per-platform support of individual EVPN/VXLAN feat
3535
| vJunos-switch [](caveats-vjunos-switch) |||||
3636
| VyOS |||||
3737

38-
The following table describes per-platform support of individual EVPN/MPLS features:
38+
The following table describes the per-platform support of individual EVPN/MPLS features:
3939

4040
| Operating system | VLAN-based<br>service | VLAN Bundle<br>service | Asymmetric<br>IRB | Symmetric<br>IRB |
4141
| ------------------ | :-: | :-: | :-: | :-: |
4242
| Arista EOS |||||
4343

4444
```{note}
45-
* Arista EOS requires anycast gateway for EVPN/MPLS symmetric IRB configuration.
45+
* Arista EOS requires an anycast gateway for EVPN/MPLS symmetric IRB configuration.
4646
```
4747

4848
Devices supporting [EVPN VLAN bundle services](evpn-bundle-service) implement the following bundle service types (see RFC 7432 section 6 for more details):
@@ -70,7 +70,7 @@ EVPN module supports IBGP- and EBGP-based EVPN:
7070

7171
With additional nerd knobs ([more details](evpn-weird-designs)), it's possible to implement the more convoluted designs, including:
7272

73-
* IBGP EVPN AF session established between loopback interfaces advertised with underlay EBGP IPv4 AF
73+
* IBGP EVPN AF session established between loopback interfaces, advertised with underlay EBGP IPv4 AF
7474
* EBGP EVPN AF session established between loopback interfaces advertised with underlay EBGP IPv4 AF (requires **ebgp.multihop** plugin)
7575

7676
| Operating system | IBGP over<br>EBGP | EBGP<br>over EBGP |
@@ -110,7 +110,7 @@ EVPN module supports these default/global/node parameters:
110110

111111
* **evpn.transport** (global): Transport to use, `vxlan` (default) or `mpls`
112112
* **evpn.vrfs** (global or node parameter): A list of EVPN-enabled VRFs. The default value with VXLAN transport: all global VRFs with **evpn.transit_vni** parameter. There is no default value with MPLS transport.
113-
* **evpn.vlans** (global or node parameter): A list of EVPN-enabled VLANs. The default value with VXLAN transport: all global VLANs with **vni** parameter. There is no default value with MPLS transport.
113+
* **evpn.vlans** (global or node parameter): A list of EVPN-enabled VLANs. The default value with VXLAN transport: all global VLANs with the **vni** parameter. There is no default value with MPLS transport.
114114
* **evpn.session** (global or node parameter): A list of BGP session types on which the EVPN address family is enabled (default: `ibgp`)
115115
* **evpn.as** (global parameter): Autonomous system number for VLAN and VRF route targets. Default value: **bgp.as** (when set globally) or **vrf.as**.
116116
* **evpn.start_transit_vni** (system default parameter) -- the first symmetric IRB transit VNI, range 4096..16777215
@@ -128,7 +128,7 @@ EVPN-related VLAN parameters are set on the **vlans** dictionary. You can set th
128128
EVPN configuration module sets the following default EVI/RD/RT values for EVPN-enabled VLANs that are not part of a bundle service:
129129

130130
* **evpn.evi**: `vlan-id`
131-
* **evpn.rd**: `router-id:evi` (according to Section 7.9 of RFC 7432 as the **evpn.evi** is set to **vlan.id**)
131+
* **evpn.rd**: `router-id:evi` (according to Section 7.9 of RFC 7432, as the **evpn.evi** is set to **vlan.id**)
132132
* **evpn.import** and **evpn.export**: `as:vlan-id` (according to Section 7.10 of RFC 7432 and Section 5.1.2.1 of RFC 8365)[^EAS]
133133

134134
[^EAS]: The AS number used in EVPN route targets is described in [](evpn-global-parameters).
@@ -164,7 +164,7 @@ The **evpn.transit_vni** parameter must specify a globally unique VNI value. It
164164
(evpn-asymmetric-irb)=
165165
## Asymmetric IRB
166166

167-
Asymmetric IRB is a forwarding paradigm in which the ingress PE device performs routing between source and destination VLAN followed by EVPN bridging. The egress PE device bridges between EPVN transport (VXLAN or MPLS pseudowire) and destination VLAN.
167+
Asymmetric IRB is a forwarding paradigm in which the ingress PE device performs routing between the source and destination VLANs, followed by EVPN bridging—the egress PE device bridges between EVPN transport (VXLAN or MPLS pseudowire) and the destination VLAN.
168168

169169
To make asymmetric IRB work, all EVPN-enabled VLANs participating in a routing domain must be present on all participating PE devices. The EVPN configuration module strictly enforces that requirement; every EVPN-enabled VLAN belonging to a VRF that uses asymmetric IRB must be present on every node on which the parent VRF is defined.
170170

@@ -190,7 +190,7 @@ groups:
190190
```
191191

192192
```{tip}
193-
Disable OSPF in a VRF using asymmetric IRB unless you connected external router(s) to one of the participating VLANs
193+
Disable routing protocols in a VRF using asymmetric IRB unless you connected external router(s) to one of the participating VLANs (see also [](evpn-rp))
194194
```
195195

196196
(evpn-weird-designs)=
@@ -200,3 +200,22 @@ Implementing mainstream EVPN designs (IBGP+IGP, EBGP) with _netlab_ topologies i
200200

201201
* **IBGP-over-EBGP** design assigns the same BGP AS number to all nodes (triggering IBGP EVPN sessions) and uses **bgp.local_as** on links to force EBGP sessions between adjacent nodes. Furthermore, you must limit the activation of IPv4 address family to EBGP sessions, and turn off IBGP-without-IGP warning ([sample topology](https://github.com/ipspace/netlab/blob/dev/tests/integration/evpn/12-vxlan-ibgp-ebgp.yml))
202202
* **EBGP-over-EBGP** design uses **[ebgp.multihop](plugin-ebgp-multihop)** plugin to establish additional EBGP sessions between device loopbacks. You have to activate EVPN AF on multihop EBGP sessions and limit IPv4 AF to direct EBGP sessions ([sample topology](https://github.com/ipspace/netlab/blob/dev/tests/integration/evpn/14-vxlan-ebgp-ebgp.yml)).
203+
204+
Before using any design involving EBGP, please read [](evpn-rp).
205+
206+
(evpn-rp)=
207+
## Interactions with Routing Protocols
208+
209+
Like the [VXLAN case](vxlan-rp), _netlab_ enables all routing protocols configured on a node on EVPN-controlled VLANs.
210+
211+
That could result in severe routing instabilities. You should turn off routing protocols on EVPN-controlled VLANs (use a setting similar to **vlans._name_.ospf: False**), put EVPN-controlled VLANs in a VRF, or make them layer-2-only VLANs with **vlan.mode** set to **bridge**.
212+
213+
If you're using EVPN to implement symmetrical IRB (**evpn.transit_vni** is set in a VRF), turn off routing protocols in the VRF unless you use the VRF to connect to CE-routers. Otherwise, the routers establish in-VRF IGP adjacencies over extended VLANs and use in-VRF IGP routes instead of EVPN routes for end-to-end connectivity.
214+
215+
If you want to implement an EVPN L3VPN with CE-routers, use separate segments (not VXLAN-backed VLANs) for PE-CE connectivity. There is no way to block the establishment of PE-to-PE in-VRF IGP adjacencies if you expect to have the PE-CE IGP adjacencies on a VXLAN-backed VLAN.
216+
217+
Finally, if you use EBGP with EVPN (simple EBGP, IBGP-over-EBGP, or EBGP-over-EBGP design), the PE devices have different AS numbers, and _netlab_ tries to establish VRF EBGP sessions between them whenever they share a VLAN. To prevent the formation of VRF EBGP sessions between the PE devices:
218+
219+
* Use EVPN as a pure L3VPN (no stretched VLAN-over-VXLAN segments);
220+
* Disable BGP in the EVPN-controlled VRFs with a setting similar to **vrfs._tenant_vrf_.bgp: False**;
221+
* If you want to use BGP as the PE-CE routing protocol with stretched VLANs, disable BGP on stretched VLAN segments with a setting similar to **vlans._stretched_vlan_.bgp: False**.

docs/module/vxlan.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
(module-vxlan)=
12
# VXLAN Configuration Module
23

34
This configuration module configures the VXLAN data plane, VLAN-to-VXLAN mapping, and static head-end replication.
@@ -101,6 +102,7 @@ links:
101102

102103
However, if you specify multiple loopback links with the **vxlan.vtep** attribute, **only the first one will be considered**.
103104

105+
(vxlan-rp)=
104106
## Interactions with the Routing Protocols
105107

106108
_netlab_ treats VXLAN-based VLANs like any other VLAN and enables routing protocols on them. However, when the cost of the overlay (VLAN) interface is lower than the cost of the underlay path, routing black holes could occur ([more details](https://blog.ipspace.net/2022/10/use-vrf-for-vxlan-vlans/)).

0 commit comments

Comments
 (0)