ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

从路由表到静态路由:华为设备配置与排错实战

从路由表到静态路由:华为设备配置与排错实战 做网络基础系列写到第八篇我越来越觉得一个现象很有意思很多人对路由这个概念的理解停留在路由器就是上网用的盒子这个层面真正让他说出路由器是怎么决定数据包往哪走的就卡住了。尤其是从家用路由器转到命令行设备之后面对满屏的英文命令很容易懵。这篇我把路由器的原理和配置串一遍以华为设备的命令为例实验环境就用eNSP。如果你用的是真机或者GNS3命令风格基本一致思路完全通用。看完你至少能回答三个问题路由表到底在干什么静态路由怎么配才算配对了路由不通的时候从哪查起1. 路由器存在的理由从网络为什么需要互联讲起1.1 二层交换机的边界广播域与隔离需求要理解路由器先得知道它出现之前网络卡在哪。交换机工作在二层它靠MAC地址转发帧这个机制在同一个广播域内非常高效。但二层网络有个天然的麻烦广播帧会被整个广播域的设备接收。想象一下一个几百台电脑的大局域网如果有人发起ARP广播或者某个端口出现环路广播风暴会瞬间把网络打瘫。而且二层网络规模越大MAC地址表越膨胀交换机查表转发的压力也越大。更关键的是二层设备没法隔离广播域。你没法用一个交换机把公司财务部和研发部在逻辑上彻底隔开——即使划分了VLAN不同VLAN之间的通信仍然需要三层设备的介入也就是路由。1.2 路由器的核心动作查表、比较、转发路由器的本质就是一个三层快递分拣中心。它的工作流程可以压缩成三个动作收到一个数据包拆开看目的IP地址。拿这个目的IP去查路由表找到匹配的条目。根据路由表条目里写明的下一跳和出接口把数据包从正确的接口转发出去。这个过程中路由器并不关心数据包里的业务数据是什么它只关心目的IP往哪送。所以路由器的核心资产就是那张路由表。所有路由协议、静态配置、直连网段最终汇聚成一张表。表里有什么路由器就能把包送到哪表里没有的数据包只有一个下场——被丢弃然后给你回一个ICMP不可达的消息。我在实际排错时经常提醒自己一句话路由不通九成是路由表里缺条目或者条目本身写错了。所以排查的第一步永远是看路由表而不是反复ping。2. 路由表才是路由器的大脑字段、匹配规则与优先级2.1 看懂路由表的每一列目标网段、掩码、下一跳、出接口、来源在华为设备上用display ip routing-table会看到类似下面的输出Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Destination/Mask Proto Pre Cost Flags NextHop Interface 192.168.1.0/24 Direct 0 0 D 192.168.1.1 GigabitEthernet0/0/0 192.168.2.0/24 Static 60 0 D 192.168.1.254 GigabitEthernet0/0/0每一列都别忽略Destination/Mask目的网段和掩码表示要去哪个网络。注意路由表里的掩码决定了这个条目覆盖的范围。Proto路由的来源可能是Direct直连、Static静态、RIP、OSPF等。Pre管理距离华为叫优先级数字越小越优先。直连路由是0静态路由默认60OSPF是10RIP是100。Cost度量值在优先级相同的情况下这个值越小越优先。NextHop下一跳地址把包交给谁。Interface出接口从哪个口把包送出去。一个新手最容易犯的错是只看NextHop不看Interface。如果下一跳和设备接口不在同一个网段这条路由就是废的设备无法递归找到下一跳的MAC地址数据包根本发不出去。2.2 最长前缀匹配路由表里真正的最优路径规则很多人以为路由选路靠的是管理距离和度量值其实那只发生在不同路由条目竞争同一个目标网段的时候。数据包到达路由器后第一优先规则是最长前缀匹配。什么意思举个例子。路由表里有两条路由192.168.1.0/24下一跳是 192.168.2.1192.168.1.128/25下一跳是 192.168.2.2现在来了一个目的地址是192.168.1.130的数据包。它同时匹配这两条路由但路由器会选择掩码更长、更精确的/25那条从 192.168.2.2 转发出去。这就像一个快递公司既有北京市的配送规则又有北京市海淀区中关村街道的专属规则送到中关村的快件当然按更精细的规则走。理解了这个你就明白为什么默认路由0.0.0.0/0永远在路由表里排最后——因为它的掩码是0什么都匹配但只有没有更精确条目时才轮到它。2.3 管理距离与度量值两个优先级别搞混管理距离Pre和度量值Cost是选路时两个不同层面的概念。管理距离用来比较不同来源的路由。比如同一条10.0.0.0/24的路由同时被OSPF和静态路由学到该信谁这时候看管理距离OSPF是10静态是60OSPF胜出。度量值用来比较同一来源的竞争路由。比如OSPF学到了两条去往10.0.0.0/24的路径一条Cost是10一条Cost是20走Cost小的那条。我在课堂上总打一个比方管理距离是招聘时的学历门槛度量值是面试时的分数量。门槛决定了谁有资格进下一轮分数决定了最终谁被录用。3. 静态路由配置实操三台路由器打通全网的完整过程3.1 实验拓扑与IP规划配置最忌拍脑袋。我习惯先画一张表把IP规划清楚再动手。今天用最经典的三角拓扑R1、R2、R3三台路由器首尾相连形成环同时每台路由器下面还挂一个模拟终端的网段目标是让三个终端网段全互联。设备接口IP地址对端设备对端接口R1G0/0/0192.168.12.1/24R2G0/0/0R1G0/0/1192.168.13.1/24R3G0/0/0R1LoopBack01.1.1.1/32--R2G0/0/0192.168.12.2/24R1G0/0/0R2G0/0/1192.168.23.2/24R3G0/0/1R2LoopBack02.2.2.2/32--R3G0/0/0192.168.13.3/24R1G0/0/1R3G0/0/1192.168.23.3/24R2G0/0/1R3LoopBack03.3.3.3/32--设备间的互联网段用12、13、23编号清晰好记。LoopBack口模拟设备自己所在的业务网段也是后面验证选路行为的工具。3.2 接口IP配置先把物理链路变成直连路由打开eNSP启动三台路由器如果遇到路由器启动失败八成是VirtualBox版本兼容问题或者CPU虚拟化没开这个后面再单独说。先进入系统视图配置接口地址以R1为例system-view sysname R1 interface GigabitEthernet0/0/0 ip address 192.168.12.1 24 undo shutdown interface GigabitEthernet0/0/1 ip address 192.168.13.1 24 undo shutdown interface LoopBack0 ip address 1.1.1.1 32R2、R3如法炮制。配完后在R1上执行display ip routing-table你会看到三条直连路由自动出现在表里Proto列是DirectPre是0。这就是直连路由——只要接口配好IP并启用路由器自己就知道这个网段从哪个口出去不需要手动配。这里有个细节容易忽略接口配好IP后一定要确认接口的物理状态和协议状态都是UP。华为设备用display ip interface brief查看如果看到某个接口显示Down先查网线、查对端设备是否同样配好别急着配路由。链路不通路由配了也是白配。3.3ip route-static命令的参数逻辑接口都通了以后每台路由器还只认识自己身边的网段。要让全网互通就必须在这些路由器之间添加静态路由。华为的命令格式是ip route-static 目标网段 掩码 下一跳地址在R1上要去2.2.2.0/24这个网段下一跳应该是192.168.12.2ip route-static 2.2.2.0 24 192.168.12.2注意一个问题下一跳地址必须是自己能直连到达的地址。也就是说这条命令里的下一跳地址必须是R1某个接口同网段的对端地址这是静态路由配置中最核心的语义。你写一个隔了两跳的地址做下一跳设备根本找不到它路由不会生效。以此类推为了全网互通每台路由器需要把另外两台的LoopBack网段写进去。R1上还需要一条ip route-static 3.3.3.0 24 192.168.13.3R2上需要两条ip route-static 1.1.1.0 24 192.168.12.1 ip route-static 3.3.3.0 24 192.168.23.3R3上同样两条ip route-static 1.1.1.0 24 192.168.13.1 ip route-static 2.2.2.0 24 192.168.23.2掩码这里写成24是因为LoopBack口的地址是1.1.1.1/32但静态路由指向整个1.1.1.0/24网段虽然只包含一个主机但作为条目是合理的。实际线上环境你往往会写精确的32位掩码取决于业务需求。3.4 验证配置从display ip routing-table到tracert配完别急着说搞定验证分三步走看路由表在R1上执行display ip routing-table确认2.2.2.0/24和3.3.3.0/24都在表里Proto列是Static。ping对端设备在R1上ping 2.2.2.2能通说明R1到R2的转发和R2的回应路径都正确。tracert看路径在R1上执行tracert 3.3.3.3观察每一跳的地址是否符合预期。如果ping不通先ping下一跳地址192.168.12.2通了再ping远端地址。这个逐级放大的思路就是前面说的分层排查能把问题快速压缩到某一层。我在实际配置中还习惯每配完一台设备就立即验证三台全配完再一起检查的方式容易让人在排查时手忙脚乱因为你不知道问题出在谁的配置上。4. 默认路由与末梢网络设计一条路由解决出口问题4.1 什么时候该用默认路由静态路由的缺点在稍大一点的网络里会暴露得很明显——条目太多维护成本高。比如一个分公司网络出口路由器只连接总部底下所有网段上网都走这一个出口如果给每条业务网段都在出口路由器上写一条指向上级的静态路由配置量会非常大而每条路由的下一跳其实都一样。这时就该上默认路由。写一条0.0.0.0/0的路由意思是查不到任何精确匹配的路由时统一送到这个默认出口。末梢网络stub网络只有一个出口的场景这是最经典的设计。4.2 配置默认路由的两种写法华为设备上默认路由的命令和普通静态路由一样只是目标网段变成了全零ip route-static 0.0.0.0 0 192.168.100.254这里掩码是0任何目的IP都能匹配上这条路由但因为最长前缀匹配的存在它只在没有更精确条目时才会被使用。除了指向下一跳IP还有一种写法是指向出接口ip route-static 0.0.0.0 0 GigabitEthernet0/0/0两种写法在工作原理上有个区别指向出接口时路由器认为目的地址直接在该出接口的网段内会直接对该网段发送ARP请求找目标设备指向下一跳IP时路由器先递归查找下一跳的直连路由再在直连网段内ARP解析下一跳。在串行链路比如PPPoE拨号上下一跳IP可能不固定指接口更省事在以太网多路访问链路上我建议优先写下一跳IP语义更清晰也更规范。4.3 默认路由与静态路由的组合设计在实际项目里默认路由常常和明细静态路由配合使用。比如核心交换机上对内部各业务网段写精确的静态路由保证内网流量按最优路径走对访问互联网的流量只写一条默认路由指向防火墙让防火墙去做NAT和安全策略。这样一个明细默认的组合既保证了内部流量的精准控制又简化了出口配置。经验之谈默认路由是把双刃剑。它虽然简洁但如果网络里有环路比如两台路由器互相把默认路由指向对方所有未知目的地的流量都会在这两台设备之间循环转发直到TTL耗尽。所以写默认路由之前一定先确认目标网段确实只能从这一个口出而且全网没有其他指向你的默认路由回路。5. 路由并存时的优先级与环路陷阱5.1 直连、静态、动态路由的管理距离对比在设备上同时存在多种路由来源时路由表会按管理距离选出一条最优的装入路由表。华为设备常用路由来源的默认管理距离如下路由来源管理距离Pre直连路由0OSPF10静态路由60RIP100BGP255不可信这个表意思是如果某网段同时有直连、OSPF、静态三种来源的路由设备会优先使用直连然后是OSPF最后才轮到静态。我以前接过一个项目运维在核心设备上同时配了OSPF和一条静态路由指到备份线路结果发现流量总是走静态那一条而不是OSPF更优的路径查了半天才发现他把静态路由的管理距离手动改成了5比OSPF还优先。所以看到流量走的路径和预期不符时第一反应是查路由表里那条路由的Pre值和Cost值而不是怀疑设备坏了。5.2 度量值如何影响同来源路由的选路同一来源的路由如果出现多条到达同一目标网段的路径就比较度量值。静态路由的默认Cost是0多条静态路由指向同一网段时Cost小的优先Cost相同且都满足条件时会形成等价负载均衡流量按五元组哈希分流到两条路径上。配置等价路由很简单就是写两条目标网段相同、下一跳不同的静态路由ip route-static 10.1.1.0 24 192.168.1.1 ip route-static 10.1.1.0 24 192.168.2.1这两条Cost都是0设备会把10.1.1.0/24放入路由表Flags里会出现两个下一跳。手动验证时用display ip routing-table 10.1.1.0就能看到多路径信息。但在实际项目中等价路由必须配合底层链路的带宽差异来设计如果一条是千兆、一条是百兆强制等价负载均衡反而会导致小带宽链路拥塞这种情况应该调整Cost让流量按比例走或者干脆改成主备。5.3 环路是怎么形成的一个配置错误引发的思考路由环路是静态路由配置中最可怕的问题而且它不会立刻让网络全断只会在访问某些特定目标时表现为时而能通、时而超时。经典场景是这样的R1和R2之间有两条链路相连R1上配了一条默认路由指向R2R2上误配了一条默认路由指向R1同时内网的某个未知网段恰好没有更精细的路由。两台路由器收到未知目标的包后会互相把包踢给对方直到TTL减到0才被丢弃。排查环路的手段很直白在R1上执行tracert到那个未知目标你会发现路径在R1和R2之间反复横跳每一跳的TTL都在递减。看到了就说明环路形成去查那两条默认路由的指向把错误那条删掉。平时配置静态路由时形成个习惯每加一条路由就问自己如果这条路由指向的下一跳设备也配了指向我的路由会发生什么。这种反向思维在解决大规模网络故障时特别重要。5.4 主备路径的配置思路生产网络里最常用的静态路由高级玩法是浮动静态路由。原理很简单正常链路用一条静态路由Cost设为0备用链路用另一条静态路由Cost调大比如设为10。正常路由在路由表里存在时备用路由不生效一旦主链路断了主路由从路由表消失备用路由自动顶上。# 主链路 ip route-static 10.1.1.0 24 192.168.1.1 # 备用链路 ip route-static 10.1.1.0 24 192.168.3.1 preference 70注意华为设备调整静态路由优先级用的是preference参数。光看命令的下一跳地址你会觉得这不是两条普通路由吗但优先级不同导致它们并不会形成等价而是形成主备。切换是自动的切换过程中丢几个包正常这在很多预算有限不跑动态路由协议的场景里非常好用。我搭过不少小企业网络出口两条线路一个电信一个联通核心交换机上就用浮动静态路由做自动切换稳定跑了两年没出过问题。6. 一次路由不通故障的完整排查复盘6.1 故障现象与初步判断某次线上环境运维反馈分公司访问总部一个服务器偶发超时ping测试发现丢包率在20%左右。第一时间我没有去抓包而是先确认网络拓扑——这个行为我建议所有人都养成习惯排查路由故障先用三分钟回忆/画出数据包的完整路径拓扑比急着敲命令强得多。分公司出口路由器记为R1通过专线接到总部核心记为R2R2上连着服务器网段10.10.10.0/24。正常情况下R1上应该有一条去往10.10.10.0/24的静态路由指向R2。6.2 逐层排查的完整链路按顺序执行以下步骤第一步在R1上display ip interface brief。确认出接口状态UP。这个很外围但必须先排除因为物理链路闪断也会造成丢包。第二步在R1上display ip routing-table 10.10.10.0。结果让我意外路由表里根本没有这个网段只有一条默认路由。也就是说访问服务器的流量其实一直在走默认路由而后面的路径恰好是错的——流量被丢进了另一条错误的链路时通时断的原因就在这里。第三步查看配置display current-configuration | include ip route-static。发现R1上定义静态路由时把目标网段的掩码写成了10.10.10.0 16而基站的地址是10.10.10.0/24。虽然10.10.10.0也能被10.10.10.0/16覆盖但由于R2上有另一段更精确的10.10.0.0/16业务网R1设备可用的精确条目不同导致流量实际走了默认出口。第四步修正配置undo ip route-static 10.10.10.0 16 192.168.0.254 ip route-static 10.10.10.0 24 192.168.0.254改完再看路由表正确条目出现丢包现象立即消失。这个案例里最坑的地方在于错误掩码导致路由仍然存在网络不会完全断只是路径不对。这种半通不通的状态比完全不通更难排查因为ping一下似乎能通但业务已经受影响。6.3 常见低级错误汇总把这些年踩过的坑整理一下基本是下面几类错误类型现象排查要点掩码写错网络半通、路径不对核对目标网段实际掩码下一跳不可达路由表有条目但转发失败ping一下下一跳地址方向写反A能通BB不能通A检查两台设备的双向路由接口Down直连路由缺失display ip interface brief优先级冲突流量走备用路径检查Pre值和Cost值默认路由环路访问未知目标超时tracert观察反复跳变每一条我都实际遇到过一次以上。配置命令本身不难难的是形成一套配置前怀疑、配置后验证的习惯。尤其在有冗余链路的网络里一条静态路由写错可能影响的是整张路由表的选路结果。6.4 排查工具与命令速查最后分享一份我在日常排错中高频使用的命令清单全部基于华为VRP思科设备把display换成show即可思路一致目标命令查看路由表display ip routing-table查看特定路由display ip routing-table 10.1.1.0查看接口状态display ip interface brief查看接口详情display interface GigabitEthernet0/0/0查看当前配置display current-configuration查看ARP表display arp测试连通性ping -c 100 10.1.1.1查看路径tracert 10.1.1.1清除路由表慎用reset ip routing-table statistics在这里多说一句ping -c 100的用法。很多人ping个三五次通了就认为网络正常但在排查偶发丢包问题时三五个包根本说明不了问题。一次性发100个包看丢包率是否有规律这样才能定位是链路负载问题、环路问题还是设备CPU处理不过来。我见过太多人拿一个丢包率0%的结果就否定了用户报障的真实性结果最后发现是特定大小报文才丢普通ping包太小根本测不出来。路由器的原理和配置说到这儿核心的东西其实就围绕路由表这一个中心点。你把这篇文章里的静态路由配明白了再看动态路由协议OSPF、RIP也好策略路由也好都会发现它们只是往这张表里塞条目的手段不同选路逻辑万变不离其宗。最后留个建议找个eNSP自己把那个三台路由器的拓扑搭起来把每条命令敲一遍再把第5章和第6章的错误场景故意配出来看看现象这比看十篇文章都管用。
返回列表