通过 VXLAN 隧道的 EVPN 5 类路由
以太网虚拟专用网络 (EVPN) 与虚拟可扩展 LAN (VXLAN) 类型 5 路由设计用于数据中心和云环境,为虚拟化工作负载提供高效且可扩展的网络连接。它结合了 EVPN 和 VXLAN 的优势,可以跨不同 IP 子网和位置在虚拟机 (VM) 和物理设备之间实现灵活无缝的通信。从瞻博网络云原生路由器 (JCNR) 23.3 版开始,云原生路由器支持通过 VXLAN 隧道进行 EVPN 5 类路由。
以太网虚拟专用网络 (EVPN) 技术提供了一种可扩展且高效的方式,可以在多个站点之间扩展第 2 层和第 3 层连接。EVPN 使用边界网关协议 (BGP) 在提供商边缘 (PE) 路由器之间交换信息,使其能够学习以太网段和 IP 前缀的位置。这允许创建可跨多个站点的虚拟网络,同时通过使用虚拟路由和转发 (VRF) 实例提供流量分离和隔离。EVPN 支持多种封装方法,包括 VXLAN 和 MPLS,这两种封装方法可用于通过服务提供商网络传输流量。
VXLAN 是一种网络叠加技术,允许在现有的第 3 层网络基础架构上创建虚拟的第 2 层网络。它将第 2 层分段的覆盖范围扩展到单个物理网络范围之外,这在大规模虚拟化环境中特别有用。
EVPN 支持两种类型的路由:MAC 通告路由(类型 2)和 IP 前缀路由(类型 5)。2 类路由用于在 PE 路由器之间交换 MAC 地址和 VLAN,而 5 类路由用于交换第 3 层网络路由。在 EVPN VXLAN 中,类型 5 路由用于通告 IP 前缀及其关联的 MAC 地址。要使用 EVPN VXLAN Type 5 IP 前缀路由提供的连接到达租户,数据包将作为封装在 VXLAN 标头中的第 2 层以太网帧通过数据中心的 IP 网络发送。
EVPN VXLAN Type 5 路由可实现 MAC 和 IP 路由信息的高效分发,使具有大量虚拟化工作负载的大规模网络能够无缝运行。该技术支持在共享环境中对租户流量进行安全隔离,提供可在租户之间保持分离的虚拟网络叠加层。
要了解有关 EVPN VXLAN 5 类路由的详细信息,请参阅 了解 EVPN 纯 5 类路由。
应为云原生路由器启用过渡路由器功能,以支持 EVPN VXLAN 5 类路由。请参阅 ,作为中转网关的云原生路由器。
通过 VXLAN 隧道启用 EVPN 5 类路由
通过 go 模板使用自定义云原生路由器控制器配置,通过 VXLAN 隧道启用 EVPN 5 类路由。在安装 JCNR 之前应用自定义配置,或者对于现有的云原生路由器安装,删除 cRPD Pod 并重生。
使用以下示例,使用位于 Juniper_Cloud_Native_Router_<release-number>/cRPD_examples 目录中的 jcnr-cni-custom-config-cm.tmpl 文件,在云原生路由器中配置 VXLAN 隧道上的 EVPN 5 类路由。
groups { custom { routing-instances { EVPN-TYPE5-VXLAN-VRF { instance-type vrf; protocols { evpn { ip-prefix-routes { advertise direct-nexthop; encapsulation vxlan; vni 1000; export EVPN-TYPE5-VXLAN-VRF-EXPORT-POLICY; } } } interface ge-0/0/1.0; route-distinguisher 10.255.0.1:100; vrf-target target:100:100; } } }
要了解有关节点注释和自定义配置的更多信息,请参阅 自定义云原生路由器配置 。
要了解 Junos 中的 EVPN 5 类配置,请参阅 示例:配置支持虚拟交换机的 EVPN。
EVPN Type 5 Routing over VXLAN 设置的配置示例和 CLI 命令

上图所示的拓扑描述了一种简单的设置,其中部署了两个 JCNR(PE1 和 PE2)作为提供商边缘路由器。CE1 和 CE2 表示每个 PE 后面的主机。作为先决条件,PE1 和 PE2 之间必须存在 BGP 会话。考虑 PE1 上的以下 EVPN-VXLAN 配置,接口 enp4s0 朝向 CE1:
groups { custom { routing-instances { orange { instance-type vrf; routing-options { rib orange.inet6.0 { multipath; } multipath; } protocols { evpn { ip-prefix-routes { advertise direct-nexthop; encapsulation vxlan; vni 10010; } } } interface enp4s0; route-distinguisher 1.1.1.1:4; vrf-target target:4:4; } } }
路由器 PE1 和 PE2 之间会创建一个 VXLAN 隧道。10.10.14.0/24 网络路由在 PE1 上本地学习,并通过 EVPN 类型 5 向远程 PE 播发。同样,10.10.24.0/24 网络路由在 PE2 上本地学习,并通过 EVPN 类型 5 向远程 PE 播发。CE1 和 CE2 之间的所有流量都通过 VXLAN 隧道在 PE1 和 PE2 之间转发。
使用以下部分中列出的命令对 EVPN VXLAN 5 类路由设置进行故障排除。
cRPD CLI 命令
可以在 cRPD CLI 上执行以下 CLI 命令。要访问 cRPD CLI,请参阅 访问 cRPD CLI。
-
show bgp <summary | neighbor>
:提供与对等方的 EVPN 连接摘要以及连接状态。示例输出如下所示:
host@pe1> show bgp summary Threading mode: BGP I/0 Default eBGP mode: advertise - accept, receive - accept Groups: 1 Peers: 2 Down peers: 1 Table Tot Paths Act Paths Suppressed History Damp State Pending bgp. evpn. 0 2 2 0 0 0 0 Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped… 2.2.2.2 4 10345 10336 0 2 3d 5:32:50 Establ bgp.evpn.0: 2/2/2/0 orange.evpn.0: 2/2/2/0 3.3.3.3 4 0 0 0 0 4w4d 13:28:22 Connect
-
show route <summary | table | prefix>
:显示路由表中的活动条目。 -
show evpn instance
:显示有关 EVPN 路由实例的信息。 -
show evpn l3-context
:在本地框中显示配置的 L3 上下文。示例输出如下所示:
host@pe1> show evpn l3-context L3 context Type Adv Encap VNI/Label Router MAC/GW intf orange Cfg Direct VXLAN 10010 48:5a:0d:78:78:d7
-
show evpn ip-prefix-database
:提供导出和导入的 EVPN 路由前缀列表以及这些路由的状态。示例输出如下所示:
root@evpn-pe1-node> show evpn ip-prefix-database L3 context: orange IPv4->EVPN Exported Prefixes Prefix EVPN route status 2.55.1.0/24 Created 4.1.1.4/30 Created 10.10.14.0/24 Created IPv6->EVPN Exported Prefixes Prefix EVPN route status 1234::a0a:e00/120 Created abcd::401:104/126 Created abcd::2:55:1:0/120 Created EVPN->IPv4 Imported Prefixes Prefix Etag 2.55.2.0/24 0 Route distinguisher VNI/Label Router MAC Nexthop/Overlay GW/ESI Route-Status Reject-Reason 2.2.2.2:4 10020 48:5a:0d:49:fc:63 2.2.2.2 Accepted n/a 10.10.24.0/24 0 Route distinguisher VNI/Label Router MAC Nexthop/Overlay GW/ESI Route-Status Reject-Reason 2.2.2.2:4 10020 48:5a:0d:49:fc:63 2.2.2.2 Accepted n/a EVPN->IPv6 Imported Prefixes Prefix Etag 1234::a0a:1800/120 0 Route distinguisher VNI/Label Router MAC Nexthop/Overlay GW/ESI Route-Status Reject-Reason 2.2.2.2:4 10020 48:5a:0d:49:fc:63 2.2.2.2 Accepted n/a abcd::2:55:2:0/120 0 Route distinguisher VNI/Label Router MAC Nexthop/Overlay GW/ESI Route-Status Reject-Reason 2.2.2.2:4 10020 48:5a:0d:49:fc:63 2.2.2.2 Accepted n/a
-
show route table <VRF>.evpn.0
:显示指定路由表中的路由条目。示例输出如下所示。
host@pe1> show route table orange. evpn. 0 orange.evpn.0: 4 destinations, 0 routes (4 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 5:1.1.1.1:4::0::10.10.14.0::24/248 *[EVPN/170] 4W4d 13:29:25 Fictitious 5:2.2.2.2:4::0::10.10.24.0::24/248 *[BGP/170] 3d 05:33:52, localpref 100, from 2.2.2.2 AS path: I, validation-state: unverified to 10.10.1.20 via enp2s0 5:1.1.1.1:4::0::1234::00a:000::120/248 *[EVPN/170] 4w4d 13:29:25 Fictitious 5:2.2.2.2:4::0::1234::a0a:1800::120/248 *[BGP/170] 3d 05:33:52, localpref 100, from 2.2.2.2 AS path: I, validation- state: unverified to 10.10.1.20 via enp2s0
-
show route table <VRF>.inet.0
:显示指定路由表中的路由条目。 -
show route table bgp.evpn.0
:显示指定路由表中的路由条目。带有本地前缀的示例输出如下所示。
host@pe1> show route table bgp.evpn.0 match-prefix 5:1.1.1.1:4::0::10.10.14.0::24 bgp.evpn.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 5:1.1.1.1:4::0::10.10.14.0::24/248 *[EVPN/170] 2w1d 05:11:43 Fictitious
带有远程前缀的示例输出如下所示。
host@pe1> show route table bgp.evpn.0 match-prefix 5:2.2.2.2:4::0::10.10.24.0::24 bgp.evpn.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 5:2.2.2.2:4::0::10.10.24.0::24/248 *[BGP/170] 2w1d 05:11:48, localpref 100, from 2.2.2.2 AS path: I, validation-state: unverified > to 10.10.1.20 via enp2s0
-
show krt next-hop
:显示配置的下一跃点。
vRouter CLI 命令
可在 vRouter CLI 上执行以下 CLI 命令。要访问 vRouter CLI,请参阅 访问 vRouter CLI。
-
rt --get <prefix> --vrf <vrf-id> --family <inet4/inet6>
:提供指向指定 IPv4 地址的路由。示例输出如下所示。
[host@pe1 /]# rt --get 10.10.24.0/24 --vrf 1 Match 10.10.24.0/24 in vRouter inet4 table 0/1/unicast Flags: L=Label Valid, P=Proxy ARP, T=Trap ARP, F=Flood ARP, Ml=MAC-IP learnt route vRouter inet4 routing table 0/1/unicast Destination PPL Flags Label Nexthop Stitched MAC(Index) 10.10.24.0/24 0 LPT 10020 30 -
-
vxlan --dump
:提供有关已配置的 VNI 和下一跃点的信息。示例输出如下所示。
[host@pe1 /]# vxlan --dump VXLAN Table VNID NextHop ---------------- 10010 25
-
nh --get <nh-id>
:提供下一跃点详细信息。示例输出如下所示。
[root@evpn-pe1-node /]# nh --get 30 Id:30 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:5 Vrf:0 Flags:Valid, Policy, Vxlan, Etree Root, l3_vxlan, Oif:1 Len:14 Data:52 54 00 78 c8 f2 52 54 00 ee 83 cd 08 00 Sip:1.1.1.1 Dip:2.2.2.2 L3_Vxlan_SMac:48:5a:0d:78:78:d7 L3_Vxlan_DMac:48:5a:0d:49:fc:63
-
vif --list
:提供配置了vif
的企业列表。 -
flow --l
:显示系统中的所有活动流。使用此命令验证虚拟路由器上 CE1 和 CE2 之间流动的流量。示例输出如下所示。
[host@pe1 /]# flow -l Flow table(size 161218560, entries 629760) Entries: Created 11 Added 11 Deleted 20 Changed 26Processed 11 Used Overflow entries 0 (Created FlOwS/CPU: 0 0 0 0 0 0 0 0 0 0 11 0 (oflows 0) Action: F-Forward, D=Drop N=NAT(S-SNAT, D=DNAT, PS=SPAT, Pd=DPAT, L=Link Local Port) Other: K(nh)=Key Nexthop, S(nh)=RPF Nexthop Flags: E-Evicted, Ec-Evict Candidate, N=New Flow, M-Modified Dm=Delete Marked TCP(r=reverse): S-SYN, F=FIN, R=RST, C-HalfClose, E-Established, D=Dead Stats: Packets/Bytes Index Source: Port/Destination: Port Proto(V) ------------------------------------------------------------------------------------ 95644<=>443840 10.10.24.21:30 1 (1) 10.10.14.11:0 (Gen: 1, K(nh): 8, Action:F, Flags:, 005: -1, S(nh):30, Stats: 16/1344, SPort 56932, TTL 0. Sinfo 2.2.2.2) 443840<=>95644 10.10.14.11:30 1 (1) 10.10.24.21:0 (Gen: 1, K(nh):8, Action:F, Flags:, Q0S: -1, S(nh):41, Stats: 16/1344, SPort 53983, TTL 0, Sinfo 0.0.0.0)
-
vifdump <vif-number>
:显示指定vif
的所有数据包详细信息。示例输出如下所示。
[host@pe1 /]# vifdump 3 -nevv vif0/3 PCI: 0000:04:00.0 NH: 8 MTU: 9000 dropped privs to tcpdump tcpdump: listening on mon3, link-type EN10MB (Ethernet), snapshot length 262144 bytes 20:15:15.611827 52:54:00:2c:f6:16 > 52:54:00:ef:3c:4d, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 1764, offset 0, flags [DF], proto ICMP (1), length 84) 10.10.14.11 > 10.10.24.21: ICMP echo request, id 16, seq 25, length 64 20:15:15.612472 52:54:00:ef:3c:4d > 52:54:00:2c:f6:16, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 62, id 14142, offset 0, flags [none], proto ICMP (1), length 84) 10.10.24.21 > 10.10.14.11: ICMP echo reply, id 16, seq 25, length 64 20:15:16.626773 52:54:00:2c:f6:16 > 52:54:00:ef:3c:4d, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 1863, offset 0, flags [DF], proto ICMP (1), length 84) 10.10.14.11 > 10.10.24.21: ICMP echo request, id 16, seq 26, length 64 20:15:16.627404 52:54:00:ef:3c:4d > 52:54:00:2c:f6:16, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 62, id 14187, offset 0, flags [none], proto ICMP (1), length 84) 10.10.24.21 > 10.10.14.11: ICMP echo reply, id 16, seq 26, length 64