前言
本次介绍的GRE-VPN是解决两个私网互通的解决办法之一。 GRE在公网上传输数据 但对数据不进行加密。 GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。因为其安全性较低,一般采用ipsec+gre传输方式
GRE通用路由封装
原理
因为运营商没有私网地址段 所以想两个地区私网互通需要VPN技术 VPN技术是在原有报文的网络层之上封装属于VPN的头部 VPN头部包含本端公网IP地址,对端公网IP地址 运营商在传递报文时 只考虑VPN的头部 而不考虑被封装的私网地址 从而解决私网互通 可以将私网ipv4-公网ipv6 私网ipv6->公网ipv4 私网ipv4->公网ipv4 私网ipv6->公网ipv6
ip协议号 GRE47
GRE转发过程
在收到数据包的时候 发现源地址为10.1.1.1目的地址为10.1.3.1 然后查询路由表
查询到10.1.3.1网段是通过ospf学习到的 并且下一跳接口是tunnel0 地址是隧道目的地址 会进行vpn封装处理 [隧道两段的地址 随意配置 点到点 不同网段都可以]
中途转发 根据外层的公网地址转发
对端私网出口解封装 剥离公网报文头部
优点
- 配置简单 容易部署
- 支持路由组播
- 支持多种网络层协议
缺点
- 点对点隧道 P2P
- 静态配置隧道参数
- 部署复杂 连接关系时代驾巨大
- 缺乏安全性
核心功能
打通隧道,打通私网
其他特性
减少ttl跳数 比如跨越公网设备,不计条数
GRE隧道物理接口UP 是创建了隧道 链路层UP 是配置了目的地址 只要有到达目的地址的路由,隧道口即可激活
配置过程
- 先确保进行隧道通信的两个私网与公网互通
- 配置隧道
// 创建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 <interval [ times ] >
// 配置静态路由 [*]
[router] ip route-static <对端网段> <对端子网掩码> tunnel <隧道名称> // 此处写隧道地址的IP地址不起作用
举例配置
网络拓扑
实验要求
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.
报文分析
GRE+OSPF
实验拓扑
原有静态路由替换为ospf即可
报文分析
连通性测试
查看路由表
常见问题
GRE+OSPF 私网出口不能宣告OSPF 否则会导致邻居updown
A地公网地址宣告OSPF后 对端B地路由器会通过隧道学习到A地公网地址 同时B地去往A地私网下一跳是隧道接口tunnel 地址为A地公网地址 但是A地公网地址 通过隧道学习 所以A地的下一跳接口也指向tunnel 造成路由迭代问题
GREVPN隧道虚假问题
解决办法 开启GRE的keeplive,用于探测隧道对端是否可达 [开一端也可以]