我们前面大概介绍了GENEVE(Generic Network Virtualization Encapsulation,通用网络虚拟化封装)的基本原理Geneve:通用网络虚拟化封装。据我目前的了解,该功能主要是国外的一些厂商支持,国内支持的相对少一些。

碰巧,咱们之前介绍的飞塔防火墙FortiGate就支持这个功能来吧,给大家分享一下最新版本的FortiGate-VM64,带试用授权,我们今天用FortiGate来简单配置一下。

简单搭一个实验拓扑,GENEVE隧道的两端分别是两台FortiGate防火墙,通过VSR相连。

6860676ff74c4d34703ec29c90cd952e.png

首先,配置互联接口IP地址,并配置静态路由,实现设备互通。

0f8e2cc5ef1203093fec4a1b82805d9f.png

接下来,就可以配置GENEVE接口了。   

在官方的配置指导中,有多个配置选项。

config system geneve
    Description: Configure GENEVE devices.
    edit           
        set dstport {integer}
        set interface {string}
        set ip-version [ipv4-unicast|ipv6-unicast]
        set remote-ip {ipv4-address}
        set remote-ip6 {ipv6-address}
        set type [ethernet|ppp]
        set vni {integer}
    next
end

b28f3f04033b2933e3148fdd012dec2c.png

在实际配置中,目前的GEVENE端口默认还都是使用6081,IP地址协议簇一般也是IPv4,接口类型也是ethernet类型,这些配置一般无需调整;而GEVENE封装使用的出接口、对端IP地址和VNI ID,这些就要与实际情况相匹配了。

比如说,我们先在FGT44设备上,把完整的6条命令都配置上:

config system geneve
    edit geneve45
        set interface port2
        set type ethernet
        set ip-version ipv4-unicast
        set remote-ip 10.23.1.3
        set dstport 6081    
        set vni 88
    next
end

而当我们配置完成之后,查看配置时,就会发现只显示3条配置了,因为剩余3条和默认配置一样。

config system geneve
    edit geneve45
        set interface port2
        set vni 88
        set remote-ip 10.23.1.3
    next
end

8454ad73e704ebcb5afa6c538d599717.png

因为GENEVE虚接口也是三层接口,所以可以配置IP地址,我们给接口添加一个IPv4地址,并使能PING访问。

config system interface
    edit geneve45
        set ip 10.13.1.1 255.255.255.0
        set allowaccess ping
    next
end

3d9cd0c1a90d29fd47b553274554186f.png

同样的,我们完成FGT45的配置。

config system geneve
    edit geneve44
        set interface port3
        set vni 88
        set remote-ip 10.12.1.1
    next
end
config system interface
    edit geneve44
        set ip 10.13.1.3 255.255.255.0
        set allowaccess ping
    next    
end

配置完成之后,测试两台设备通过GENEVE接口进行互访。

6599e4d657e9bde817c73b590fba7bdf.png

访问正常,貌似没有什么难度。

接下来,我们看看报文的封装情况。

78c86b48585a76c4edf06f6e5f080e63.png    

按照GENEVE协议规范的报文封装格式,从外到内依次是外层以太网报文头、外层IPv4报文头、外层UDP报文头、GENEVE报文头、内层以太网报文头、封装载荷。

以我们的抓包为例,外层以太网报文头分别是FGT45和VSR的MAC地址,外层IPv4报文头分别是FGT44和FGT45的接口IPv4地址,外层UDP报文头指明了源目端口均为UDP 6081端口;再就是GENEVE报文头,记录了VNI为88,内层以太网报文头为两个GENEVE虚拟接口的MAC地址;再内层的封装载荷就是原始的PING报文了。

除此之外,我们还捕获了接口的邻居发现报文,是IPv6协议簇的,最内层报文竟然是ICMPv6。

4b6627da92f66ff77314776f6009125c.png

不过报文结构跟IPv6的封装也是完全一致的。

从配置过程上看,非常简单;但是从报文结构上看,还是非常透明的,跟GRE的封装十分相似,怪不得协议规范里面提到将现有的控制平面移植到Geneve上运行应该很简单,只需付出最小的努力,因为Geneve建立在用于网络虚拟化的最常见协议(VXLAN和NVGRE)提供的基础数据平面功能之上。   

***推荐阅读***

Geneve:通用网络虚拟化封装

NVGRE:使用通用路由封装的网络虚拟化

VXLAN:RFC7349-VXLAN基于三层网络实现二层虚拟化的框架

GRE:RFC1701-通用路由封装 (GRE)

通过GRE隧道实现OSPF、BGP、IS-IS的套接使用

配置GRE over IPv6隧道

在IP或通用路由封装(GRE)中封装MPLS

IPsec over GRE over IPv6配置案例

快来看啊,华为路由器配置GRE over IPSec隧道案例来了!

北京到新加坡时延已经300+了,是WireGuard还是openVPN能力挽狂澜?

狂妄!VMware竟然怀疑openEuler的安装镜像有问题

还能这么玩?用TencentOS来给CentOS8续个命!

3d9ae7fa645a46a29365533ddb3a1791.jpeg

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐