PE中基于VRF的VPP和FRR信息交互
本文主要解决问题: VPP与FRR的vrf网络通信问题;采用方案是VPP RouterPlugin方案,现不建议采用,可直接使用VPP中TAP映射或VETH的方式实现。
外部网络拓扑如图说是:
1.VPP与Linux kernel交互
PE中内部结构如下图所示:
1 2 |
# 进入docker环境操作 $ docker exec -it vsr-vpp-frr bash |
配置完成VPP接管网卡,例如VPP的G0/G1等网卡,再做如下操作。
1.1.VPP中开启router-plugin模块
通过如下命令开启router-plugin模块
1 |
$ vppctl enable tap-inject |
该命令会为每个VPP数据平面接口创建一个对应linux tap接口。 这些tap网络接口是基于VPP和Linux网络栈的双向交流通道。它们必须在被赋予各自VPP接口相同的IP地址。
如此做,可以用vppctl show tap-inject
命令查看Linux/VPP的接口映射,并合理使用iproute2配置tap接口。
1 2 3 4 5 |
$ vppctl show tap-inject ... G0 -> vpp3 G1 -> vpp4 ... |
1.2.配置VPP数据平面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//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通。
1 2 |
# 进行ping测试 $ ip netns exec vrf1 ping 10.10.10.2 |
2.Linux kernel与FRR交互
LinuxShell中,进入/etc/frr/目录
1 2 3 4 5 6 7 |
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
微信赞赏
支付宝赞赏