1. 背景介绍
通用路由封装(GRE:Genetic Routing Encapsulation)是一种隧道技术,它规定了如何将一种网络协议下的数据报封装在另外一种网络协议中,使这些被封装的数据报能够在另一个网络层协议中传输。
骨干网中一般采用单一网络协议(例如IPv4)进行数据报文传输,但是不同的非骨干网上可能会使用不同网络协议(例如:IPv6、IPX等)进行数据报文传输。由于骨干网与非骨干网使用的协议不同,这样将导致非骨干网之间无法通过骨干网传输数据报文。GRE协议通过实现一种协议封装另一种协议来解决这个问题。
紫金DPU是自研的一款弹性裸金属,可支持弹性网卡,这些弹性网卡之间通信支持icmp,tcp,udp, gre协议等,且这些协议的报文可卸载到硬件上。
2.GRE基本原理
GRE工作原理:
内层协议作为payload经GRE封装被外层协议承载
GRE 的header格式:
3. 紫金DPU支持对GRE报文的卸载
两台弹性裸金属通信的报文,其中host client发起的报文通过gre报文封装后,流量到了DPU侧,会卸载到硬件上,报文再次经过vxlan封装,到了server上,流量在DPU侧,经过硬件卸载后,进行vxlan解封装,最终报文回到host server侧,进行gre解封装。
4.测试步骤
环境准备:两台弹性裸金属,弹性网卡同一个网段可正常通信
搭建gre隧道:
两台弹性裸金属host上都开启ip_gre功能
#modprobe ip_gre
#lsmod |grep ip_gre
弹性裸金属B作为服务端,在对应的host上开启:
ip tunnel add tun1 mode gre local 20.11.9.152 remote 20.11.9.100 ttl 255
ip addr add 192.168.0.8 peer 192.168.0.10 dev tun1
ip link set tun1 up
弹性裸金属A作为客户端,在对应的host上开启:
ip tunnel add tun1 mode gre local 20.11.9.100 remote 20.11.9.152 ttl 255
ip addr add 192.168.0.10 peer 192.168.0.8 dev tun1
ip link set tun1 up
连通性验证:
ping 192.168.0.8
1)不配置安全组
报文可正常转发卸载,但不过CT,对端可以收到报文
Host上抓包,可见host发出去的报文是已经封装好的gre报文
同时在DPU侧查看gre协议报文已经卸载,但是未过ct
2)配置GRE规则
配置gre规则,GRE大包/小包流量不通,TCP/UDP/ICMP大包/小包流量正常
修改gre规则action/direction/ip-version/priority/protoctol/remote-type/remote-cidr,均可以修改成功
修改gre规则--ip-version 6 drop,对应ipv4 gre大包/小包流量正常
修改gre规则--remote-cidr 20.11.9.0/24 drop,对应ip的GRE流量不通
vpcs security-group-rule-create sg-lti4beniq4 --action drop --direction egress --ip-version 4 --priority=15 --protocol=gre --remote-type cidr --remote-cidr 0.0.0.0/0
删除gre规则,GRE流量恢复