分布式路由实现原理及跨物理机不同子网互通方案
分布式路由的核心思想是通过控制平面协议(如BGP EVPN)动态学习路由,并结合数据平面封装技术(如VXLAN),实现跨物理机的子网间高效互通。以下是详细原理和配置步骤:
一、分布式路由的核心原理
1. 核心组件
- 控制平面(Control Plane):
- 使用 BGP EVPN(Ethernet VPN)协议交换路由信息。
- 维护虚拟网络拓扑,包括MAC地址、IP地址、VNI映射等。
- 数据平面(Data Plane):
- 采用 VXLAN封装(MAC-in-UDP),在Underlay IP网络上传输Overlay流量。
- 支持硬件卸载(如RDMA/RoCEv2优化性能)。
2. 关键流程
- 主机/交换机通告路由信息:
- VTEP(VXLAN Tunnel Endpoint)设备通过BGP EVPN向邻居通告本地VM的MAC/IP信息。
示例EVPN路由条目: Type 2 (MAC/IP Advertisement Route): - RD: Route Distinguisher (区分租户) - VNI: Virtual Network Identifier - MAC: VM的MAC地址 - IP: VM的IP地址 - Next Hop: VTEP设备的Underlay IP
- 动态学习远端路由:
- BGP EVPN Speaker(如FRR、Cumulus Linux)接收对端VTEP的通告,更新本地转发表(FIB)。
- 跨子网通信时执行三层转发:
- 源VTEP根据目的IP查询EVPN路由表,找到目标VTEP的Underlay IP,封装VXLAN并发送。
二、跨物理机不同子网互通的配置示例
以Linux + FRR (BGP EVPN) + VXLAN为例:
1. Underlay网络准备
- 确保物理机之间IP可达(如通过OSPF/BGP或静态路由)。
- 每台物理机配置一个唯一的VTEP IP(如
10.0.0.1
和10.0.0.2
)。
2. Overlay网络配置
(1) 创建VXLAN接口并绑定VNI
# 在物理机1上创建VNI100和VNI200的VXLAN接口
ip link add vxlan100 type vxlan id 100 dstport 4789 local 10.0.0.1 nolearning
ip link add vxlan200 type vxlan id 200 dstport 4789 local 10.0.0.1 nolearning
# 启用接口并分配IP(模拟网关)
ip addr add 192.168.1.254/24 dev vxlan100
ip addr add 192.168.2.254/24 dev vxlan200
ip link set vxlan100 up
ip link set vxlan200 up
# (可选)开启ARP代理以优化广播流量
echo 1 > /proc/sys/net/ipv4/conf/vxlan100/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/vxlan200/proxy_arp
# (可选)启用IP转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
(2) FRR配置BGP EVPN
# /etc/frr/frr.conf (物理机1)
router bgp <AS号>
bgp router-id <本机VTEP_IP>
neighbor <对端VTEP_IP> remote-as <AS号>
!
address-family l2vpn evpn
neighbor <对端VTEP_IP> activate
exit-address-family
!
vrf tenantA
rd <Route_Distinguisher>
route-target both <RT_VALUE>
exit-vrf
interface vxlan100
evpn mh uplink
exit
interface vxlan200
evpn mh uplink
exit
(3) VM网络配置
- VM连接到对应的Bridge/VXLAN接口:
#将VM的虚拟网卡绑定到对应VNI的Bridge上
brctl addbr br-vni100
brctl addif br-vni100 vxlan100
brctl addif br-vni100 vm-nic
三、验证通信
(1)检查EVPN路由表
vtysh #进入FRR CLI
show bgp l2vpn evpn route
输出示例:
*> [2]:[ESI]:[EthTag]:[MAClen]:[MAC]::[IPv4] RD <RD> VNI <VNI>
Path -> Remote VTEP IP:10.x.x.x, Label:xxxx
(2)测试跨子网Ping
”`bash
#从192 .168 .*. * ping另一个子网的VM(例如192 .168 .*) *) *) *) *) *) *) *) *) *) ))))))))))))))))))*)))))))**)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*
内容由零声教学AI助手提供,问题来源于学员提问