• Author       :
  • Email         : vip_13031075266@163.com
  • Date          : 2020.01.23
  • Copyright : 未经同意不得转载!!!
  • Version    : openswan-2.6.51.5
  • Reference:https://download.openswan.org/openswan/

目录

0. 前言

1. Linux内核支持的隧道类型

2. GRE隧道跨(公)网连接相同子网地址主机

2.1 拓扑环境:

2.1 ubantu配置:

2.1.1 添加GRE隧道

2.1.2 配置GRE隧道接口IP

2.1.3 激活GRE隧道接口IP

2.2 CentOS配置:

2.3 ping包测试通讯链路:

3. GRE隧道跨(公)网连接不同子网地址主机

3.1 拓扑环境

3.2 Ubantu配置

3.2.1 配置ens33子接口IP

3.2.2 添加另一个GRE隧道接口并up

3.2.3 配置隧道接口IP

3.2.4 添加对端子网路由表

3.3 CentOS配置

3.3.1 配置ens33子接口IP

3.3.2 添加另一个GRE隧道接口并up

3.3.3 配置隧道接口IP

3.3.4 添加对端子网路由表

3.4 ping测试链路连通性


0. 前言

在学习ipsec过程中,一般都会涉及到ipsec的局限性:ipsec协议是一种点对点协议,不支持组播,也不能保护组播、广播报文。因此ipsec协议无法用于音视频会议等场合,此时通常的解决办法是采用GRE Over IPSec. 给出的解释是:GRE协议可以封装组播、广播报文,但是无法对业务内容进行加密;而ipsec可以对报文进行加密,但是无法封装组播和广播报文。因此将两种协议结合,因而GRE over IPSec协议应运而生。 但是我找了很多资料(其实没有多少),都没有找到为什么GRE协议支持封装组播和广播报文,而ipsec不行;他们作为点对点协议,为什么GRE可以而IPsec不行呢? 因为没有找到答案,所以不能证实自己的想法正确与否,于是通过搭建GRE隧道环境,学习Linux内核中GRE隧道的操作配置原则,希望能从中得到些许启发。

搭建GRE隧道环境实际上是很简单的,因为Linux内核已经支持了GRE隧道,因此直接在虚拟机(ubantu和CentOS)里进行简单的配置即可完成操作。

1. Linux内核支持的隧道类型

目前Linux内核已经支持多种隧道类型,包括:IPIP隧道,GRE隧道,... 。其余这几个我也没见过。当然除了这几种,还有ipsec协议,l2tp协议,可以的是我目前都还没有用过,实在是暴殄天物,罪过罪过

下面通过搭建两组拓扑环境,来学习GRE隧道的基本规则,然后在此基础上分析下GRE和IPSEC在组播和广播报文封装的表现出不同行为的可能原因(另写一遍文章喽)。

2. GRE隧道跨(公)网连接相同子网地址主机

2.1 拓扑环境:

家里设备有限,只有一台电脑,还是通过无线网卡来上网的,因此拓扑环境比较寒酸,其实这些并不重要,只需明白我的两台虚拟机Ubantu和CentOS通过桥接的方式连在一起,网络上可以通讯即可。

现在,我准备将两个地址分别为10.1.2.1/24、10.1.2.2/24的两台主机(假的,只是个IP地址而已)通过GRE隧道连接起来进行通讯。原则上这两个地址属于不同的子网中(Ubantu中的子网和CentOS中的子网,只是这两个子网的网段相同仅此而已),无法直接通讯。

2.1 ubantu配置:

首先,我确定了下该虚拟机中是否存在gre相关的接口,结果当然是没有了。

root@ubantu:/home/toney# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255inet6 2409:8a00:18e9:810:141:383c:ac6f:8b11  prefixlen 64  scopeid 0x0<global>inet6 2409:8a00:18e9:810:f8dd:500e:b1a:463b  prefixlen 64  scopeid 0x0<global>inet6 fe80::8e84:574c:7a8b:440a  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:fb:db:ad  txqueuelen 1000  (Ethernet)RX packets 3581  bytes 1030105 (1.0 MB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 1177  bytes 114532 (114.5 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 160  bytes 12920 (12.9 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 160  bytes 12920 (12.9 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.1.1 添加GRE隧道

ip tunnel add Tunnel-1 mode gre remote 192.168.1.13 local 192.168.1.10

添加GRE隧道时,需要指定隧道的名称,我这里叫做Tunnel-1;  因为要搭建GRE类型隧道,因此mode为gre。 而GRE隧道的地址为192.168.1.13<========>192.168.1.10。

由于是第一次执行此命令,底层实际上安装上了gre隧道相关的驱动。用户只有在此基础上才能配置GRE隧道,不过,无需担心,内核自动完成。

如果在添加隧道时不指定remote和local地址,也是可以的,它实际上是只是安装gre隧道相关驱动。下面是添加隧道时没有指定remote和local地址时的结果:


root@ubantu:/home/toney# ip tunnel add Tunnel-1
cannot determine tunnel mode (ipip, gre, vti or sit)
root@ubantu:/home/toney# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255inet6 2409:8a00:18e9:810:141:383c:ac6f:8b11  prefixlen 64  scopeid 0x0<global>inet6 2409:8a00:18e9:810:200d:99e2:4f3d:cb6f  prefixlen 64  scopeid 0x0<global>inet6 fe80::8e84:574c:7a8b:440a  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:fb:db:ad  txqueuelen 1000  (Ethernet)RX packets 5038  bytes 5896155 (5.8 MB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 2744  bytes 309264 (309.2 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 164  bytes 15044 (15.0 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 164  bytes 15044 (15.0 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0root@ubantu:/home/toney# ip tunnel add Tunnel-1 mode gre
add tunnel "gre0" failed: File exists
root@ubantu:/home/toney# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255inet6 2409:8a00:18e9:810:141:383c:ac6f:8b11  prefixlen 64  scopeid 0x0<global>inet6 2409:8a00:18e9:810:200d:99e2:4f3d:cb6f  prefixlen 64  scopeid 0x0<global>inet6 fe80::8e84:574c:7a8b:440a  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:fb:db:ad  txqueuelen 1000  (Ethernet)RX packets 5097  bytes 5900501 (5.9 MB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 2766  bytes 311496 (311.4 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0erspan0: flags=4098<BROADCAST,MULTICAST>  mtu 1450ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0gre0: flags=128<NOARP>  mtu 1452unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0gretap0: flags=4098<BROADCAST,MULTICAST>  mtu 1462ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 164  bytes 15044 (15.0 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 164  bytes 15044 (15.0 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0root@ubantu:/home/toney#
root@ubantu:/home/toney# lsmod | grep gre
ip_gre                 28672  0
ip_tunnel              24576  1 ip_gre
gre                    16384  1 ip_gre
root@ubantu:/home/toney#

如果输入完整的命令,则会成功添加上Tunnel-1隧道:

root@ubantu:/home/toney# ifconfig -a
Tunnel-1: flags=144<POINTOPOINT,NOARP>  mtu 1476unspec C0-A8-01-0A-00-00-00-87-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255inet6 2409:8a00:18e9:810:141:383c:ac6f:8b11  prefixlen 64  scopeid 0x0<global>inet6 2409:8a00:18e9:810:200d:99e2:4f3d:cb6f  prefixlen 64  scopeid 0x0<global>inet6 fe80::8e84:574c:7a8b:440a  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:fb:db:ad  txqueuelen 1000  (Ethernet)RX packets 5745  bytes 5947674 (5.9 MB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 2965  bytes 329731 (329.7 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0erspan0: flags=4098<BROADCAST,MULTICAST>  mtu 1450ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0gre0: flags=128<NOARP>  mtu 1452unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0gretap0: flags=4098<BROADCAST,MULTICAST>  mtu 1462ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 169  bytes 15509 (15.5 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 169  bytes 15509 (15.5 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.1.2 配置GRE隧道接口IP

ip addr add 10.1.2.1/24 dev Tunnel-1

或者

ifconfig Tunnel-1 10.1.2.1/24

从添加隧道结果来看,Tunnel-1接口虽然已经成功添加,但是处于down状态,此外也没有IP地址。 不,等等,那我们在添加隧道时指定的remote和local是什么呢?

它是经过GRE隧道封装后的报文IP地址,但是针对什么报文进行封装,目前我们尚未配置

配置此接口IP的目的是:为了确定哪些报文需要进入GRE接口,然后进行隧道封装。为什么需要添加IP呢? 因为我们是通过路由将报文引入到Tunnel-1接口的, 如果不填IP,那么我路由的下一条该写成什么呢, 是吧。

2.1.3 激活GRE隧道接口IP

ifconfig Tunnel-1 up

或者

ip link set Tunnel-1 up

至于配置接口IP和是否up接口,没有什么先后顺序,把他们当做不同的eth接口处理即可。

2.2 CentOS配置:

CentOS虚拟机的配置和Ubantu的配置完全相同,安照此步骤操作即可。

ip tunnel add Tunnel-1 mode gre local 192.168.1.13 remote 192.168.1.10
ip link set Tunnel-1 up
ip addr add 10.1.2.2/24 dev Tunnel-1

查看配置结果r如下:

[root@toney toney]#
[root@toney toney]#
[root@toney toney]# ifconfig
Tunnel-1  Link encap:UNSPEC  HWaddr C0-A8-01-0D-FF-FF-90-6D-00-00-00-00-00-00-00-00inet addr:10.1.2.2  P-t-P:10.1.2.2  Mask:255.255.255.0UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)eth0      Link encap:Ethernet  HWaddr 00:0C:29:DA:34:3Cinet addr:192.168.1.13  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: 2409:8a00:18e9:810:20c:29ff:feda:343c/64 Scope:Globalinet6 addr: fe80::20c:29ff:feda:343c/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:3571 errors:0 dropped:0 overruns:0 frame:0TX packets:781 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:236685 (231.1 KiB)  TX bytes:71021 (69.3 KiB)lo        Link encap:Local Loopbackinet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)

路由表信息如下:

2.3 ping包测试通讯链路:

这里有一点需要注意:Linux系统可能开了iptables过滤功能,因此在ping时出现了类似" ICMP host 192.168.1.13 unreachable - admin prohibited, length 116"信息,详情如下:

百度一下,在两台虚拟机上都执行如下操作即可:

iptables -F

然后在ping包测试,数据可通:

至此,基本GRE隧道环境搭建成功。

3. GRE隧道跨(公)网连接不同子网地址主机

3.1 拓扑环境

目的: 通过GRE隧道将20.1.2.1/24、20.1.3.2/24两个子网连接起来进行通讯。

3.2 Ubantu配置

3.2.1 配置ens33子接口IP

ifconfig eth0:1 192.168.100.1/24

查看接口配置如下:

3.2.2 添加另一个GRE隧道接口并up

ip tunnel add Tunnel-2 mode gre local 192.168.100.1 remote 192.168.100.2

ifconfig Tunnel-2 up

3.2.3 配置隧道接口IP

ifconfig Tunnel-2 20.1.2.1/24

3.2.4 添加对端子网路由表

由于本端没有对端子网20.1.3.0/24的路由,因此需要添加路由,将该网段报文引入到Tunnel-2接口,这样便可以通过GRE隧道进行封装。

route add -net 20.1.3.0/24 gw 20.1.2.1

3.3 CentOS配置

3.3.1 配置ens33子接口IP

ifconfig ens33:1 192.168.100.2/24

3.3.2 添加另一个GRE隧道接口并up

ip tunnel add Tunnel-2 mode gre remote 192.168.100.1 local 192.168.100.2

ifconfig Tunnel-2 up

结果如下:

3.3.3 配置隧道接口IP

ifconfig Tunnel-2 20.1.3.1/24

3.3.4 添加对端子网路由表

由于本端没有对端子网20.1.2.0/24的路由,因此需要添加路由,将该网段报文引入到Tunnel-2接口,这样便可以通过GRE隧道进行封装。

route add -net 20.1.2.0/24 gw 20.1.3.1

3.4 ping测试链路连通性

ubantu与CentOS虚拟机之间搭建GRE隧道相关推荐

  1. centos7搭建GRE隧道进行通信

    为了研究gre协议需要搭建gre隧道来进行测试,需要两个能通信的服务器 测试环境 服务器A: IP地址: 10.20.50.148 GRE内部IP地址: 203.0.113.1 服务器B: IP地址: ...

  2. 在这里,TQ2416系列----开发板与虚拟机之间搭建NFS

    TQ2416  开发板与虚拟机之间搭建NFS 在实际的开发中,当我们在开发板上搭建好ARM+LINUX的开发环境(uboot,linux内核,文件系统都裁剪幷移植到开发板上),专注于应用程序的开发的时 ...

  3. linux 隧道服务器,如何在两台CentOS 7服务器之间建立GRE隧道

    介绍 什么是GRE?有哪些优势? GRE代表Generic Routing Encapsulation(通用路由封装),它允许两台服务器私下通信.GRE隧道非常有用,因为它们允许所有类型的流量通过.它 ...

  4. gre vim linux,OVS搭建GRE隧道和VXLAN

    配置IP(以host1为例): ifconfig eth0 10.0.10.10/24 (host1 ifconfig eth0 10.10.10.10/24  (host2 创建网桥 ovs-vsc ...

  5. Linux命令sngre,linux gre隧道创建

    linux gre隧道创建 实验环境 两台可以相互通信的虚拟机,两个虚拟机在不通的网段.如下所示 host A: [[email protected] ~]# ip a 1: lo: mtu 6553 ...

  6. 华为 GRE实验(GRE隧道)

    每日一句: We are all in the gutter, but some of us arelooking at the stars. 我们都生活在阴沟里,但仍有人仰望星空. ------奥斯 ...

  7. hadoop学习;安装jdk,workstation虚拟机v2v迁移;虚拟机之间和跨物理机之间ping网络通信;virtualbox的centos中关闭防火墙和检查服务启动...

    JDK 在Ubuntu下的安装 与 环境变量的配置 前期准备工作: 找到  JDK 和 配置TXT文件  并拷贝到桌面下  不是目录 而是文件拷贝到桌面下 以下的命令部分就直接复制粘贴就能够了 1.配 ...

  8. 虚拟机:centos在主机和虚拟机之间传输文件

    虚拟机:centos在主机和虚拟机之间传输文件 问题原因:   想在虚拟机上跑一下安装oracle的流程,但是官网已经没有11g版本的压缩包了,遂从网盘上找资源,把安装包下载到了本机上.想把压缩文件从 ...

  9. 虚拟机安装postfix服务器,CentOS 7 下搭建邮件服务器(bind+postfix+dovecot)

    CentOS 7下搭建邮件服务器 前提环境:CentOS 7虚拟机IP为192.168.43.124 主机名为mail.zxp.com 修改主机名:hostnamectl set-hostname m ...

最新文章

  1. ni visa pci_CHINACOAT 2019“推荐品牌”赫普菲乐|PCI可名文化出品
  2. Docker 修改镜像源地址
  3. 2020-11-13(c++下JNI开发不同点)
  4. linux目录表及功能n鸟哥,鸟哥linux私房菜_笔记_Linux的文件权限与目录配置
  5. java利用求余水仙花数_java求水仙花数
  6. java中可重入锁的学习总结
  7. 欧盟批准ATT收购时代华纳 或年底前完成交易
  8. MySQL C 客户端的内存泄漏问题
  9. 论文阅读:BPFINet: Boundary-aware progressive feature integration network for salient object detection
  10. 易语言模拟按键 c打不出,易语言怎么编写模拟按键
  11. MAC表和ARP表的老化时间:
  12. python 保存为tiff文件, 图像转tiff, tif文件添加投影
  13. 自动化c语言课程设计,自动化与电气工程学院C语言课程设计报告.doc
  14. 【python】模拟斗牛纸牌游戏「牛牛」
  15. 如何在Excel中快速调整列宽
  16. python3 unicode_关于你不想知道的所有Python3 unicode特性
  17. 无人机开发-介绍Mavlink协议的消息组成、如何看懂繁杂的mavlink官网介绍、简单介绍地面站与飞控的通讯流程
  18. c语言 英文单词频率统计 哈希存储
  19. Vue实现动态路由导航
  20. 使用PY003基于外部中断+定时器的方式实现NEC红外解码

热门文章

  1. php扣费到期自动续期,PHP 处理苹果的自动续签
  2. 解决报错Cannot connect to the Maven process. Try again later. If the problem persists......
  3. 05-现代威胁环境下的10个SIEM用例
  4. numpy array 增加一列(行)
  5. request库单一视频下载
  6. [附源码]计算机毕业设计JAVA旅游管理系统
  7. ros中的电机速度控制_ROS 学习系列-- 四轮机器人线性速率、角速度和电机PWM线性关系的定量分析...
  8. android自定义3d饼图,Android使用j4lChartAndroid插件绘制3D饼图
  9. 流媒体-RTMP协议-rtmpdump-flv封装解析(一)
  10. 主播直播时如何选择合适的内容?如何打造主播人设?