1. 静态路由到底在解决什么问题
很多人学到HCIA第四天,第一次接触静态路由,脑子里冒出的第一个念头就是:路由器不是天生就会转发包吗,为什么还要我手动去告诉它往哪走?这个问题不搞清楚,后面配命令就是死记硬背,换个拓扑立马抓瞎。
先说结论:路由器确实会转发,但它只会转发它“认识”的目的地。什么叫认识?就是路由表里有一条明确告诉它“去往某个网段,从哪个口出去,下一跳交给谁”的记录。没有这条记录,包到了路由器手里,它看一眼目的IP,发现路由表里查不到,直接丢掉,然后回一个“网络不可达”。这就像你手里拿着一封信,地址写的是某个你从来没听说过的小区,你连在哪个城市都不知道,这信你根本没法送。
那路由表里的记录从哪来?两种方式:一种是动态路由协议自己学来的,比如OSPF、RIP、BGP这些,路由器之间互相聊天,交换各自知道的路由信息,自动把路由表填满;另一种就是静态路由,管理员手动一条一条写进去。静态路由的核心价值就三个字:可控性。你让它往哪走它就往哪走,不会因为协议收敛慢导致短暂断网,也不会因为邻居路由器抽风把错误路由传给你。在小规模网络、末梢网络、或者需要精确控制路径的场景里,静态路由就是最稳的选择。
HCIA第四天安排静态路由这个内容,不是随便放的。前两天你学了IP地址规划、子网划分,第三天学了路由器基本操作和直连路由,直连路由就是路由器接口配了IP、接口up之后自动生成的那条路由,只能到达接口直连的网段。但真实网络不可能所有网段都直连在一个路由器上,跨路由器通信就必须靠静态路由或者动态路由来解决。静态路由是理解路由转发逻辑的最佳入口,因为它足够简单、足够透明,你能清清楚楚看到每一条路由是怎么来的、往哪走的。
这一天的内容适合谁?如果你是刚入门的网络工程师,正在备考HCIA,或者工作中需要配置小型企业网络、分支机构网络,静态路由是你必须吃透的基本功。哪怕你以后主要用动态路由协议,静态路由的排错思路和路由表查询逻辑也是一脉相承的。我见过太多人动态路由配得飞起,但一遇到路由不通就懵了,根本原因就是静态路由这块底子没打牢,不知道路由器到底是怎么选路的。
接下来我会把静态路由的配置、原理、排错、实验拓扑完整拆一遍,尽量用大白话把每个参数为什么这么写讲清楚。你看完之后,至少能做到:拿到一个多路由器拓扑,能独立规划路由条目,能配通,能排错,能跟人解释清楚每一跳是怎么走的。
2. 静态路由的核心原理与关键参数拆解
2.1 路由表的结构与查表逻辑
要搞懂静态路由,先得看懂路由表。在华为设备上敲display ip routing-table,你会看到一堆列:Destination/Mask、Proto、Pre、Cost、NextHop、Interface。每一列都有它的意义,不是摆设。
Destination/Mask 是目的网段和掩码,这个好理解,就是“我要去哪”。Proto 是协议类型,直连路由显示 Direct,静态路由显示 Static,OSPF学来的显示 OSPF。Pre 是优先级,也叫管理距离,数值越小越优先。华为设备上直连路由优先级是0,静态路由默认是60,OSPF是10,RIP是100。这个优先级决定了当多条路由都能到达同一个目的地时,路由器信谁。Cost 是开销值,同一种协议内部比较用,静态路由的Cost默认是0。NextHop 是下一跳地址,就是“我把这个包交给谁”。Interface 是出接口,就是“从哪个口出去”。
查表逻辑是这样的:路由器收到一个包,提取目的IP,然后拿目的IP去路由表里逐条匹配。匹配规则是最长掩码匹配,不是先匹配谁就先选谁。举个例子,路由表里有 192.168.1.0/24 和 192.168.0.0/16 两条路由,目的IP是 192.168.1.100,虽然两条都能匹配上,但 /24 的掩码更长,更精确,所以选 /24 那条。只有当掩码长度一样时,才比较优先级,优先级一样再比较Cost。这个逻辑必须刻在脑子里,排错的时候90%的问题都出在查表结果跟你预期不一样。
2.2 静态路由的几种写法与适用场景
静态路由不是只有一种写法,根据下一跳的指定方式不同,分为三种:
第一种,指定下一跳IP。命令是ip route-static 目的网段 掩码 下一跳IP。这是最常用的写法,适合以太网环境。路由器会把包发给下一跳IP对应的MAC地址,通过ARP解析出来。这种写法的好处是明确,下一跳是谁清清楚楚,出接口由路由表递归查询决定。
第二种,指定出接口。命令是ip route-static 目的网段 掩码 出接口。这种写法在串口(Serial)环境下常见,因为串口是点对点链路,不需要ARP,直接从接口扔出去就行。但在以太网环境下不推荐这么写,因为以太网是多路访问网络,你指定出接口但不指定下一跳,路由器不知道把包发给哪个MAC,会出问题。
第三种,同时指定出接口和下一跳。命令是ip route-static 目的网段 掩码 出接口 下一跳IP。这种写法最明确,既告诉路由器从哪个口出去,又告诉它下一跳是谁。在华为设备上,以太网环境推荐这种写法,避免递归查询带来的不确定性。
还有一种特殊写法叫缺省路由,命令是ip route-static 0.0.0.0 0.0.0.0 下一跳IP。0.0.0.0/0 表示所有目的网段,当路由表里找不到更精确的匹配时,就用这条。缺省路由通常用在末梢网络,比如企业分支只有一条出口线路,所有去往总部的流量都走这条缺省路由。但要注意,缺省路由不能随便配,配错了会导致路由环路。
2.3 路由递归查询是怎么回事
递归查询这个概念,很多人第一次听觉得玄乎,其实很简单。当你配置静态路由时只指定了下一跳IP,没有指定出接口,路由器会拿这个下一跳IP再去路由表里查一次,看看这个下一跳IP怎么到达。这个“查两次”的过程就是递归查询。
举个例子,你配了一条ip route-static 10.1.1.0 24 192.168.1.2,但路由器不知道 192.168.1.2 怎么到达。它会再去查路由表,发现 192.168.1.0/24 是直连网段,从G0/0/0出去。于是这条静态路由就生效了,出接口是G0/0/0,下一跳是192.168.1.2。
递归查询的好处是配置简洁,坏处是如果下一跳不可达,这条静态路由就不会出现在路由表里。所以排错的时候,如果静态路由配了但没生效,第一件事就是查下一跳地址是否可达。我见过有人配了静态路由死活不通,最后发现下一跳IP写错了,或者下一跳所在的网段根本没起来。
2.4 浮动静态路由与路由备份
浮动静态路由是静态路由的一个高级用法,核心思想是配两条去往同一目的地的静态路由,一条主用,一条备用,备用那条的优先级调大(数值变大),平时不生效,主路由断了它才顶上。
命令是这样的:主路由ip route-static 10.1.1.0 24 192.168.1.2,备用路由ip route-static 10.1.1.0 24 192.168.2.2 preference 100。默认静态路由优先级是60,备用改成100,数值越大优先级越低。平时主路由生效,备用路由藏在路由表里不显示。当主路由的下一跳不可达时,主路由从路由表里消失,备用路由自动顶上。
这个机制在广域网备份场景里非常实用。比如企业有一条主专线和一条备用线路,平时走主专线,主专线断了自动切备用。配置简单,不需要跑动态路由协议,稳定性也够。但要注意,浮动静态路由只能检测下一跳是否可达,不能检测链路质量。如果主线路时通时断,路由会来回切换,反而影响业务。这种场景就得靠动态路由协议或者BFD联动来解决。
3. 多路由器静态路由实验完整实操
3.1 实验拓扑与IP规划
光讲理论没意思,直接上一个三路由器的实验拓扑,把静态路由配通。拓扑是这样的:R1的G0/0/0口连R2的G0/0/0口,R2的G0/0/1口连R3的G0/0/0口。R1后面挂一个PC1,网段是192.168.1.0/24;R3后面挂一个PC2,网段是192.168.3.0/24;R1和R2之间的互联网段是10.0.12.0/24;R2和R3之间的互联网段是10.0.23.0/24。
IP地址规划如下:R1的G0/0/0配10.0.12.1/24,R2的G0/0/0配10.0.12.2/24,R2的G0/0/1配10.0.23.2/24,R3的G0/0/0配10.0.23.3/24。PC1的网关设为192.168.1.1(R1的G0/0/1口),PC2的网关设为192.168.3.1(R3的G0/0/1口)。R1的G0/0/1配192.168.1.1/24,R3的G0/0/1配192.168.3.1/24。
这个拓扑虽然简单,但涵盖了静态路由的所有核心考点:直连网段自动生成路由,非直连网段需要手动配置,双向都要配,缺一不可。很多人配静态路由只配一个方向,结果发现ping不通,就是因为回包的路由没配。
3.2 R1的配置与路由分析
先配R1。进入系统视图,改个名字方便识别:
system-view sysname R1 interface GigabitEthernet0/0/0 ip address 10.0.12.1 24 quit interface GigabitEthernet0/0/1 ip address 192.168.1.1 24 quit配完之后查路由表display ip routing-table,你会看到两条直连路由:10.0.12.0/24 和 192.168.1.0/24,Proto都是Direct,出接口分别是G0/0/0和G0/0/1。这两条是接口配了IP、接口up之后自动生成的,不需要手动配。
现在R1要到达PC2所在的192.168.3.0/24网段,怎么走?R1自己不知道,得手动告诉它。下一跳是谁?是R2的G0/0/0口,IP是10.0.12.2。所以配置命令是:
ip route-static 192.168.3.0 24 10.0.12.2这条命令的意思是:去往192.168.3.0/24的包,下一跳交给10.0.12.2。配完之后再查路由表,会多出一条Static路由,目的网段192.168.3.0/24,下一跳10.0.12.2,出接口G0/0/0(递归查询出来的)。
但光配这一条还不够。R1还要能到达R2和R3之间的互联网段10.0.23.0/24,虽然这个网段跟PC通信没直接关系,但排错的时候可能会用到。所以再加一条:
ip route-static 10.0.23.0 24 10.0.12.2这两条配完,R1的路由表里就有四条路由了:两条直连,两条静态。
3.3 R2的配置与双向路由
R2是中间路由器,它两边都直连,但两边的终端网段它都不直连。R2需要知道怎么去192.168.1.0/24和192.168.3.0/24。去192.168.1.0/24的下一跳是R1的G0/0/0口10.0.12.1,去192.168.3.0/24的下一跳是R3的G0/0/0口10.0.23.3。配置如下:
system-view sysname R2 interface GigabitEthernet0/0/0 ip address 10.0.12.2 24 quit interface GigabitEthernet0/0/1 ip address 10.0.23.2 24 quit ip route-static 192.168.1.0 24 10.0.12.1 ip route-static 192.168.3.0 24 10.0.23.3R2的路由表里会有四条路由:两条直连(10.0.12.0/24和10.0.23.0/24),两条静态(192.168.1.0/24和192.168.3.0/24)。
3.4 R3的配置与回程路由
R3的配置跟R1对称。R3直连192.168.3.0/24和10.0.23.0/24,需要手动配去192.168.1.0/24和10.0.12.0/24的静态路由,下一跳都是R2的G0/0/1口10.0.23.2:
system-view sysname R3 interface GigabitEthernet0/0/0 ip address 10.0.23.3 24 quit interface GigabitEthernet0/0/1 ip address 192.168.3.1 24 quit ip route-static 192.168.1.0 24 10.0.23.2 ip route-static 10.0.12.0 24 10.0.23.2到这里,三台路由器的静态路由都配完了。PC1 ping PC2,源IP 192.168.1.x,目的IP 192.168.3.x。包从PC1出来,网关是R1的192.168.1.1,R1查路由表,匹配到192.168.3.0/24的静态路由,下一跳10.0.12.2,从G0/0/0发出去。R2收到包,查路由表,匹配到192.168.3.0/24的静态路由,下一跳10.0.23.3,从G0/0/1发出去。R3收到包,发现192.168.3.0/24是直连网段,直接发给PC2。回包的时候,PC2发给网关192.168.3.1,R3查路由表,匹配到192.168.1.0/24的静态路由,下一跳10.0.23.2,发给R2。R2再查路由表,匹配到192.168.1.0/24的静态路由,下一跳10.0.12.1,发给R1。R1发现192.168.1.0/24是直连,发给PC1。整个来回路径就通了。
3.5 用tracert验证路径
配完之后别光ping,用tracert命令看一下路径,能直观看到每一跳是谁。在PC1上tracert 192.168.3.x,输出会显示三跳:第一跳是R1的192.168.1.1,第二跳是R2的10.0.12.2,第三跳是R3的10.0.23.3,最后到达PC2。如果中间某一跳显示星号,说明那一跳的路由有问题,或者设备禁了ICMP回应。
在华为路由器上也可以用tracert命令,语法是tracert 目的IP。这个命令在排错的时候非常有用,能快速定位是哪一跳断了。比如你发现第一跳就通了,第二跳不通,那问题肯定出在R2上,要么R2没有回程路由,要么R2的接口down了。
注意:tracert依赖ICMP超时报文,有些设备或防火墙会禁掉ICMP,导致tracert显示不全。这时候别慌,用ping逐跳测试也能定位问题。
4. 静态路由排错思路与常见问题实录
4.1 路由不生效的排查顺序
静态路由配了但没生效,这是新手最常见的问题。排查顺序我总结成四步:查配置、查下一跳、查接口、查路由表。
第一步,查配置。display current-configuration看看静态路由命令敲对了没有,目的网段、掩码、下一跳有没有写错。我见过有人把24写成23,或者下一跳IP少写一位,这种低级错误排半天。
第二步,查下一跳是否可达。ping 下一跳IP,如果不通,说明下一跳本身就有问题,可能是接口没起来,或者IP配错了,或者中间链路断了。下一跳不通,静态路由就不会生效,路由表里根本不会出现这条路由。
第三步,查接口状态。display ip interface brief看看相关接口是不是up状态,IP地址配对了没有。接口down了,直连路由会消失,依赖这条直连路由递归查询的静态路由也会跟着消失。
第四步,查路由表。display ip routing-table看看静态路由到底在不在表里。如果在表里但ping不通,那问题可能出在回程路由上,或者ACL拦截了。如果不在表里,回到第二步继续查。
4.2 单向通与回程路由缺失
单向通是静态路由实验里最经典的坑。PC1能ping通PC2,但PC2 ping不通PC1,或者ping的第一个包通了后面不通。原因很简单:去程路由配了,回程路由没配。包能过去,但回包找不到路,被路由器丢了。
排查方法:在PC2上tracert PC1的IP,看第一跳通不通。如果第一跳就不通,说明R3没有去192.168.1.0/24的路由。如果第一跳通了第二跳不通,说明R2没有去192.168.1.0/24的路由。逐跳排查,很快就能定位。
还有一种情况是ping的第一个包通,后面不通。这通常是因为ARP解析需要时间,第一个包触发ARP,路由器回一个ICMP超时,后面ARP学到了就通了。这种不算故障,多ping几个包就正常了。
4.3 路由环路是怎么产生的
静态路由配错了会导致路由环路,包在两个路由器之间来回转发,TTL减到0才被丢弃。路由环路的典型场景是:R1配了去192.168.3.0/24的下一跳是R2,R2配了去192.168.3.0/24的下一跳是R1,两边互相指,包就在R1和R2之间打乒乓球。
避免路由环路的方法很简单:静态路由的下一跳必须指向正确的方向,不能互相指。配置之前先在纸上画清楚拓扑,标好每一跳的方向,配的时候对着图配,别凭感觉。如果发现路由环路,用tracert一看就明白了,包在两跳之间来回显示。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 排查命令 | 解决方法 |
|---|---|---|---|
| 静态路由不在路由表 | 下一跳不可达 | ping 下一跳IP | 检查下一跳接口和IP配置 |
| ping不通但对端能ping通 | 回程路由缺失 | tracert 对端IP | 在对端路由器补回程路由 |
| 路由表有路由但ping不通 | ACL拦截或接口down | display acl all | 检查ACL规则和接口状态 |
| tracert显示星号 | ICMP被禁或路由中断 | ping 逐跳测试 | 逐跳ping定位故障点 |
| 路由来回切换 | 浮动路由优先级配置不当 | display ip routing-table | 调整preference值或改用动态路由 |
| 缺省路由导致环路 | 缺省路由指向错误 | tracert 目的IP | 检查缺省路由下一跳方向 |
4.5 我踩过的几个坑
第一个坑:配静态路由时只配了出接口没配下一跳。在以太网环境下,这样配路由表里虽然会显示,但实际转发会出问题,因为路由器不知道下一跳MAC地址。后来改成同时指定出接口和下一跳,问题解决。
第二个坑:浮动静态路由的preference值设反了。我把主路由的preference设成100,备用设成60,结果备用路由一直生效,主路由反而藏着。后来才搞明白,数值越小越优先,主路由应该用默认的60,备用调大。
第三个坑:递归查询导致路由不生效。配了一条静态路由,下一跳是对方路由器的Loopback口地址,但对方Loopback口没配路由或者没起来,导致递归查询失败,静态路由一直不生效。后来改成用互联接口的IP做下一跳,问题解决。
第四个坑:忘了配缺省路由导致末梢网络断网。分支路由器只有一条出口,我配了明细静态路由,但总部新增了一个网段,分支没配对应的静态路由,导致访问不了。后来在分支加了一条缺省路由指向总部,所有未知流量都走总部,问题解决。但缺省路由要慎用,如果总部那边没有回程路由,照样不通。
5. 静态路由的进阶用法与场景延展
5.1 缺省路由在末梢网络中的实战
末梢网络就是只有一个出口的网络,比如企业分支、家庭宽带后面接的路由器。这种网络里,所有去往外部目的地的流量都走同一个出口,配明细静态路由太麻烦,直接配一条缺省路由最省事。
命令是ip route-static 0.0.0.0 0.0.0.0 下一跳IP。0.0.0.0/0 匹配所有目的IP,当路由表里找不到更精确的匹配时,就用这条。比如分支路由器配了ip route-static 0.0.0.0 0.0.0.0 10.0.1.1,所有去往总部的流量都走10.0.1.1。
但缺省路由有个前提:总部那边必须有回程路由指向分支的网段。如果总部没有分支网段的路由,分支能发出去但收不回来,照样不通。所以缺省路由通常配合总部侧的静态路由或者动态路由一起用。
5.2 静态路由与动态路由的取舍
静态路由和动态路由不是对立的,实际项目中经常混用。小规模网络、拓扑稳定的场景,静态路由足够,配置简单、不占资源、可控性强。大规模网络、拓扑经常变化的场景,动态路由更合适,能自动收敛、自动适应变化。
我个人的经验是:出口路由用缺省路由,内部互联用动态路由,特定路径用静态路由。比如企业总部和分支之间跑OSPF,但有一条专线需要精确控制路径,就在两端配静态路由,通过preference调整优先级,让特定流量走专线,其他流量走OSPF。
静态路由的另一个优势是安全。动态路由协议会交换路由信息,如果邻居路由器被攻破,可能传入错误路由。静态路由没有这个问题,管理员不配,路由器就不知道,攻击面小很多。
5.3 静态路由在HCIA考试中的考点分布
HCIA考试里静态路由的考点主要集中在几个方面:静态路由的配置命令、路由表的查表规则、最长掩码匹配、浮动静态路由、缺省路由、递归查询。考试题型有选择题、判断题、拖拽题,还有模拟配置题。
选择题常考的是给一个拓扑和路由表,问某个目的IP会从哪个接口转发出去。这种题的关键是掌握最长掩码匹配和优先级比较。拖拽题常考的是把路由条目拖到正确的路由器上,考察的是对拓扑的理解。模拟配置题就是让你敲命令配静态路由,考察命令的熟练度。
备考建议:别光背命令,把实验拓扑多搭几遍,用模拟器反复练。每配一条路由,都问自己为什么这么配,下一跳为什么是那个IP,出接口为什么是那个口。理解透了,考试怎么变都不怕。
5.4 从静态路由延伸到网络排错方法论
静态路由虽然简单,但它背后的排错思路可以延伸到整个网络排错。核心就三步:确认现象、定位层次、逐跳排查。
确认现象就是搞清楚到底什么不通,是ping不通、tracert断在哪、还是时通时断。定位层次就是按OSI模型从下往上查,先查物理层链路通不通,再查数据链路层ARP学没学到,再查网络层路由有没有,最后查传输层端口通不通。逐跳排查就是从源到目的,一跳一跳ping过去,哪一跳断了就查哪一跳。
这个方法论在静态路由实验里练熟了,以后遇到OSPF邻居起不来、BGP路由不优选、VLAN间路由不通,都是同样的思路。网络排错最怕的就是瞎猜,有章法地逐层排查,效率高得多。
提示:排错的时候养成习惯,每改一个配置就查一次路由表,确认改动生效了再继续。别一口气改一堆,最后不知道是哪条配置起了作用。
6. 实验后的复盘与配置备份
6.1 配置保存与重启验证
实验配完之后,别忘了save保存配置。华为设备重启后配置会丢失,不保存等于白配。保存的时候会提示确认,输入y回车就行。
保存之后建议重启一次设备,验证配置是否真的生效。重启命令是reboot,重启后查路由表,看静态路由还在不在,ping测试还通不通。这一步很多人省略,结果考试的时候设备重启了发现配置没保存,直接凉凉。
6.2 配置文件的导出与对比
华为设备支持把配置文件导出到TFTP服务器或者U盘。命令是tftp 服务器IP put 配置文件。导出之后可以对比不同版本的配置,看看改了哪些地方。这个习惯在多人协作的项目里特别重要,配置改了要有记录,出问题了能回溯。
如果没有TFTP服务器,也可以用display current-configuration把配置显示出来,复制到本地保存。虽然原始一点,但应急够用。
6.3 静态路由实验的扩展练习
基础实验配通之后,可以加一些扩展练习巩固:加一台R4,让拓扑变成四条路由器串联,练习多跳静态路由;把其中一条链路换成串口,练习串口下的静态路由写法;配置浮动静态路由,模拟主链路断开自动切换;配置缺省路由,模拟末梢网络访问总部。
每加一个变化,都重新分析路由表,看路由条目怎么变,下一跳怎么走。练多了之后,拿到任何拓扑都能快速规划出路由方案,这才是真正掌握了静态路由。
我个人在实际操作中的体会是,静态路由这东西,看十遍不如配一遍,配十遍不如排一遍错。排错的过程才是真正理解路由转发逻辑的过程。刚开始配的时候多犯点错,多查几次路由表,多tracert几次,把每次排错的过程记下来,慢慢就形成肌肉记忆了。以后遇到再复杂的网络,底层逻辑都是一样的,逐跳查、逐层排,没有解决不了的问题。