VPP与FRR通过Linux内核沟通机制调研(netns方式,非vrf)

实验环境:操作系统Centos7.6,原生Linux系统内核版本3.10;

实现租户路由域间通信的方式选择——vrf与netns之间:因为Linux内核自4.8以后才较好支持vrf功能,所以采用vrf方式实现VPP到FRR通信需要升级Linux系统内核;但现有生产环境采用原生3.10版本,升级系统版本会产生不稳定风险,例如vpp通过网卡驱动接管虚拟网卡问题等;同时系统版本3.10已很好支持netns,VPP和FRR对netns的支持也较完善,故初步采用netns方式;

实验相关参考文档https://segmentfault.com/a/1190000020000400。

VPP与FRR通过Linux内核沟通机制调研(netns方式,非vrf)_第1张图片

1.打通VPP->Linux Kernel netns途径

1.1.创建不同命名空间,并关闭待接管网卡;

//1.创建网络命名空间net7和net8
# ip netns add net7
# ip netns add net8
//2.关闭现有物理网卡
# ip link set ens37 down
# ip link set ens38 down

1.2.创建网卡直通tap方式

该方式使得tap网卡同linux内核中已有网卡通过netlink建立连接,数据包也会在二层就转发;vpp采用 v20.01,通过vppctl控制台登录;

//1.创建tap直连到linux内核网卡指定网络空间net7和net8
vpp# create tap id 7 host-if-name ens37 host-ns net7
vpp# create tap id 8 host-if-name ens38 host-ns net8
vpp# show tap

//2.VPP中创建vrf,并指定vrf的ID号
vpp# ip table add 7
vpp# ip table add 8

//3.vpp中tap端口绑定对应vrf
vpp# set interface ip table tap7 7
vpp# set interface ip table tap8 8

//4.启动tap端口,并设置ip;若删除或端口换绑定关系,需首先删除IP;
vpp# set interface state tap7 up
vpp# set interface state tap8 up
vpp# set interface ip address tap7 10.10.7.1/24
vpp# set interface ip address tap8 10.10.8.1/24
vpp# show int addr        //查看vrf绑定端口情况

VPP与FRR通过Linux内核沟通机制调研(netns方式,非vrf)_第2张图片 

1.3.Linux内核中设置对应网卡 

# ip netns exec net7 ip link set ens37 up
# ip netns exec net8 ip link set ens38 up
# ip netns exec net7 ip addr add 10.10.7.2/24 dev ens37
# ip netns exec net8 ip addr add 10.10.8.2/24 dev ens38
# ip netns exec net7 ip link set lo up
# ip netns exec net8 ip link set lo up
# ip netns list
# ip netns exec net7 ip addr    //查看namespace net7的端口绑定情况
# ip netns exec net8 ip addr

//如果需要在netns中直接加入某命令空间netns,可采用如下方法
//ip link add dummy5 type dummy netns ns1
//ip link set eth0 netns ns1

2.打通FRR->Linux Kernel netns途径

通过官方文档可知,Frr中模块zebra支持对多个接口、地址、静态路由的同步;

VPP与FRR通过Linux内核沟通机制调研(netns方式,非vrf)_第3张图片

通过配置/etc/frr/daemons文档,zebra模块添加-n选项可实现frr对netns的支持,如下图所示;随后,zebra会自动同步linux kernel中netns中空间到FRR中;也可通过配置/etc/frr/zebra.conf完成指定VRF,启动时加-f /etc/frr/zebra.conf;

VPP与FRR通过Linux内核沟通机制调研(netns方式,非vrf)_第4张图片

VPP与FRR通过Linux内核沟通机制调研(netns方式,非vrf)_第5张图片

然后重启frr服务, systemctl restart frr;通过vtysh登录CLI并配置;

#1.查看从linux内核netns同步的vrf
root# show vrf
#2.查看已接管netns以及routes等信息
root# show zebra
#3.查看路由信息
root# show ip route vrf net7

 VPP与FRR通过Linux内核沟通机制调研(netns方式,非vrf)_第6张图片

你可能感兴趣的:(SDN/NFV)