两地私网互通又不想拉专线?华为防火墙GRE隧道配完像一根线两头
总部和分支机构、或者两个厂区,各有一套私有 IP 网络(比如一头是 10.1.1.0/24,另一头是 10.1.2.0/24),中间隔着 Internet。拉条专线?月租不便宜。让两边私网流量直接走公网裸奔?私有地址在公网根本路由不了,也不安全。经典解法就是在两台出口防火墙之间建一条 GRE 隧道:把私网报文装进 GRE 隧道里跨公网传输,两边网络看起来就像接在同一根网线的两头,静态路由照跑。华为官方文档有一套完整的 Web 举例——配置基于静态路由的 GRE 隧道,本篇按官方步骤原样走一遍,两台设备都给全,配置脚本照录供逐行核对。
组网需求(官方原文转述)
DeviceA 和 DeviceB 通过 Internet 相连,两者公网路由可达。网络1 和网络2 是两个私有的 IP 网络,内部部署了静态路由。通过在 DeviceA 和 DeviceB 之间建立 GRE 隧道实现两个私有 IP 网络跨越 Internet 交互静态路由信息。本例中 interface1 和 interface2 分别代表 DeviceA 的 GE0/0/1 和 GE0/0/2,interface3 和 interface4 分别代表 DeviceB 的 GE0/0/1 和 GE0/0/2。
数据规划(官方原表转述)
| 项目 | DeviceA | DeviceB |
|---|---|---|
| GE0/0/1(公网口,Untrust 区) | 1.1.1.1/24 | 3.3.3.3/24 |
| GE0/0/2(私网口,Trust 区) | 10.1.1.1/24 | 10.1.2.1/24 |
| Tunnel1 隧道口 IP | 172.16.2.1/24 | 172.16.2.2/24 |
| GRE 源地址 | 1.1.1.1/24 | 3.3.3.3/24 |
| GRE 目的地址 | 3.3.3.3/24 | 1.1.1.1/24 |
| 隧道识别关键字 | 123456 | 123456 |
注意隧道的源和目的都填对端与自身的公网口 IP,互为镜像;隧道识别关键字两端必须同为 123456。配置思路(官方原文三条):
- 在 DeviceA 和 DeviceB 上分别创建一个 Tunnel 接口,在 Tunnel 接口中指定隧道的源 IP 地址和目的 IP 等封装参数。
- 配置静态路由,将出接口指定为本设备的 Tunnel 接口。该路由的作用是将需要经过 GRE 隧道传输的流量引入到 GRE 隧道中。
- 配置安全策略,允许 GRE 隧道的建立和流量的转发。
DeviceA 配置:四步(官方 Web 路径)
第一步,配置接口的 IP 地址并加入安全区域。选择"网络 > 接口",单击 GE0/0/1 对应的编辑入口,按如下参数配置,完成后单击"确定":
| 参数 | 值 |
|---|---|
| 安全区域 | untrust |
| IPv4 / IP地址 | 1.1.1.1/24 |
参考上述步骤配置 GE0/0/2 接口:
| 参数 | 值 |
|---|---|
| 安全区域 | trust |
| IPv4 / IP地址 | 10.1.1.1/24 |
第二步,配置 Tunnel 接口的封装参数。选择"网络 > GRE > GRE",在"GRE 接口列表"中单击"新建",配置 GRE 隧道接口参数(按数据规划表:接口名 Tunnel1、IP 地址 172.16.2.1/24、源地址 1.1.1.1/24、目的地址 3.3.3.3/24、隧道识别关键字 123456),完成后单击"确定"。
第三步,配置静态路由,把要去对端私网的流量引进隧道。选择"网络 > 路由 > 静态路由",在"静态路由列表"中单击"新建",按如下配置,完成后单击"确定":
| 参数 | 值 |
|---|---|
| 协议类型 | IPv4 |
| 目的地址/掩码 | 10.1.2.0/24 |
| 出接口 | Tunnel1 |
这条路由就是 GRE 生效的关键:DeviceA 上凡是去 10.1.2.0/24 的流量,统统从 Tunnel1 出去,被 GRE 封装后走公网送到对端。
第四步,配置安全策略,允许 GRE 隧道的建立和流量的转发。选择"策略 > 安全策略 > 安全策略",单击"新建安全策略"。这里要配四条,官方把逻辑分得很清楚——policy1/policy2 放封装前的原始私网报文(走 Trust 与 DMZ 之间),policy3/policy4 放封装后的 GRE 报文(走 Local 与 Untrust 之间):
policy1(Trust → DMZ,允许封装前的报文通过):
| 参数 | 值 |
|---|---|
| 名称 | policy1 |
| 源安全区域 | trust |
| 目的安全区域 | dmz |
| 源地址 | 10.1.1.0/24 |
| 目的地址 | 10.1.2.0/24 |
| 动作 | 允许 |
policy2(DMZ → Trust):
| 参数 | 值 |
|---|---|
| 名称 | policy2 |
| 源安全区域 | dmz |
| 目的安全区域 | trust |
| 源地址 | 10.1.2.0/24 |
| 目的地址 | 10.1.1.0/24 |
| 动作 | 允许 |
policy3(Local → Untrust,允许封装后的 GRE 报文通过):
| 参数 | 值 |
|---|---|
| 名称 | policy3 |
| 源安全区域 | local |
| 目的安全区域 | untrust |
| 源地址 | 1.1.1.1/32 |
| 目的地址 | 3.3.3.3/32 |
| 服务 | gre |
| 动作 | 允许 |
policy4(Untrust → Local):
| 参数 | 值 |
|---|---|
| 名称 | policy4 |
| 源安全区域 | untrust |
| 目的安全区域 | local |
| 源地址 | 3.3.3.3/32 |
| 目的地址 | 1.1.1.1/32 |
| 服务 | gre |
| 动作 | 允许 |
DeviceB 配置:四步对称(官方 Web 路径)
第一步,接口。选择"网络 > 接口",GE0/0/1 配 untrust 区、IP 3.3.3.3/24;GE0/0/2 配 trust 区、IP 10.1.2.1/24。
第二步,Tunnel 接口。选择"网络 > GRE > GRE",新建 GRE 接口:接口名 Tunnel1、IP 地址 172.16.2.2/24、源地址 3.3.3.3/24、目的地址 1.1.1.1/24、隧道识别关键字 123456——与 DeviceA 正好镜像。
第三步,静态路由。选择"网络 > 路由 > 静态路由",新建一条:协议类型 IPv4、目的地址/掩码 10.1.1.0/24、出接口 Tunnel1。
第四步,安全策略四条,与 DeviceA 同名对称——policy1(trust → dmz,源 10.1.2.0/24,目的 10.1.1.0/24,允许);policy2(dmz → trust,源 10.1.1.0/24,目的 10.1.2.0/24,允许);policy3(local → untrust,源 3.3.3.3/32,目的 1.1.1.1/32,服务 gre,允许);policy4(untrust → local,源 1.1.1.1/32,目的 3.3.3.3/32,服务 gre,允许)。
验证:两端互 ping + 路由表见 Tunnel1(官方检查结果原文)
- 网络1 中的 PC 与网络2 中的 PC 能够相互 ping 通。
- 查看 DeviceA 的"网络 > 路由 > 路由表"可以看到目的地址为 10.1.2.0/24、出接口为 Tunnel1 的路由。
判读要点:路由表里那条出接口为 Tunnel1 的静态路由是流量进隧道的凭证,两端 PC 互 ping 通则说明封装、解封装、四条安全策略全链路成立。如果路由在但 ping 不通,按顺序查四条策略(尤其 policy3/policy4 的 gre 服务有没有漏)和两端隧道识别关键字是否一致。
DeviceA 配置脚本(官方原文,供逐行核对)
#
interface GE0/0/1
ip address 1.1.1.1 255.255.255.0
#
interface GE0/0/2
ip address 10.1.1.1 255.255.255.0
#
interface Tunnel1
ip address 172.16.2.1 255.255.255.0
tunnel-protocol gre
source 1.1.1.1
destination 3.3.3.3
gre key cipher %+%#=F~T>w'>n:QlQ8BI3>67Ir3I*Onzv'\(%+%#
#
ip route-static 10.1.2.0 255.255.255.0 Tunnel1
#
firewall zone trust
set priority 85
add interface GE0/0/2
#
firewall zone untrust
set priority 5
add interface GE0/0/1
#
firewall zone dmz
set priority 50
add interface Tunnel 1
#
security-policy
rule name policy1
source-zone trust
destination-zone dmz
source-address 10.1.1.0 mask 255.255.255.0
destination-address 10.1.2.0 mask 255.255.255.0
action permit
rule name policy2
source-zone dmz
destination-zone trust
source-address 10.1.2.0 mask 255.255.255.0
destination-address 10.1.1.0 mask 255.255.255.0
action permit
rule name policy3
source-zone local
destination-zone untrust
source-address 1.1.1.1 mask 255.255.255.255
destination-address 3.3.3.3 mask 255.255.255.255
service gre
action permit
rule name policy4
source-zone untrust
destination-zone local
source-address 3.3.3.3 mask 255.255.255.255
destination-address 1.1.1.1 mask 255.255.255.255
service gre
action permit
DeviceB 配置脚本(官方原文,供逐行核对)
#
interface GE0/0/1
ip address 3.3.3.3 255.255.255.0
#
interface GE0/0/2
ip address 10.1.2.1 255.255.255.0
#
interface Tunnel1
ip address 172.16.2.2 255.255.255.0
tunnel-protocol gre
source 3.3.3.3
destination 1.1.1.1
gre key cipher %+%#=F~T>w'>n:QlQ8BI3>67Ir3I*Onzv'\(%+%#
#
ip route-static 10.1.1.0 255.255.255.0 Tunnel1
#
firewall zone trust
set priority 85
add interface GE0/0/2
#
firewall zone untrust
set priority 5
add interface GE0/0/1
#
firewall zone dmz
set priority 50
add interface Tunnel 1
#
security-policy
rule name policy1
source-zone trust
destination-zone dmz
source-address 10.1.2.0 mask 255.255.255.0
destination-address 10.1.1.0 mask 255.255.255.0
action permit
rule name policy2
source-zone dmz
destination-zone trust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 10.1.2.0 mask 255.255.255.0
action permit
rule name policy3
source-zone local
destination-zone untrust
source-address 3.3.3.3 mask 255.255.255.255
destination-address 1.1.1.1 mask 255.255.255.255
service gre
action permit
rule name policy4
source-zone untrust
destination-zone local
source-address 1.1.1.1 mask 255.255.255.255
destination-address 3.3.3.3 mask 255.255.255.255
service gre
action permit
脚本里 gre key 显示为密文串(cipher 加密的正常呈现),核对时别拿明文 123456 去对。
注意事项(官方口径整理)
- Tunnel 接口要加入 DMZ 区域(脚本中 firewall zone dmz / add interface Tunnel 1),两条封装前的域间策略(Trust↔DMZ)才能命中隧道流量。
- 四条安全策略缺一不可:封装前报文走 Trust↔DMZ 两条,封装后的 GRE 报文走 Local↔Untrust 两条且服务必须指定 gre——只配前两条隧道建不起来,只配后两条业务报文过不去。
- 隧道识别关键字两端必须一致(本例 123456),不一致时隧道无法识别对端报文。
- 静态路由的出接口必须指向 Tunnel1,这是把流量引进隧道的开关;漏配这条,私网流量依旧从公网口裸发。
- GRE 本身不加密:本例解决的是"两个私有 IP 网络跨公网交互静态路由"。如果这条通道的载荷还需要加密保护,官方文档另有《Web举例:配置IPsec over GRE隧道》的配置示例,可按需叠加。
两地互联的隧道方案一头连路由、一头连安全策略,改动前最好把现有出口的规划盘清楚,有需要的贵州企业可以让诚鑫致达科技帮你盘一盘再动手。各厂商设备的命令与默认参数存在差异,本文步骤与命令均出自华为官方文档,操作前请核对你的设备型号与软件版本。
源:华为官方文档 USG防火墙6000F-S/security_cfgcase_gre_0001_22.0.md《Web举例:配置基于静态路由的GRE隧道》