GRE VPN隧道技术

400 阅读5分钟

前言

本次介绍的GRE-VPN是解决两个私网互通的解决办法之一。 GRE在公网上传输数据 但对数据不进行加密。 GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。因为其安全性较低,一般采用ipsec+gre传输方式

GRE通用路由封装

原理

因为运营商没有私网地址段 所以想两个地区私网互通需要VPN技术 VPN技术是在原有报文的网络层之上封装属于VPN的头部 VPN头部包含本端公网IP地址,对端公网IP地址 运营商在传递报文时 只考虑VPN的头部 而不考虑被封装的私网地址 从而解决私网互通 可以将私网ipv4-公网ipv6 私网ipv6->公网ipv4 私网ipv4->公网ipv4 私网ipv6->公网ipv6

图片.png

ip协议号 GRE47

图片.png

GRE转发过程

图片.png

在收到数据包的时候 发现源地址为10.1.1.1目的地址为10.1.3.1 然后查询路由表

图片.png

查询到10.1.3.1网段是通过ospf学习到的 并且下一跳接口是tunnel0 地址是隧道目的地址 会进行vpn封装处理 [隧道两段的地址 随意配置 点到点 不同网段都可以]

图片.png

中途转发 根据外层的公网地址转发 图片.png

对端私网出口解封装 剥离公网报文头部 图片.png

优点

  1. 配置简单 容易部署
  2. 支持路由组播
  3. 支持多种网络层协议

缺点

  1. 点对点隧道 P2P
  2. 静态配置隧道参数
  3. 部署复杂 连接关系时代驾巨大
  4. 缺乏安全性

核心功能

打通隧道,打通私网

其他特性

减少ttl跳数 比如跨越公网设备,不计条数

GRE隧道物理接口UP 是创建了隧道 链路层UP 是配置了目的地址 只要有到达目的地址的路由,隧道口即可激活

配置过程

  1. 先确保进行隧道通信的两个私网与公网互通
  2. 配置隧道
// 创建Tunnel接口,并指定隧道模式为GRE
[router]interface Tunnel <隧道接口名称> mode gre   // 范围为0-1023

// 配置隧道地址
[router]ip address <私网IP地址> <子网掩码>

// 配置隧道源地址
[router]source [<GigabitEthernet|Serial|Tunnel|> 接口类型+端口 | 本端出口公网IP地址]  // 源地址可为具体端口或者ip地址

// 配置隧道目的地址
[router]destination <对端出口公网IP地址>

// 开启keeplive检测 避免数据黑洞
[router]keepalive <intervaltimes ] >

// 配置静态路由 [*]
[router] ip route-static <对端网段> <对端子网掩码> tunnel <隧道名称>    // 此处写隧道地址的IP地址不起作用

举例配置

网络拓扑

image.png

实验要求

CEA与CEB是公司两个私网的出口路由 PEA与PEB为运营商边缘路由器 运营商采用OSPF 实验要求CEA与CEB私网间能互通 使PCA访问PCB 本次使用GRE隧道技术

设备配置

CEA

# 配置私网网关
interface GigabitEthernet0/1
 port link-mode route
 combo enable copper
 ip address 172.16.1.1 255.255.255.0
# 配置出口地址以及NAT
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 12.1.1.2 255.255.255.0
 nat outbound 3000
# 配置隧道
interface Tunnel0 mode gre
 ip address 10.1.1.1 255.255.255.0
 source GigabitEthernet0/2
 destination 34.1.1.2
# 配置缺省出口路由以及对端私网路由
 ip route-static 0.0.0.0 0 12.1.1.1
 ip route-static 192.168.1.0 24 Tunnel0
# 配置出口ACL
acl advanced 3000
 rule 15 permit ip source 172.16.1.0 0.0.0.255
 rule 20 deny ip

PEA

# 配置OSPF
ospf 1
 area 0.0.0.0
  network 1.1.1.1 0.0.0.0
  network 12.1.1.0 0.0.0.255
  network 23.1.1.0 0.0.0.255
# 配置loopback0口
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255
# 配置G0/0地址
interface GigabitEthernet0/0
 port link-mode route
 combo enable copper
 ip address 23.1.1.1 255.255.255.0
# 配置G0/2地址
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 12.1.1.1 255.255.255.0

PEB

# 配置OSPF
ospf 1
 area 0.0.0.0
  network 2.2.2.2 0.0.0.0
  network 23.1.1.0 0.0.0.255
  network 34.1.1.0 0.0.0.255
# 配置loopback0口
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255
# 配置G0/0地址
interface GigabitEthernet0/0
 port link-mode route
 combo enable copper
 ip address 23.1.1.2 255.255.255.0
# 配置G0/2地址
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 34.1.1.1 255.255.255.0

CEB

# 配置私网网关
interface GigabitEthernet0/1
 port link-mode route
 combo enable copper
 ip address 192.168.1.1 255.255.255.0
# 配置出口地址以及NAT
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 34.1.1.2 255.255.255.0
 nat outbound 3000
# 配置隧道
interface Tunnel0 mode gre
 ip address 10.1.1.2 255.255.255.0
 source GigabitEthernet0/2
 destination 12.1.1.2
# 配置缺省出口路由以及对端私网路由
 ip route-static 0.0.0.0 0 34.1.1.1
 ip route-static 172.16.1.0 24 Tunnel0
# 配置出口ACL
acl advanced 3000
 rule 15 permit ip source 192.168.1.0 0.0.0.255
 rule 20 deny ip

连通性测试 PCA>PCB

<H3C>ping -a 172.16.1.2 172.16.1.2
Ping 172.16.1.2 (172.16.1.2) from 172.16.1.2: 56 data bytes, press CTRL_C to break
56 bytes from 172.16.1.2: icmp_seq=0 ttl=255 time=0.033 ms
56 bytes from 172.16.1.2: icmp_seq=1 ttl=255 time=0.042 ms
56 bytes from 172.16.1.2: icmp_seq=2 ttl=255 time=0.098 ms
56 bytes from 172.16.1.2: icmp_seq=3 ttl=255 time=0.099 ms
56 bytes from 172.16.1.2: icmp_seq=4 ttl=255 time=0.113 ms

--- Ping statistics for 172.16.1.2 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.033/0.077/0.113/0.033 ms
<H3C>%Apr 15 17:21:55:398 2024 H3C PING/6/PING_STATISTICS: Ping statistics for 172.16.1.2: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 0.033/0.077/0.113/0.033 ms.

报文分析

图片.png

GRE+OSPF

实验拓扑

图片.png

原有静态路由替换为ospf即可

报文分析

图片.png

连通性测试

图片.png

查看路由表 图片.png

常见问题

GRE+OSPF 私网出口不能宣告OSPF 否则会导致邻居updown

A地公网地址宣告OSPF后 对端B地路由器会通过隧道学习到A地公网地址 同时B地去往A地私网下一跳是隧道接口tunnel 地址为A地公网地址 但是A地公网地址 通过隧道学习 所以A地的下一跳接口也指向tunnel 造成路由迭代问题

GREVPN隧道虚假问题

解决办法 开启GRE的keeplive,用于探测隧道对端是否可达 [开一端也可以]