前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >玩转CVM之搭建GRE隧道

玩转CVM之搭建GRE隧道

原创
作者头像
苏欣
发布2019-07-17 17:40:07
6.8K0
发布2019-07-17 17:40:07
举报

隧道技术概述

一种技术(协议)或者策略的两个或多个子网穿过另一种技术(协议)或者策略的网络实现互联,称之为overlay topology,这一技术是电信技术的永恒主题之一。

电信技术在发展,多种网络技术并存,一种技术的网络孤岛可能需要穿过另一种技术的网络实现互联。这种情况如果发生在高层协议的PDU封装于低层协议PDU中时通常称之为复用;特别地三层PDU穿过二层网络的技术称为租用链路或虚电路;而如果穿越发生在一种协议PDU封装在同一层协议的PDU中,或者封装在高层协议的PDU中时,人们通常称之为隧道。

隧道提供了一种某一特定网络技术的PDU穿过不具备该技术转发能力的网络的手段,如组播数据包穿过不支持组播的网络;另一种情况是有时因为管理策略的原因,一个管理者(策略)的子网不能通过和另一个管理者(策略)的网络互联而连接,而是要穿过另一个管理者(策略)的网络实现连接,这就是所谓的V**(Virtual Private Networks),不管是L2 V**还是L3 V**都需要利用隧道技术实现。因此隧道某种意义上可以概括为穿越不同的网络的技术,不同既可以是技术方面的,也可以是管理策略方面的。

隧道可以作为一个虚拟接口来实现。隧道接口并不指定特定的“乘客”或“传输”协议连接,而是一种结构,可以实现任何标准点到点封装的服务。由于隧道是点到点连接,因此对每个连接必须配置一个单独的隧道。

GRE是一种应用较为广泛的一种网络层协议PDU封装于任一种网络层协议PDU中的技术,经常被用来构造GRE隧道穿越各种三层网络,并得到了大多数电信设备厂商的支持。

GRE简介

GRE(Generic Routing Encapsulation,通用路由协议封装)是由Cisco和Net-smiths等公司于1994年提交给IETF的。目前有多数厂商的网络设备均支持GRE隧道协议。GRE 规定了如何用一种网络协议去封装另一种网络协议的方法。GRE的隧道由两端的源IP地址和目的IP地址来定义,允许用户使用IP包封装IP、IPX、 AppleTalk包,并支持全部的路由协议(如RIP2、OSPF等)。通过GRE,用户可以利用公共IP网络连接IPX网络、AppleTalk网 络,还可以使用保留地址进行网络互连,或者对公网隐藏企业网的IP地址。

GRE采用了Tunnel(隧道)技术,是V**(Virtual Private Network)的第三层隧道协议。

Tunnel是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel的两端分别对数据报进行封装及解封装。

一个X协议的报文要想穿越IP网络在Tunnel中传输,必须要经过加封装与解封装两个过程,下面以图1的网络为例说明这两个过程:

X协议网络通过GRE隧道互连

封装过程

Router A连接Group 1的接口收到X协议报文后,首先交由X协议处理;

      X协议检查报文头中的目的地址域来确定如何路由此包;

      若报文的目的地址要经过Tunnel才能到达,则设备将此报文发给相应的Tunnel接口;

      Tunnel口收到此报文后进行GRE封装,然后再封装IP报文头,设备根据此IP包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。

GRE封装后的报文格式

封装后的报文

需要封装和传输的数据报文,称之为净荷(Payload),净荷的协议类型为乘客协议(Passenger Protocol)。系统收到一个净荷后,首先使用封装协议(Encapsulation Protocol)对这个净荷进行GRE封装,即把乘客协议报文进行了“包装”,加上了一个GRE头部成为GRE报文;然后再把封装好的原始报文和GRE头部封装在IP报文中,这样就可完全由IP层负责此报文的前向转发(Forwarding)。通常把这个负责前向转发的IP协议称为传输协议(Delivery Protocol或者Transport Protocol)。

GRE在包头中包含了协议类型,这用于标明乘客协议的类型;校验和包括了GRE的包头和完整的乘客协议与数据;密钥用于接收端验证接收的数据;序列号用于接收端数据包的排序和差错控制;路由用于本数据包的路由。

GRE只提供了数据包的封装,它并没有加密功能来防止网络侦听和攻击。所以在实际环境中它常和IPsec在一起使用,由IPsec提供用户数据的加密,从而给用户提供更好的安全性。

根据传输协议的不同,可以分为GRE over IPv4和GRE over IPv6两种隧道模式。

解封装的过程

解封装过程和加封装的过程相反。

         Router B从Tunnel接口收到IP报文,检查目的地址;

         如果发现目的地是本路由器,则Router B剥掉此报文的IP报头,交给GRE协议处理(进行检验密钥、检查校验和及报文的序列号等);

         GRE协议完成相应的处理后,剥掉GRE报头,再交由X协议对此数据报进行后续的转发处理。

说明:

GRE收发双方的加封装、解封装处理,以及由于封装造成的数据量增加,会导致使用GRE后设备的数据转发效率有一定程度的下降。

GRE隧道搭建

设备信息

现有两台机器,机器信息如下: A机器:

内网IP:10.5.5.11

外网IP:62.234.89.107

B机器:

内网IP:10.3.4.3

外网IP:212.129.135.110

设备配置

A机器:

modprobe ip_gre

lsmod|grep gre

ip tunnel add tun1 mode gre remote 212.129.135.110 local 10.5.5.11

ip link set tun1 up mtu 1400

ip addr add 192.168.1.1 peer 192.168.1.2 dev tun1

route add -net 10.3.0.0/16 dev tun1

echo 1 > /proc/sys/net/ipv4/ip_forward

B机器配置:

modprobe ip_gre

lsmod|grep gre

ip tunnel add tun1 mode gre remote 62.234.89.107 local 10.3.4.3

ip link set tun1 up mtu 1400

ip addr add 192.168.1.2 peer 192.168.1.1 dev tun1

route add -net 10.5.0.0/16 dev tun1

echo 1 > /proc/sys/net/ipv4/ip_forward

按照上述配置完成后,可以在变可以直接进行测试,首先互ping GRE peer IP

A B 互ping GRE互联IP

此时可以确定A和B机器之间的BGP已经建立起来,可以进行A和B内网互ping的测试

A B内网互ping

命令配置开机重启会失效,需要写入配置文件进行开机自启动。

写入配置文件

A机器配置文件步骤:

vim /etc/init.d/gre.sh

进入文件进行编辑如下内容:

modprobe ip_gre

lsmod|grep gre

ip tunnel add tun1 mode gre remote 212.129.135.110 local 10.5.5.11

ip link set tun1 up

ip link set tun1 up mtu 1400

ip addr add 192.168.1.1 peer 192.168.1.2 dev tun1

route add -net 10.3.0.0/16 dev tun1

echo 1 > /proc/sys/net/ipv4/ip_forward

保存后执行如下命令

chmod +x /etc/init.d/gre.sh

echo "/etc/init.d/gre.sh" >> /etc/rc.d/rc.local

B机器配置文件步骤:

vim /etc/init.d/gre.sh

进入文件进行编辑如下内容:

modprobe ip_gre

lsmod|grep gre

ip tunnel add tun1 mode gre remote 62.234.89.107 local 10.3.4.3

ip link set tun1 up

ip link set tun1 up mtu 1400

ip addr add 192.168.1.2 peer 192.168.1.1 dev tun1

route add -net 10.5.0.0/16 dev tun1

echo 1 > /proc/sys/net/ipv4/ip_forward

保存后执行如下命令

chmod +x /etc/init.d/gre.sh

echo "/etc/init.d/gre.sh" >> /etc/rc.d/rc.local

注意事项

由于GRE是将一个数据包封装到另一个数据包中,因此你可能会遇到GRE的数据报大于网络接口所设定的数据包最大尺寸的情况。解决这种问题的方法是在隧道接口上配置ip tcp adjust-mss 1436。另外,虽然GRE并不支持加密,但是你可以通过tunnel key命令在隧道的两头各设置一个密钥。这个密钥其实就是一个明文的密码。由于GRE隧道没有状态控制,可能隧道的一端已经关闭,而另一端仍然开启。这一问题的解决方案就是在隧道两端开启keepalive数据包。它可以让隧道一端定时向另一端发送keepalive数据,确认端口保持开启状态。如果隧道的某一端没有按时收到keepalive数据,那么这一侧的隧道端口 也会关闭。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 隧道技术概述
  • GRE简介
    • 封装过程
      • GRE封装后的报文格式
        • 解封装的过程
        • GRE隧道搭建
          • 设备信息
            • 设备配置
              • 写入配置文件
                • A机器配置文件步骤:
                • B机器配置文件步骤:
            • 注意事项
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档