linux内核端口绑定,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。

1e6c660ed1cb4f8bb2d95d6f9c37ddac.png

解决数据平面和控制平面分离:本文并未实现数据平面和控制平面分离问题。对于该问题,官方建议采用VPPSandBox模块进行解决。目前官方只有vpp18.04版本的vppsb,19以上并未支持。官方相关资料显示该问题目前示无多余人在开发,日期为19年7月。

vpp自版本更新到19以上修改较大,很多东西无法支持,需要重新探索。例如我们计划采用的方案vppsb。目前作者正构思解决该问题,需要深入理解内部运行机制。

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

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

//创建网络命名空间net7和net8

# ip netns add net7

# ip netns add net8

1

2

3

//创建网络命名空间net7和net8

# ip netns add net7

# ip netns add net8

1.2.创建网卡直通tap方式

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

//1.创建tap直连到linux内核网卡指定网络空间net7和net8,并设置内核中网卡名称为g7和g8

vpp# create tap id 7 host-if-name g7 host-ns net7

vpp# create tap id 8 host-if-name g8 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绑定端口情况

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//1.创建tap直连到linux内核网卡指定网络空间net7和net8,并设置内核中网卡名称为g7和g8

vpp# create tap id 7 host-if-name g7 host-ns net7

vpp# create tap id 8 host-if-name g8 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绑定端口情况

a8b2b485746900802a87260f87f8f848.png

1fa76d83e5570d5a9fed3da6be934215.png

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

# ip netns exec net7 ip link set g7 up

# ip netns exec net8 ip link set g8 up

# ip netns exec net7 ip addr add 10.10.7.2/24 dev g7

# ip netns exec net8 ip addr add 10.10.8.2/24 dev g8

# 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

1

2

3

4

5

6

7

8

9

10

11

12

13

# ip netns exec net7 ip link set g7 up

# ip netns exec net8 ip link set g8 up

# ip netns exec net7 ip addr add 10.10.7.2/24 dev g7

# ip netns exec net8 ip addr add 10.10.8.2/24 dev g8

# 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

fd07c390b96feaeb4aa7629eff393adb.png

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

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

2c4610a8b924564993c6162ee2f2fdf9.png

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

ae98be33cdd1f55443d18da1623a9d94.png

cbc2d39e57b8be58e2dae407aabeddc9.png

然后重启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

1

2

3

4

5

6

#1.查看从linux内核netns同步的vrf

root# show vrf

#2.查看已接管netns以及routes等信息

root# show zebra

#3.查看路由信息

root# show ip route vrf net7

1a2fb02d907d03fe8f45cd612550e985.png

赞赏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值