一、基础配置
前面我们学习了GRE的理论知识,还是比较复杂的,现在来结合实践来验证下GRE的应用。

首先我们需要明确分支和总部都通过运营商提供的线路访问Internet,但是分支想要访问总部只能通过Internet如微信、QQ等方式来实现,私网路由是不会在公网设备上存在的。我们的需求是在不修改网络架构的情况下实现内网互通。
一般情况下我们会在出口接口上配置NAT用于将私网地址转换成公网地址,然后缺省路由指向运营商设备。
基础配置:
分支:
# 创建ACL用于NAT转换
acl number 3000
rule 5 permit ip
# 公网接口
interface GigabitEthernet0/0/0
ip address 202.96.134.133 255.255.255.0
nat outbound 3000
# 内网接口
interface GigabitEthernet0/0/1
ip address 192.168.1.254 255.255.255.0
#
ip route-static 0.0.0.0 0.0.0.0 202.96.134.132
Internet:只需要配置接口即可
#
interface GigabitEthernet0/0/0
ip address 202.96.134.132 255.255.255.0
#
interface GigabitEthernet0/0/1
#
interface GigabitEthernet0/0/2
ip address 185.74.54.128 255.255.255.0
总部:
# 创建ACL用于NAT转换
acl number 3000
rule 5 permit ip
# 内网接口
interface GigabitEthernet0/0/1
ip address 172.16.1.254 255.255.255.0
#公网接口并应用NAT
interface GigabitEthernet0/0/2
ip address 185.74.54.129 255.255.255.0
nat outbound 3000
#
ip route-static 0.0.0.0 0.0.0.0 185.74.54.128
ip route-static 192.168.1.0 255.255.255.0 Tunnel0/0/0
目前PC能够通过NAT访问对应的公网出口的,但是无法访问对端内网的。

二、配置GRE隧道
首先我们先规划一个网段用于Tunnel隧道的接口地址,尽量保证在一个网段里面吧,防止出现一些不可控因素,这里以10.0.0.0/24网段为例。然后保证双方的公网接口也就是分支和总部的出口地址是能够互相访问的。
配置:
分支:
# 创建一个tunnel接口
interface Tunnel0/0/0
ip address 10.0.0.2 255.255.255.0 # 配置隧道接口
tunnel-protocol gre # 配置隧道封装协议为gre
source 202.96.134.133 # 配置隧道的源地址为出口公网地址
destination 185.74.54.129 # 配置隧道的目的地址,对端的公网地址
# 这里简单以静态路由指向隧道接口
ip route-static 172.16.1.0 255.255.255.0 Tunnel0/0/0
总部:
# 创建一个tunnel0/0/0
interface Tunnel0/0/0
ip address 10.0.0.1 255.255.255.0 # 配置隧道接口
tunnel-protocol gre # 隧道的封装协议为GRE
source 185.74.54.129 # 定义源地址,也就是公网出口地址
destination 202.96.134.133 # 定义目的地址,表明需要找到对端的公网地址
# 这里简单配置静态路由指向tunnel隧道即可
ip route-static 192.168.1.0 255.255.255.0 Tunnel0/0/0
验证:



大致将一下报文逻辑:
-
PC1发送报文源地址为192.168.1.1,目的地址为172.16.1.1的ICMP报文,自身校验后发现不是同一个网段,然后发送到网关也就是出口路由器G0/0/1。 -
分支出口路由器创建了一个tunnel0/0/0,指定源地址是公网接口,目的地址是对端公网地址,使用gre封装 -
分支出口路由器定义了静态路由到达172.16.1.0/24指向tunnel0/0/0,因此当PC1的ICMP报文到达路由器会进行gre封装,加上外层IP头部源目地址,发送到总部路由器。 -
总部路由器接收到目的地址为自身的IP报文进行解封装,然后得到内层IP头部,然后根据自身直连路由找到172.16.1.1,从内网G0/0/1转发出去
三、进行数据校验与安全验证
3.1 数据校验
通过进行数据校验确保数据的完整性。
配置:
# 在隧道接口开启校验
interface Tunnel0/0/0
ip address 10.0.0.2 255.255.255.0
tunnel-protocol gre
source 202.96.134.133
destination 185.74.54.129
gre checksum # 开启校验功能
# 在隧道接口开启校验
interface Tunnel0/0/0
ip address 10.0.0.1 255.255.255.0
tunnel-protocol gre
source 185.74.54.129
destination 202.96.134.133
gre checksum # 开启校验功能
然后我们再去抓包查看:

3.2 安全认证
目前我们是只需要创建隧道接口,配置源目地址就可以建立隧道了,如果被非法抓包获取到gre报文进行伪造可以造成严重后果,因此可以开启key认证。
配置:
# 在隧道接口开启key认证
# 分支
interface Tunnel0/0/0
ip address 10.0.0.2 255.255.255.0
tunnel-protocol gre
source 202.96.134.133
destination 185.74.54.129
gre key 8096 # key只能是<0-4294967295>的数字
gre checksum
总部:
interface Tunnel0/0/0
ip address 10.0.0.1 255.255.255.0
tunnel-protocol gre
source 185.74.54.129
destination 202.96.134.133
gre key 8096
gre checksum
再进行抓包:

基本实验就是这样简单,只要双方网络可达,然后创建隧道接口指定源目地址和封装协议就能建立GRE隧道,通过在隧道接口进行简单校验和key验证可以实现一定安全但是相对还是比较薄弱的。
本文由 mdnice 多平台发布