骨干网PE中VPP与FRR的路由交互

PE中基于VRF的VPP和FRR信息交互

本文主要解决问题: VPP与FRR的vrf网络通信问题;采用方案是VPP RouterPlugin方案,现不建议采用,可直接使用VPP中TAP映射或VETH的方式实现。

外部网络拓扑如图说是:

1.VPP与Linux kernel交互

PE中内部结构如下图所示:

# 进入docker环境操作
$ docker exec -it vsr-vpp-frr bash

  配置完成VPP接管网卡,例如VPP的G0/G1等网卡,再做如下操作。

1.1.VPP中开启router-plugin模块

通过如下命令开启router-plugin模块

$ vppctl enable tap-inject

  该命令会为每个VPP数据平面接口创建一个对应linux tap接口。 这些tap网络接口是基于VPP和Linux网络栈的双向交流通道。它们必须在被赋予各自VPP接口相同的IP地址。
  如此做,可以用vppctl show tap-inject 命令查看Linux/VPP的接口映射,并合理使用iproute2配置tap接口。

$ vppctl show tap-inject
...
G0 -> vpp3
G1 -> vpp4
...

1.2.配置VPP数据平面

$ vppctl
//创建VRF号为1的表
vpp# ip table add 1
//将连接CE端的G0口绑定到VRF 1上
vpp# set interface ip table G0 1

//启动接口
vpp# set interface state G0 up
vpp# set interface state G1 up

//设置IP地址,G1设置IP后自动绑定到默认VRF 0上面
vpp# set interface ip address G0 10.10.10.1/24
vpp# set interface ip address G1 10.10.20.2/24

//查询接口绑定状态
vpp# show int addr
G0 (up):
  L3 10.10.10.1/24 ip4 table-id 1 fib-idx 1
G1 (up):
  L3 10.10.20.2/24

1.3.Linux Shell中操作命名空间vrf1

//1.启动网卡vpp0用于连接RR,采用默认命名空间
$ ip link set dev vpp4 up
$ ip addr add 10.10.20.2/24 dev vpp4

//2.netns命令创建vrf空间vrf1,并绑定连接CE的vpp3
$ ip netns add vrf1
$ ip link set dev vpp3 netns vrf1

//3.查询并设置命名空间vrf1中接口
$ ip netns exec vrf1 ip addr
//开启lo网卡用于环回
$ ip netns exec vrf1 ip link set lo up
//开启vpp1网卡用于外部连接
$ ip netns exec vrf1 ip link set vpp3 up
//对tap0网卡设置Ip地址
$ ip netns exec vrf1 ip addr add 10.10.10.1/24 dev vpp3

1.4.实验进行测试

CE节点ping PE 节点,可以ping通,如图所示:

PE节点ping CE节点,如下图所示可以ping通。

# 进行ping测试
$ ip netns exec vrf1 ping 10.10.10.2

2.Linux kernel与FRR交互

LinuxShell中,进入/etc/frr/目录

vi daemons
/*以下内容对应修改
bgpd=yes
zebra_options="  -A 127.0.0.1 -s 90000000 -n"*/
systemctl restart frr
//通过vtysh登录FRR控制接口
# show vrf              //查看是否连接内核中netns

#show int vrf vrf1

发表评论

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