专栏首页johnnyxsu技术交流分享玩转CVM之搭建GRE隧道
原创

玩转CVM之搭建GRE隧道

隧道技术概述

一种技术(协议)或者策略的两个或多个子网穿过另一种技术(协议)或者策略的网络实现互联,称之为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数据,那么这一侧的隧道端口 也会关闭。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯云如何快速从IPv4向IPv6演进?

    IPv6技术在国内沉寂数十年后,在国家推进下重新登上重要舞台。2018年工业和信息化部发布了关于贯彻落实《推进互联网协议第六版(IPv6)规模部署行动计划》的通...

    用户1532637
  • 如何利用腾讯云BGP网络提升客户外网出口的冗余

    最近几年,互联网公司发展迅速,有很多互联网公司本身的基础架构都构建在一些公有云厂商之上,除了节省初期投资之外,另外也是借助于一些大的云厂商本身的网络能力,实现业...

    张小波
  • 腾讯云公网负载均衡技术实现详解

    本文主要讲述了腾讯云CLB的基本概念,业务架构以及公网LB技术实现。

    朱彬峰
  • 如何使用GRE建立VPN隧道

    GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。

    用户8611941
  • 思科技术 | GRE-V**的详细配置(含实验)

    3、GRE分为point-to-piont GRE和multipoint GRE两种

    网络技术联盟站
  • H3C GRE概述

        GRE( Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如 IP 和 IPX)的数据报文进行封装,使...

    py3study
  • 玩转CVM之搭建Discuz! 论坛

    Discuz! 是全球成熟度最高、覆盖率最大的论坛网站软件系统之一,被200多万网站用户使用。本教程介绍在 LAMP(Linux + Apache + Mari...

    苏欣
  • 玩转CVM之搭建WordPress站点

    WordPress 是一款常用的搭建个人博客网站软件,该软件使用 PHP 语言开发。您可通过在腾讯云服务器的简单操作部署 WordPress,发布个人博客。

    苏欣
  • F1060 GRE OVER IPSEC典型组网配置案例

    本案例采用H3C HCL模拟器的F1060防火墙来模拟GRE OVER IPSEC 的典型组网配置。内网和外网在网络拓扑图中已经有了明确的标识。FW1与FW2均...

    网络技术联盟站
  • H3CSE笔记系列 | 带你走进广域网,一篇能让你知道侧重点(可用于知识点复习)

    相当于:在中间运营商打通一根专线,也就是隧道两端地址要在同一网段而且通常使用私网地址。

    网络技术联盟站
  • 玉龙小栈: | DMVPN的基础工作原理

    工作原理:DMVPN是一种基于mGRE的IPSec VPN技术,由mGRE、NHRP、IPSec和动态路由协议四个部分组成;mGRE是多点GRE隧道接口,使得单...

    Ponnie
  • 理解Neutron(3):Neutron Open vSwitch + GRE/VxLAN 虚拟网络

    特别说明:本文于2015年基于OpenStack M版本发表于本人博客,现转发到公众号。因为时间关系,本文部分内容可能已过时甚至不正确,请读者注意。

    SammyLiu
  • H3CNE实验系列 | V** (GRE)

    路由器 R1 和路由器 R3 间通过其他网络相连,运行 IP 协议的似有玩了过的两个子

    网络技术联盟站
  • 用树莓派做VPN路由网关

    目标是将树莓派做成VPN路由网关,即本身是一个VPN的Client(VPN的客户端),同时可以转发网络请求。这样只要连上家里的WIFI就可以无缝访问公司...

    云深无际
  • 利用pipework与OVS构建跨主机容器网络

    一、前言 本文提供了一种可行的、灵活的方案用于构建跨主机的Docker容器网络。鉴于目前的各类网络方案均依赖其他大型项目(比如CoreOS,Kubernetes...

    SDNLAB
  • 15-GRE与VXLAN网络

    公网机里的局域网是10.100.0.0/24,有一个公网ip,通过公网ip进行上网;

    小朋友呢
  • 经典GRE Over IPSec配置 (

    本文继上文继续讨论gre over ipsec,上次我们是在两站点之间先建立IPSec连接(transport方式),然后再IPSec连接上再建立gre隧道,进...

    py3study
  • 基于Open vSwitch的VxLAN隧道实验网络

    1 实验目的 该实验通过Open vSwitch构建Overlay的VxLAN网络,更直观的展现VxLAN的优势。在实验过程中,可以了解如何建立VxLAN隧道并...

    SDNLAB
  • OPNSense 构建企业级防火墙--PPTP V**(三)

    点对点隧道协议(PPTP,Point-to-Point Tunneling Protocol)是一种协议(一套通信规则),它允许企业通过私人“隧道”在公共网络上...

    Kevin song

扫码关注云+社区

领取腾讯云代金券