
1. 从能通就行到精准可控静态路由到底在解决什么问题很多人刚接触网络设备配置的时候都会经历一个特别典型的阶段把两台设备用网线连起来接口配上同一网段的地址ping通了就觉得网络不过如此。直到有一天你面对的是三台、四台甚至更多台设备中间还隔着不同的网段这时候你会发现光靠接口直连的那点地址根本撑不起一张真正的网络。设备A知道自己的直连网段设备B也知道自己的直连网段但A压根不知道B背后还挂着哪些网段数据包到了A这里A一看目的地址不在自己的直连网段里直接就把包扔了。这就是静态路由要解决的核心问题让一台设备知道去往某个非直连网段下一跳应该交给谁。说白了就是给设备手动指路。你告诉它要去192.168.2.0这个网段别自己瞎找把包交给旁边那个10.0.0.2就行它认识路。静态路由在华为体系里属于网络层的基础操作也是HCIA阶段必须吃透的一块内容。它的特点非常鲜明配置简单、不占设备资源、行为完全可预测但缺点同样明显——网络拓扑一变你就得手动改规模大了之后维护成本高得吓人。所以静态路由最适合的场景是小型网络、末梢网络、或者作为动态路由的补充。比如一个公司总部和分部之间只有一条链路那用静态路由就够了没必要上OSPF这种动态协议。我见过不少初学的朋友配置静态路由的时候就是照着命令敲敲完能ping通就完事至于为什么这么配、下一跳为什么选这个地址、什么时候该用出接口什么时候该用下一跳地址一概不清楚。结果换一个拓扑就懵了。所以这篇内容我不打算只给你几条命令而是把静态路由背后的逻辑、配置时的取舍、以及实际排错时怎么一步步定位问题都掰开揉碎讲清楚。不管你是正在备考HCIA还是刚上手华为设备做实验这些内容都能直接拿去用。2. 静态路由的底层逻辑路由表是怎么指路的2.1 路由表的三要素目的网段、下一跳、出接口要理解静态路由先得理解设备是怎么转发数据包的。华为设备每收到一个数据包都会拿包里的目的IP地址去查自己的路由表。路由表里存的就是一条条路标每条路标至少包含三个关键信息目的网段/掩码、下一跳地址、出接口。打个比方路由表就像你手机里的导航记录。你要去某个地方目的网段导航告诉你从哪个路口上出接口然后到下一个路口该怎么拐下一跳。设备查表的时候遵循最长掩码匹配原则也就是说如果有多条路由都能匹配目的地址设备会选掩码最长、最精确的那一条。这个原则非常重要后面讲默认路由的时候还会用到。一条典型的静态路由在华为设备上的样子是这样的[Huawei] ip route-static 192.168.2.0 255.255.255.0 10.0.0.2这条命令的意思是要去192.168.2.0/24这个网段把包交给下一跳10.0.0.2。设备会把这条路由写进路由表标记为Static。这里有个细节下一跳地址10.0.0.2必须是本设备直连可达的也就是说设备得先知道怎么去10.0.0.2。如果连下一跳都不可达这条静态路由是不会生效的路由表里根本不会出现。2.2 为什么下一跳必须直连可达这一点是很多新手容易忽略的。静态路由的下一跳本质上是你告诉设备往这个方向走但设备得有能力把包送到这个下一跳。如果下一跳地址本身就不在设备的直连网段里设备会想你让我把包交给10.0.0.2可我自己都不知道10.0.0.2在哪那这包我发不出去。结果就是这条静态路由被判定为无效不会进入路由表。所以在配置静态路由之前一定要先确认下一跳地址所在的网段本设备是否有直连接口。比如设备有个接口地址是10.0.0.1/24那10.0.0.2就在这个直连网段里可以作为下一跳。如果下一跳是172.16.1.1而设备上没有任何接口在172.16.1.0网段那这条静态路由配了也白配。提示配置完静态路由后用display ip routing-table查看路由表确认路由是否真的生效。如果没出现八成是下一跳不可达。2.3 出接口写法和下一跳写法的区别静态路由有两种写法一种是只写出接口一种是写下一跳还有一种是两个都写。这三种写法在实际效果上有区别尤其是在以太网这种多路访问网络上。只写出接口的写法[Huawei] ip route-static 192.168.2.0 255.255.255.0 GigabitEthernet0/0/1这种写法在点到点链路上没问题但在以太网这种广播网络上会有一个隐患设备会把包从接口发出去但不知道下一跳的MAC地址于是会触发ARP请求。如果目的网段里有很多主机设备可能会对每个目的地址都发ARP造成ARP表膨胀。所以在以太网上推荐写下一跳地址而不是只写出接口。两个都写的写法[Huawei] ip route-static 192.168.2.0 255.255.255.0 GigabitEthernet0/0/1 10.0.0.2这种写法最明确既指定了从哪个接口出去又指定了下一跳是谁。在需要精确控制的场景下这种写法最稳妥。我个人的习惯是只要下一跳地址明确就尽量把下一跳写上出接口可以省略让设备自己根据下一跳去查直连路由确定出接口。3. 动手配置从零搭一个三设备静态路由实验3.1 实验拓扑设计与地址规划光讲理论没意思咱们直接搭一个实验。这个实验用三台路由器模拟两个不同网段通过中间设备互通。拓扑是这样的路由器R1接口GE0/0/0地址10.0.0.1/24连接R2背后挂一个网段192.168.1.0/24路由器R2接口GE0/0/0地址10.0.0.2/24连接R1接口GE0/0/1地址20.0.0.2/24连接R3路由器R3接口GE0/0/0地址20.0.0.3/24连接R2背后挂一个网段192.168.3.0/24目标让192.168.1.0/24和192.168.3.0/24能够互相通信。地址规划表如下设备接口IP地址说明R1GE0/0/010.0.0.1/24连接R2R1Loopback0192.168.1.1/24模拟背后网段R2GE0/0/010.0.0.2/24连接R1R2GE0/0/120.0.0.2/24连接R3R3GE0/0/020.0.0.3/24连接R2R3Loopback0192.168.3.1/24模拟背后网段这里用Loopback接口来模拟背后的网段因为Loopback接口只要配置了地址就一直是UP状态不会因为物理链路问题而down掉做实验特别方便。3.2 基础配置接口地址和直连互通先给三台设备配上接口地址。以R1为例R1 system-view [R1] sysname R1 [R1] interface GigabitEthernet0/0/0 [R1-GigabitEthernet0/0/0] ip address 10.0.0.1 24 [R1-GigabitEthernet0/0/0] quit [R1] interface LoopBack0 [R1-LoopBack0] ip address 192.168.1.1 24 [R1-LoopBack0] quitR2的配置R2 system-view [R2] sysname R2 [R2] interface GigabitEthernet0/0/0 [R2-GigabitEthernet0/0/0] ip address 10.0.0.2 24 [R2-GigabitEthernet0/0/0] quit [R2] interface GigabitEthernet0/0/1 [R2-GigabitEthernet0/0/1] ip address 20.0.0.2 24 [R2-GigabitEthernet0/0/1] quitR3的配置R3 system-view [R3] sysname R3 [R3] interface GigabitEthernet0/0/0 [R3-GigabitEthernet0/0/0] ip address 20.0.0.3 24 [R3-GigabitEthernet0/0/0] quit [R3] interface LoopBack0 [R3-LoopBack0] ip address 192.168.3.1 24 [R3-LoopBack0] quit配完之后R1和R2之间应该能ping通10.0.0.2R2和R3之间能ping通20.0.0.3。但R1 ping 192.168.3.1肯定是不通的因为R1的路由表里没有去192.168.3.0网段的路由。你可以自己验证一下R1上执行display ip routing-table看到的只有直连路由。3.3 静态路由的配置与验证现在给R1和R3分别配上静态路由。R1需要知道怎么去192.168.3.0/24下一跳是R2的10.0.0.2[R1] ip route-static 192.168.3.0 255.255.255.0 10.0.0.2R3需要知道怎么去192.168.1.0/24下一跳是R2的20.0.0.2[R3] ip route-static 192.168.1.0 255.255.255.0 20.0.0.2R2作为中间设备它自己知道10.0.0.0和20.0.0.0两个直连网段但它不知道192.168.1.0和192.168.3.0怎么去。所以R2也需要配两条静态路由[R2] ip route-static 192.168.1.0 255.255.255.0 10.0.0.1 [R2] ip route-static 192.168.3.0 255.255.255.0 20.0.0.3配完之后在R1上ping 192.168.3.1应该能通了。用display ip routing-table可以看到Static路由已经出现在表里。这里有个经验配置静态路由时双向都要配。很多人只配了去的方向忘了回来的方向结果ping不通就以为是配置错了。数据包去的时候有路回来的时候没路照样不通。所以R1配了去192.168.3.0的路由R3也必须配去192.168.1.0的路由缺一不可。4. 默认路由与路由汇总让配置量骤减的两个技巧4.1 默认路由0.0.0.0/0的妙用刚才的实验里R1只挂了192.168.1.0一个网段所以只配一条静态路由就够了。但如果R1背后挂了十个网段呢难道要配十条静态路由吗这时候默认路由就派上用场了。默认路由的目的网段是0.0.0.0掩码也是0.0.0.0意思是所有我不认识的目的地址都走这条路。配置命令是[R1] ip route-static 0.0.0.0 0.0.0.0 10.0.0.2这条命令的意思是凡是路由表里没有明确匹配的路由统统交给10.0.0.2。这样一来R1背后不管挂多少个网段只要它们都通过R2出去就只需要这一条默认路由就够了。默认路由特别适合用在末梢网络上。什么叫末梢网络就是只有一个出口的网络。比如一个分公司只有一条链路连到总部那分公司路由器上配一条默认路由指向总部就行了简单高效。但要注意默认路由不能随便配在中间设备上。如果R2也配一条默认路由指向R1那R2收到去192.168.3.0的包本来应该走R3的结果被默认路由引到了R1包就绕圈子了。所以默认路由一般只配在网络的边缘。4.2 路由汇总把多条路由合并成一条路由汇总的思路和默认路由类似但更精确一些。假设R1背后有192.168.0.0/24到192.168.7.0/24这八个网段它们都在192.168.0.0/21这个大网段里。那R3要回包给这些网段不需要配八条静态路由只需要配一条汇总路由[R3] ip route-static 192.168.0.0 255.255.248.0 20.0.0.2255.255.248.0对应的掩码长度是21位正好覆盖192.168.0.0到192.168.7.255这个范围。这样一条路由就顶了八条路由表也干净。汇总的计算方法其实不难把多个网段的二进制形式写出来找到它们共同的前缀部分剩下的位全部置零。比如192.168.0.0到192.168.7.0第三段分别是0到7二进制是00000000到00000111前五位是共同的所以掩码就是16521位。这个计算过程在HCIA考试里经常考建议多练几遍手算。注意路由汇总的前提是这些网段确实连续且属于同一个大网段。如果网段不连续汇总后可能会把流量引到错误的方向造成黑洞。5. 静态路由的排错思路ping不通时怎么一步步定位5.1 先查路由表再看接口状态静态路由配完了ping不通这是最常见的问题。我的排错顺序是这样的先看路由表有没有这条路由再看接口是不是UP最后看下一跳是不是可达。第一步在源设备上执行display ip routing-table确认去往目的网段的路由是否存在。如果路由表里压根没有这条Static路由那说明配置有问题可能是下一跳不可达或者命令敲错了。第二步检查相关接口的状态。用display ip interface brief可以看到所有接口的IP和状态。如果接口是DOWN的那路由肯定不会生效。物理接口要检查网线、光模块逻辑接口要检查协议状态。第三步确认下一跳是否可达。在设备上ping一下下一跳地址如果不通那静态路由配了也没用。下一跳不通的原因可能是对端接口没配地址、链路故障、或者中间有设备阻断了。5.2 用tracert看数据包走到哪断了如果路由表里有路由接口也是UP的但就是ping不通这时候可以用tracert命令看数据包走到哪一跳断了。比如在R1上执行[R1] tracert 192.168.3.1如果第一跳就到了10.0.0.2第二跳就超时了那说明问题出在R2到R3之间。可能是R2上没有去192.168.3.0的路由或者R3上没有回程路由。这时候就要去R2和R3上分别检查路由表。tracert的原理是利用TTL递增每一跳返回一个ICMP超时报文。如果某一跳没有返回就说明数据包在那里被丢弃了。这个方法比盲目ping高效得多能快速缩小问题范围。5.3 回程路由最容易被忽略的坑我见过太多人排错排了半天最后发现是回程路由没配。数据包去的时候一路畅通到了目的设备目的设备要回包的时候发现路由表里没有源网段的路由直接把包扔了。这时候你在源设备上ping看到的就是超时。所以排错的时候一定要在双向设备上都检查路由表。源设备有去程路由目的设备也要有回程路由。如果是多跳的场景中间每一跳设备都要有相应的路由缺一不可。还有一个隐蔽的坑路由指向了错误的下一跳。比如R2上有两条静态路由一条指向R1一条指向R3如果配反了包就会走错方向。这种问题路由表里看是有的但方向不对tracert的时候会发现包跑到了不该去的地方。所以配置的时候一定要看清楚下一跳地址对应的是哪台设备。6. 静态路由的适用边界与实战心得6.1 什么时候该用静态路由什么时候不该用静态路由不是万能的它有明确的适用场景。我总结了一个简单的判断标准场景是否适合静态路由原因小型网络设备少于5台适合拓扑简单维护量小末梢网络只有一个出口适合一条默认路由搞定作为动态路由的备份适合浮动静态路由可做冗余大型网络设备几十台不适合维护成本高容易出错拓扑频繁变化的网络不适合每次变化都要手动改需要自动收敛的场景不适合静态路由无法感知故障浮动静态路由是一个很实用的技巧。你可以配两条静态路由去同一个目的网段一条主用一条备用备用那条的优先级调低。当主路由失效时备用路由自动顶上。配置方法是加一个优先级参数[R1] ip route-static 192.168.3.0 255.255.255.0 10.0.0.2 preference 60 [R1] ip route-static 192.168.3.0 255.255.255.0 10.0.0.3 preference 100preference值越小优先级越高默认是60。这样主路由断了备用路由就会生效。这个技巧在实际项目中非常有用成本低效果好。6.2 配置静态路由时的几个实用习惯第一个习惯配完就验证。不要配完就完事一定要display ip routing-table看一眼确认路由真的进去了。我见过有人配了路由但下一跳写错了一个数字路由表里根本没有自己还不知道。第二个习惯用Loopback接口做测试。Loopback接口永远不会down用它来模拟网段做实验最稳定。而且Loopback接口的地址可以作为设备的标识方便管理。第三个习惯写注释。华为设备支持在配置里加注释虽然静态路由命令本身不支持注释但你可以在接口或者全局配置里用description命令标注这条链路是干什么的。设备多了之后没有注释的配置根本看不懂。第四个习惯保存配置。配完记得save不然重启就没了。这个听起来是废话但真的有人忘了保存重启后一切归零白干。6.3 从静态路由到动态路由的过渡思路学完静态路由下一步自然就是动态路由。静态路由让你理解了路由表的基本结构和转发逻辑动态路由则是在这个基础上让设备自动学习和更新路由。OSPF、RIP这些动态路由协议本质上就是设备之间互相交换路由信息自动生成路由表条目。我的建议是静态路由一定要练熟因为它是理解一切路由协议的基础。你理解了静态路由的下一跳、出接口、优先级这些概念再学OSPF的时候那些LSA、邻居状态机、开销计算都会有一个清晰的参照系。很多人学动态路由觉得难就是因为静态路由的基础没打牢不知道路由表里的条目到底意味着什么。在实际项目中静态路由和动态路由往往是混用的。核心网络跑OSPF边缘网络用静态路由或者默认路由指向核心。这种混合架构既保证了核心区域的灵活性又简化了边缘设备的配置。所以静态路由不是学完就扔的东西它是你整个网络职业生涯里一直会用到的工具。