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

  
  解决数据平面和控制平面分离:本文并未实现数据平面和控制平面分离问题。对于该问题,官方建议采用VPPSandBox模块进行解决。目前官方只有vpp18.04版本的vppsb,19以上并未支持。官方相关资料显示该问题目前示无多余人在开发,日期为19年7月。
  vpp自版本更新到19以上修改较大,很多东西无法支持,需要重新探索。例如我们计划采用的方案vppsb。目前作者正构思解决该问题,需要深入理解内部运行机制。


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

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

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


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


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

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

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

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

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注