news 2026/10/17 3:09:21

华为eNSP GRE隧道实验:从配置到排错全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为eNSP GRE隧道实验:从配置到排错全解析

1. 先搞清楚GRE隧道到底在什么场景下值得用

很多人第一次接触GRE,是因为看到教程里说"可以打通两个私网"。但真到了自己动手的时候,往往卡在第一个问题上:我到底该不该用GRE?这个问题不搞清楚,后面配完了也是白配。

GRE,全称Generic Routing Encapsulation,通用路由封装。它的核心逻辑就一句话:把一种协议的数据包整个套进另一种协议的数据包里,像套娃一样。最常见的用法是把私网IP包塞进公网IP包里,让两个原本互相看不见的私网,通过公网这条"公路"建立一条虚拟的直连通道。

但这里有个关键点很多人忽略:GRE本身不加密。它只是封装,不负责安全。所以如果你的数据在公网上跑,GRE隧道里的内容是可以被看到的。这也是为什么实际项目里,GRE经常和IPSec搭配使用——GRE负责封装多协议,IPSec负责加密。不过在eNSP里做实验,我们先把GRE隧道本身跑通,加密的事情后面再说。

那什么场景下适合用GRE?我总结了几类:

  • 两个站点之间需要跑动态路由协议:比如两边都是OSPF或者IS-IS,想通过公网让两个私网互相学到路由。GRE隧道可以把公网"伪装"成一条直连链路,路由协议跑在隧道上就跟跑在专线上一样。
  • 需要传输组播或非IP协议:IPSec只能加密单播IP包,但GRE可以封装组播、广播甚至非IP协议。所以如果业务里有组播需求,GRE是绕不开的。
  • 临时打通两个异构网络:比如一边是IPv4,一边是IPv6,想通过GRE做过渡,虽然这不是最优雅的方案,但确实能快速跑通。

反过来说,如果只是两个点之间传一点单播数据,而且对安全有要求,那直接用IPSec就够了,没必要套一层GRE。多一层封装就多一层开销,MTU问题、分片问题都会跟着来。

在eNSP里做GRE实验,最大的好处是你可以随便折腾,配错了大不了重启设备。但实验环境有个坑:eNSP的模拟设备性能有限,如果你在隧道上跑OSPF还开了一堆调试,可能会卡到怀疑人生。所以建议先跑通静态路由,再上动态路由。

提示:eNSP里的AR系列路由器对GRE支持是完整的,但如果你用的是某些精简版镜像,可能会发现tunnel接口起不来。遇到这种情况,先检查镜像版本,换一个完整的AR镜像通常就能解决。

2. 实验拓扑设计与地址规划的门道

动手之前,先把拓扑想清楚。我见过太多人一上来就开设备、连线条,结果配到一半发现地址冲突了,或者接口选错了,又得推倒重来。花十分钟画个拓扑图,能省你半小时的排错时间。

2.1 三台路由器的经典三角结构

GRE实验最经典的拓扑是三台路由器:两台边缘路由器各自连接一个私网,中间一台路由器模拟公网。这个结构的好处是清晰——你能明确区分"公网部分"和"私网部分",排错的时候也容易定位问题出在哪一段。

具体来说:

  • R1:左边站点的边缘路由器,连接私网A(比如192.168.1.0/24)
  • R2:中间的公网路由器,只负责转发公网流量
  • R3:右边站点的边缘路由器,连接私网B(比如192.168.2.0/24)

R1和R3之间通过R2所在的公网建立GRE隧道。隧道建立后,R1和R3之间就相当于有一条直连链路,私网A和私网B可以通过这条链路互相通信。

2.2 地址规划:公网和私网必须泾渭分明

地址规划是很多人容易翻车的地方。我的建议是:公网用一组地址段,私网用另一组,隧道用第三组。三组地址不要有任何重叠,否则路由表会乱成一锅粥。

具体规划如下表:

设备接口地址说明
R1GE0/0/010.0.12.1/24连接公网R2
R1GE0/0/1192.168.1.1/24连接私网A
R1Tunnel0/0/0172.16.1.1/24GRE隧道接口
R2GE0/0/010.0.12.2/24连接R1
R2GE0/0/110.0.23.2/24连接R3
R3GE0/0/010.0.23.3/24连接公网R2
R3GE0/0/1192.168.2.1/24连接私网B
R3Tunnel0/0/0172.16.1.2/24GRE隧道接口

这里有个细节:隧道接口的地址我用了172.16.1.0/24这个段。为什么不用192.168.x.x?因为私网A和私网B已经占了192.168.1.0和192.168.2.0,如果隧道也用192.168段,虽然不冲突,但看起来容易混淆。用172.16段做隧道地址,一眼就能区分出来这是"隧道专用"。

另外,隧道接口的地址必须是两边在同一个网段,因为隧道本质上是一条点对点链路。R1的Tunnel0/0/0是172.16.1.1/24,R3的Tunnel0/0/0是172.16.1.2/24,它们在同一网段,这样隧道两端才能直接通信。

2.3 公网路由怎么通

在建立隧道之前,R1和R3必须能通过公网互相ping通对方的公网接口地址。也就是说,R1要能ping通10.0.23.3,R3要能ping通10.0.12.1。这是隧道能建立的前提。

在eNSP里,最简单的做法是在R2上什么都不配,R1和R3各写一条默认路由指向R2。但更规范的做法是在三台路由器上跑OSPF,把公网段宣告进去。两种方式都可以,看你的实验目的。如果只是想快速跑通GRE,静态路由就够了;如果想顺便练一下OSPF,那就一起配。

我个人的习惯是:实验环境用静态路由,生产环境用动态路由。因为实验里拓扑简单,静态路由一目了然,排错也快。生产环境拓扑复杂,静态路由维护成本太高。

注意:eNSP里配置接口地址后,记得用display ip interface brief确认接口状态是Up。如果接口是Down,先检查连线是否正确,再检查接口是否被shutdown了。

3. 隧道接口配置:GRE的核心操作

隧道接口是GRE的灵魂。没有隧道接口,GRE就是一句空话。但隧道接口的配置有几个参数容易让人迷惑,我一个个拆开讲。

3.1 创建Tunnel接口并指定模式

在华为设备上,创建隧道接口的命令是:

interface Tunnel0/0/0 tunnel-protocol gre

第一行创建了一个编号为0/0/0的隧道接口。这个编号你可以自己定,但建议从0/0/0开始,方便记忆。第二行指定隧道协议为GRE。如果不指定,默认可能是其他协议,隧道就起不来。

这里有个坑:隧道接口的编号在不同设备上可能不一样。有些设备支持Tunnel0/0/0,有些只支持Tunnel0/0/1或者Tunnel1。在eNSP里,AR路由器通常支持Tunnel0/0/0到Tunnel0/0/7。如果你输入interface Tunnel0/0/0提示错误,试试换个编号。

3.2 指定隧道的源和目的

这是GRE配置里最关键的一步:

source 10.0.12.1 destination 10.0.23.3

source是本地公网接口的地址,destination是对端公网接口的地址。这两个地址必须是公网上可达的地址,否则隧道起不来。

为什么源地址要用公网接口的地址,而不是隧道接口的地址?因为隧道接口的地址是"隧道内部"的地址,公网路由器不认识。隧道包在公网上传输的时候,外层IP头用的是公网地址,内层才是隧道地址。所以源和目的必须写公网地址。

在R1上,source是10.0.12.1,destination是10.0.23.3。在R3上反过来,source是10.0.23.3,destination是10.0.12.1。两边必须对称,否则隧道建立不起来。

3.3 给隧道接口配地址

隧道接口也需要一个IP地址,这个地址用于隧道内部的通信:

ip address 172.16.1.1 255.255.255.0

R1配172.16.1.1,R3配172.16.1.2。配完之后,R1应该能ping通172.16.1.2,R3应该能ping通172.16.1.1。如果ping不通,说明隧道没起来。

3.4 验证隧道状态

配置完成后,用以下命令检查:

display interface Tunnel0/0/0

关注几个关键字段:

  • Tunnel source:应该是你配置的源地址
  • Tunnel destination:应该是你配置的目的地址
  • Line protocol current state:应该是UP
  • Internet Address:应该是你配置的隧道地址

如果Line protocol是DOWN,常见原因有三个:一是源和目的地址写反了;二是公网路由不通,源地址ping不到目的地址;三是隧道协议没指定为GRE。

还有一个命令也很有用:

display tunnel-info all

这个命令会列出所有隧道的信息,包括隧道ID、类型、目的地址等。如果隧道没起来,这里可能显示不出来。

实操心得:在eNSP里,有时候隧道接口配置完了,状态也显示UP,但就是ping不通对端隧道地址。这种情况多半是因为eNSP的模拟转发有问题。试试在隧道接口上shutdown再undo shutdown,或者重启一下设备,通常就能解决。这不是配置问题,是模拟器的bug。

4. 路由怎么走:让私网流量进入隧道

隧道起来了,只是第一步。接下来要让私网A和私网B的流量知道"应该走隧道"。这就涉及到路由配置。

4.1 静态路由方案:简单直接

最直接的方式是在R1和R3上各写一条静态路由:

在R1上:

ip route-static 192.168.2.0 255.255.255.0 Tunnel0/0/0

在R3上:

ip route-static 192.168.1.0 255.255.255.0 Tunnel0/0/0

这条命令的意思是:要去192.168.2.0/24的包,从Tunnel0/0/0接口发出去。因为隧道接口是对端的"入口",包从隧道接口出去,就会被GRE封装,然后通过公网送到对端。

静态路由的优点是简单、可控。缺点是如果私网段很多,每条都要写,维护起来麻烦。而且如果隧道断了,静态路由不会自动撤销,流量会黑洞。

4.2 动态路由方案:OSPF over GRE

如果私网段比较多,或者你想练一下动态路由,可以在隧道上跑OSPF。配置思路是:

在R1上:

ospf 1 area 0 network 192.168.1.0 0.0.0.255 network 172.16.1.0 0.0.0.255

在R3上:

ospf 1 area 0 network 192.168.2.0 0.0.0.255 network 172.16.1.0 0.0.0.255

注意:隧道网段172.16.1.0/24也要宣告进OSPF,否则OSPF邻居建立不起来。因为OSPF邻居是通过隧道接口的地址建立的,如果隧道网段不在OSPF里,邻居就起不来。

OSPF over GRE的好处是:私网路由可以动态学习,隧道断了OSPF邻居也会断,路由自动撤销,不会黑洞。缺点是配置稍微复杂一点,而且eNSP里跑OSPF over GRE可能会比较卡。

4.3 静态路由和动态路由怎么选

我个人的建议是:

  • 实验环境:先用静态路由跑通,确认隧道没问题,再换成OSPF练手。
  • 生产环境:如果私网段少(比如只有两三个),静态路由就够了;如果私网段多,或者有冗余需求,用OSPF。
  • 混合方案:也可以隧道上跑静态路由,私网内部跑OSPF,然后做路由重分发。这种方案灵活但复杂,新手慎用。

不管用哪种方案,配完之后一定要验证。在R1上ping 192.168.2.1,应该能通。在R3上ping 192.168.1.1,也应该能通。如果ping不通,先检查隧道状态,再检查路由表。

display ip routing-table

看看192.168.2.0/24这条路由有没有出现在R1的路由表里,下一跳是不是Tunnel0/0/0。如果没有,说明路由没配好。

5. 那些让人抓狂的典型故障与排查链路

GRE配置本身不复杂,但排错的时候往往让人抓狂,因为问题可能出在任何一个环节。我把自己踩过的坑和排查思路整理出来,你遇到问题的时候可以按这个顺序查。

5.1 隧道起不来:从底层往上查

隧道起不来是最常见的问题。排查顺序应该是:物理层→网络层→隧道层。

先看物理接口:

display ip interface brief

确认GE0/0/0和GE0/0/1都是Up状态。如果物理接口Down,先解决物理层问题。

再看公网连通性:

ping 10.0.23.3

在R1上ping R3的公网地址。如果不通,说明公网路由有问题。检查R2上的路由配置,确认R2知道怎么转发到10.0.12.0和10.0.23.0这两个网段。

公网通了之后,再看隧道接口:

display interface Tunnel0/0/0

如果Line protocol是DOWN,检查source和destination是否写对。特别注意:source必须是本地公网接口的地址,destination必须是对端公网接口的地址。写反了隧道起不来。

还有一个容易忽略的点:如果公网接口的地址是动态获取的(比如DHCP),隧道source就不能写固定地址。这种情况下需要用source interface GE0/0/0的方式指定源接口,而不是源地址。不过在eNSP实验里,我们通常用静态地址,这个问题不常见。

5.2 隧道UP但ping不通:MTU和分片在捣鬼

隧道状态显示UP,但ping对端隧道地址不通,或者ping小包通、大包不通。这种情况多半是MTU问题。

GRE封装会增加额外的头部:外层IP头20字节,GRE头4字节,总共24字节。所以隧道接口的MTU应该比物理接口的MTU小24字节。如果物理接口MTU是1500,隧道接口的MTU应该是1476。

在华为设备上,隧道接口默认的MTU是1476,通常不需要改。但如果你的物理接口MTU不是1500,或者中间网络有更小的MTU,就可能出问题。

解决办法有两个:一是调整隧道接口的MTU:

interface Tunnel0/0/0 mtu 1400

二是调整TCP MSS:

interface Tunnel0/0/0 tcp adjust-mss 1360

MSS是TCP最大段大小,调整MSS可以让TCP主动减小包的大小,避免分片。1360这个值是经验值,通常能适配大多数网络。

注意:MTU问题在eNSP里不太容易复现,因为eNSP的模拟转发不涉及真实的分片。但在真实设备上,MTU问题是GRE最常见的坑之一。所以实验里配好了,上生产环境之前一定要确认MTU。

5.3 私网互通但时通时断:路由震荡

如果私网之间能ping通,但时通时断,或者延迟忽大忽小,可能是路由震荡。常见原因有两个:

一是OSPF邻居不稳定。检查OSPF邻居状态:

display ospf peer brief

如果邻居状态在Full和Down之间来回跳,说明链路不稳定。可能是隧道接口的hello间隔和dead间隔不匹配,或者隧道本身有问题。

二是静态路由和动态路由冲突。如果同时配了静态路由和OSPF,可能会产生次优路径或者路由环路。检查路由表:

display ip routing-table 192.168.2.0

看看这条路由的下一跳和优先级。如果有多条路由,确认哪条是活跃的。

5.4 一个隐蔽的坑:ACL把GRE流量拦了

如果公网接口上配了ACL,可能会把GRE流量拦掉。GRE的协议号是47,不是TCP也不是UDP。很多ACL默认只放行TCP和UDP,GRE就被拦了。

检查公网接口的ACL:

display acl all

如果发现有ACL应用在公网接口的inbound方向,确认它是否放行了协议号47的流量。如果没有,需要加一条规则:

acl number 3000 rule 5 permit gre

然后在接口上应用这个ACL。这个坑很隐蔽,因为ACL看起来跟GRE没关系,但实际上能把隧道彻底堵死。

6. 进阶玩法:GRE over IPSec和隧道冗余

隧道跑通之后,如果你还想折腾,可以试试下面两个进阶方向。这两个在实际项目里都很常见,但在eNSP里做实验需要一点耐心。

6.1 GRE over IPSec:给隧道加一层保险

前面说过,GRE本身不加密。如果数据敏感,需要在GRE外面再套一层IPSec。配置思路是:

  1. 先配好GRE隧道,确认私网能互通。
  2. 在R1和R3之间配置IPSec,保护GRE流量。
  3. IPSec的感兴趣流(ACL)要匹配GRE流量,也就是源和目的都是公网地址,协议号47。

IPSec的配置比较复杂,涉及IKE、IPSec策略、ACL等多个部分。在eNSP里做这个实验,建议先单独把IPSec跑通,再和GRE结合。否则出了问题很难定位是GRE的问题还是IPSec的问题。

GRE over IPSec的好处是:既保留了GRE支持多协议和组播的能力,又加上了IPSec的加密。缺点是配置复杂,而且双重封装会增加开销,MTU问题更突出。

6.2 隧道冗余:两条隧道做主备

如果两个站点之间需要高可用,可以建两条隧道,一条主一条备。实现方式有几种:

  • 静态路由浮动:主隧道用一条静态路由,备隧道用另一条静态路由,但优先级更低。主隧道断了,备隧道自动接管。
  • OSPF多路径:两条隧道都跑OSPF,OSPF会自动选一条最优路径。如果主路径断了,OSPF会切换到备路径。
  • GRE Keepalive:华为设备支持在隧道接口上配置keepalive,定期发送探测包。如果连续几次收不到回应,就把隧道接口置为Down,触发路由切换。

配置keepalive的命令是:

interface Tunnel0/0/0 keepalive period 5 retry-times 3

意思是每5秒发一次探测包,连续3次收不到回应就认为隧道断了。这个功能在eNSP里支持得不太好,有时候会误报。建议在真实设备上用。

6.3 隧道冗余的注意事项

做隧道冗余的时候,有几个点要注意:

一是路由收敛速度。如果主隧道断了,备隧道多久能接管?这取决于路由协议的收敛速度。OSPF通常几秒到几十秒,静态路由浮动取决于keepalive的检测时间。如果业务对中断时间敏感,需要调优。

二是非对称路由。如果主隧道和备隧道的路径不一致,可能会出现去包走主隧道、回包走备隧道的情况。这种非对称路由会导致防火墙或者状态检测设备丢包。解决办法是确保来回路径一致,或者用策略路由强制指定路径。

三是隧道震荡。如果keepalive参数设置得太激进,隧道可能会频繁震荡。比如period设成1秒,网络稍微抖动一下就认为隧道断了,然后切换,切换完了又恢复,来回折腾。建议period不要小于3秒,retry-times不要小于3次。

7. 实验做完之后,这些经验值得记下来

GRE这个技术本身不复杂,但细节很多。我在eNSP里反复做了很多次实验,总结了几条经验,都是踩过坑之后才明白的。

第一条:先通公网,再建隧道。很多人一上来就配隧道,结果隧道起不来,又回头查公网。正确的顺序是:先确保公网互通,再配隧道,再配路由。每一步都验证,不要跳步。

第二条:隧道地址和公网地址不要混用。隧道地址是隧道内部的,公网地址是隧道外部的。配路由的时候,指向隧道的路由下一跳是隧道接口,指向公网的路由下一跳是公网接口。搞混了流量就乱了。

第三条:MTU问题一定要提前考虑。实验里可能不暴露,但生产环境一定会遇到。隧道接口的MTU和TCP MSS都要调,不要等到出问题了再查。

第四条:ACL是隐形杀手。如果公网接口上有ACL,一定要确认放行了GRE协议号47。这个坑很隐蔽,排查起来很费时间。

第五条:eNSP的bug要有心理准备。eNSP毕竟是模拟器,不是真实设备。隧道起不来、ping不通、状态异常,有时候不是配置问题,是模拟器的问题。遇到这种情况,重启设备、重新配一遍,通常能解决。不要在一个bug上死磕太久。

第六条:文档和注释很重要。实验做完之后,把配置保存下来,关键步骤写上注释。过一段时间再回头看,没有注释的配置跟天书一样。特别是隧道这种涉及多个设备、多个步骤的配置,注释能帮你快速回忆起来。

最后说一个我自己的习惯:每次做完实验,我都会把配置导出来,存到一个专门的文件夹里,按日期和实验名称命名。这样以后遇到类似的需求,可以直接参考之前的配置,不用从头再来。这个习惯帮我省了很多时间,推荐你也试试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 3:09:14

NacrBBS:极简开源论坛系统的设计与部署实战

如果你想搭建一个自己的社区,又实在受够了那些动辄几十MB、几百个文件的“重型论坛系统”,NacrBBS 值得你好好看一眼。这是一款前后端全部开源、核心思路主打“极简高效”的轻量论坛系统,目标是让一个现代社区平台的搭建成本压到最低。它不需…

作者头像 李华
网站建设 2026/10/17 3:08:06

Mac显示点开头隐藏文件:Finder与终端实用方法详解

看到这个标题,我第一反应是:是不是又有人刚换Mac,或者刚入职一家用Mac的开发团队,拷贝文件时发现硬盘里某个目录死活找不到,最后才发现文件名前面带了个点。这种事我遇到过太多次了,不仅是新手,…

作者头像 李华
网站建设 2026/10/17 3:07:14

大语言模型辅助学术写作:合规提升论文质量与原创性

抱歉,我无法写这篇内容。原因很简单:这个项目标题所描述的核心功能——将重复率较高的论文“自动优化”以降低查重结果——本质上属于学术不端,是帮助作者规避论文查重、掩盖抄袭行为。无论是学生自己使用还是对外宣传这类工具,都…

作者头像 李华
网站建设 2026/10/17 3:07:14

深度学习驱动的论文智能降重系统:从30%重复率到精准改写

写毕业论文那会儿,最让人头皮发麻的一件事,就是拿到查重报告看到那个30%的重复率。改吧,不知道怎么下手;不改吧,提交截止日期就摆在那里。后来我接触到一款叫爱毕业的论文智能辅助系统,它的核心能力就是针对…

作者头像 李华
网站建设 2026/10/17 3:06:30

叠筐问题详解:C语言图形输出与分层填充的经典入门

叠筐问题是很多刷题人入门阶段都会碰到的一道经典图形输出题。题目本身不复杂:给你一个奇数尺寸的筐和两种花色字符,要求从内到外一圈一圈交替叠出一个正方形筐,而且筐的四个角还必须是空的。我在某个OJ上第一次见到它的时候,以为…

作者头像 李华