
你要是管过几台 Windows 服务器或者在公司给双网卡的办公电脑调过网络八成见过这个场面加一条静态路由网络很快就通了可一重启路由没了网络又回到原来的“错误出口”。遇到这种问题不少人的第一反应是“Windows 又抽风了”但实际上Windows 没捣乱只是你加的是临时路由系统一重启就把它忘干净了。真正要让路由长期生效必须配成永久路由。这篇文章就聊透一件事在 Windows 上配置一条重启不失效的永久路由。我会把原理、命令、参数和排查经验全部讲清楚。适合刚接触网络配置的运维新人也适合被双网卡、多网段问题折磨过的开发同事。你能得到的不是一句“加个 -p”的结论而是一套从判断网段到最终验证的完整方法。1. 先搞懂你要改的“路由表”是什么1.1 路由器做决定靠一张表Windows 也一样很多人一听到“路由”两个字就下意识觉得那是路由器、交换机才有的东西。其实 Windows 本身就是一个带路由功能的操作系统只不过它没有几个物理接口绝大多数情况下只做“把数据包发给默认网关”这一件事。但这个决策过程必须依赖一张路由表。路由表里每一行都是一条“路径规则”字段大致是字段含义举个例子网络目标要去的目的地址或网段192.168.88.0网络掩码这个网段的范围边界255.255.255.0网关数据包交给谁转发192.168.10.254接口数据包从本机哪张网卡出去以太网跃点数路径优先级越小越优先25当电脑要访问一个不归自己直连的 IP 时系统不会漫无目的地乱发而是拿着目标地址在路由表里从上往下找。找到能匹配的路由就把数据包交给这条路由指定的网关找不到就走默认路由。默认路由就是网络目标 0.0.0.0、掩码 0.0.0.0 的那一行通常指向你上网用的那个路由器。用一条命令就能看到当前的路由表route print如果是纯 IPv4 环境可以只打印 IPv4 部分route print -4输出结果会分成两块一块叫“活动路由”是当前正在使用的规则另一块叫“持久路由”是写入系统注册表、重启后依然生效的规则。默认情况下你看到的绝大多数条目都来自网卡配置和 DHCP属于系统自动生成的直连路由和默认路由。而我们手动要加的就是一条或者若干条静态路由。1.2 永久路由和临时路由差在哪用 route 命令添加路由默认是“临时路由”。临时路由有什么毛病它只存在于当前这次开机状态里。你重启 Windows或者运行route -f清空路由表它就没了。比如说你上午加了一条去 192.168.88.0/24 的路由网络通了结果晚上服务器一重启第二天客户又找你说“上不了那个段”。原因就是这条规则没有被保存。永久路由就是在添加时带上-p参数。这个参数会把路由写进注册表里的持久路由区域HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes系统在每次启动初始化 TCP/IP 协议栈时会重新读取这个注册表位置把里面的路由重新加载进系统。也就是说永久路由不是“活在当前内存里”而是“活在系统配置里”只有你手动删除它才会消失。想快速看当前机器上有哪些永久路由用这个route print -4看输出里的“持久路由”段落即可。如果之前有人配过永久路由这里会列出来。这也是配置之前必做的检查项免得旧规则和新规则互相打架。2. 配置前必须确认的三件事2.1 确认目标网段和掩码别把“子网范围”算错永久路由的第一个参数是“要去哪”也就是目标网络。很多人在这里只记了一个 IP比如“要访问 192.168.88.1”然后就写了这么一条命令route add 192.168.88.1 mask 255.255.255.255 192.168.10.254这条命令本身能成功但它只把“192.168.88.1 这一个 IP”的路由指过去了。如果你真正想访问的是 192.168.88.x 这一整段设备那这种做法就太窄了其他同网段的地址依然不会走这条路由。正确的做法是先弄清楚目标网段的子网掩码。网络目标、掩码组合起来决定这张路由表条目覆盖多大范围。子网掩码对应前缀长度包含多少 IP255.255.255.0/24254 个可用地址255.255.0.0/1665534 个可用地址255.255.255.128/25126 个可用地址255.255.255.255/32单个 IP判断方法很直观如果你要覆盖的是一个标准 C 类网段比如 192.168.88.0 到 192.168.88.255就写mask 255.255.255.0如果对方只给了你一个单独的服务器地址并且明确说没有其他网段那就用 /32也就是mask 255.255.255.255。这类路由也叫主机路由适合“只让一个 IP 走专线”的场景。2.2 确认网关和接口搞清楚数据该从哪张网卡出去这一步是新手最容易忽略的。很多人只关心“目标网段”和“网关地址”却忘了检查这个网关到底能不能从当前电脑的某个接口直接到达比如电脑有有线网卡和无线网卡。有线网卡接在 192.168.10.0/24 办公网里无线网卡接在 192.168.50.0/24 访客网里。你想让访问 192.168.88.0/24 的流量走办公网网关 192.168.10.254那路由的“接口”位就必须是有线网卡。如果你随口把网关写成无线网卡那段的某个地址命令会直接报错因为系统找不到能够直达这个网关的接口。先查看接口列表和索引编号用命令route print输出底部有一个“接口列表”区域会显示类似这样的内容接口列表 12...00 15 5d 1e 02 86 ......以太网 6...00 23 24 2a 11 38 ......WLAN这里的 12、6 就是接口索引。配置路由时如果你不指定接口Windows 一般会自动选择能到达网关的那个接口但多网卡环境偶尔会选错。为了稳妥建议显式指定接口编号。再加一个判断网关的 IP 必须和某个本机接口处于同一广播域。怎么看打开网卡属性看 IPv4 地址或者用ipconfig确认好本机接口的 IP 和网关在同一网段加出来的路由才是实实在在有物理链路支持的。2.3 确认你要用的是 IPv4 还是 IPv6日常说的“永久路由”绝大多数是 IPv4 静态路由。但 Windows 的 route 命令同时支持 IPv4 和 IPv6如果你不特别指定命令默认操作的是 IPv4。这在大多数情况下没问题但如果你需要给 IPv6 加永久路由就要注意参数格式。查看 IPv6 路由表route print -6添加 IPv6 永久路由的写法类似但目标地址写成 IPv6 地址段掩码部分换成前缀长度route -p add 2001:db8::/32 2001:db8:1::1注意IPv6 路由没有独立的“mask”说法直接用/前缀长度。而且在实际企业中IPv6 路由通常由路由器下发手动配置的场景比 IPv4 少得多。如果你不是明确要做 IPv6 测试建议先把 IPv4 的逻辑搞透别混在一起配容易把自己绕晕。3. Windows 配置永久路由完整实操3.1 最基本的一条静态永久路由先把最简单的场景说清楚你本机在 192.168.10.0/24 网段网关是 192.168.10.254现在要访问公司的 192.168.88.0/24 网段而这个网段不在你直连范围内需要通过 192.168.10.254 转发。打开命令提示符或 PowerShell记住要用管理员身份运行。然后执行route add 192.168.88.0 mask 255.255.255.0 192.168.10.254 -p命令结构拆开看route add添加一条路由192.168.88.0目标网络mask 255.255.255.0目标网络掩码192.168.10.254下一跳网关-p持久化重启不丢执行成功后命令提示符不会打印一大堆文字通常就一句“确定!”或者直接安静返回。你可以用route print -4看持久路由区域里是否多了这一条。如果命令报错最常见原因是权限不足。在 Windows 11 或 Windows Server 上不带管理员权限运行 route 命令多半会提示“拒绝访问”。解决办法是右键“命令提示符”或“Windows PowerShell”选择“以管理员身份运行”。3.2 指定出口网卡多网卡时的正确姿势如果电脑有好几张网卡只是写目标网段和网关还不够。Windows 虽然会自动判断接口但自动判断偶尔会跑到你不想让它走的网卡上去尤其是网关地址刚好分成两段的时候。我实际遇到过一个场景电脑同时接了办公网和调试网办公网网关是 192.168.10.254调试网网关是 10.10.10.254。我要访问一个生产网段 172.16.8.0/24只能通过办公网走出去但 Windows 自作主张把数据交给了调试网卡结果怎么都不通。解法就是显式指定接口。先查出办公网卡的接口索引再用if参数route add 172.16.8.0 mask 255.255.255.0 192.168.10.254 if 12 -p这条命令里的if 12就是强制让路由从接口索引为 12 的网卡出去。怎么查接口索引前面提过route print底部“接口列表”里就有。也可以看网卡名称后面对应的数字。比如接口列表显示12...00 15 5d 1e 02 86 ......以太网那以太网卡的索引就是 12。如果你的网卡索引是多网卡环境里经常变的建议在配置完路由后用route print -4确认接口有没有选对。3.3 顺带把跃点数优先级一起配好永久路由不是配完就一劳永逸你还要关心它和其他路由的优先级。Windows 在匹配路由时先按“最长匹配”原则选路由也就是说掩码越长、匹配越精确的路由越优先。比如访问 192.168.88.5 时192.168.88.0/24 肯定比 0.0.0.0/0 优先。但如果有两条路由的网络目标、掩码完全一样或者掩码匹配程度一样系统就会比较跃点数也就是 metric。跃点数越小优先级越高。默认情况下Windows 会根据网卡速度自动算一个跃点数但自动结果不一定符合你的预期。手动指定跃点数命令是这样route add 192.168.88.0 mask 255.255.255.0 192.168.10.254 metric 20 if 12 -p这里的metric 20就是给这条路由一个比较小的跃点数让它优先于某些默认路由。也有一种反过来的用法两条路由指向同一个目标网段一条通过 A 网关一条通过 B 网关你想让 A 优先就给 A 配小跃点数给 B 配大跃点数。这样平时流量全部走 AA 一旦路由表里消失B 才会接管。这种“主备双路”的玩法在双出口环境里很有用。3.4 修改、删除永久路由的正确方法配置永久路由不只是“增加”还要会“改”和“删”。一条路由的参数写错了不用重启电脑直接在管理员命令行里删除后重新加。删除一条路由route delete 192.168.88.0 mask 255.255.255.0 192.168.10.254如果这条路由当初是通过-p永久化的删除命令通常也能把它从持久路由区域一并清掉。删完后再用route print -4确认持久路由区域里已经没有这条记录。如果你只是想改网关或者改跃点数不用先删再加可以直接用route changeroute change 192.168.88.0 mask 255.255.255.0 192.168.10.253 metric 30 if 12注意一点route change只修改已存在的路由不能凭空创建一条新路由。如果你用change去改一条不存在的规则命令会报错。所以更稳妥的做法是先删除旧路由再加新路由避免中间状态让人迷惑。还有一个干净利落的清空操作route -f这条命令会清空所有非直连路由。注意它清的是当前路由表不保证清掉持久路由。而且执行后如果没有马上补回正确的路由可能连网都上不了。所以不要在生产环境随手执行route -f。4. 常见问题与排查4.1 加了路由不生效哪里都没通路由加成功了但流量还是不走这条路。这种问题最气人。排查顺序建议这样来第一看路由表条目到底有没有进到“活动路由”区域。route print -4里的“持久路由”有记录不代表“活动路由”里它已经在用。如果持久路由存在但活动路由里没有多半是路由加载失败或者被优先级更高的其他路由覆盖。第二检查“接口”列是否如你所愿。比如你计划从 192.168.10.0/24 的有线网卡出去结果路由表里接口列显示的是 WLAN 的 IP那流量肯定不按你想的走。解决办法就是加上if 接口索引重新添加。第三测试连通性时别只看 ping 结果。有些网络环境禁 ping先ping一下网关再ping目标网段的某个设备最后用tracert看路径tracert -d 192.168.88.1tracert能看到第一个跳跃点是不是你指定的网关。如果第一跳直接跳到默认网关说明路由匹配根本没生效。4.2 提示“路由添加失败”或“拒绝访问”这个问题一半是权限一半是地址不合法。先说权限。Windows 10/11 和 Windows Server 都要求管理员权限才能修改路由。你如果是普通账户直接在开始菜单搜索 cmd 然后回车十有八九会报“拒绝访问”。正确做法是右键“以管理员身份运行”。再说地址合法性。常见的报错之一是“指定的网关无法到达”。这通常意味着你写的网关 IP 和本机当前所有接口都不在同一个网段。解决思路不是硬加而是先ipconfig确认哪张网卡能直达这个网关或者换一个网关。还有一种情况是网段和掩码不匹配。比如你写route add 192.168.88.0 mask 255.255.255.128这个组合其实覆盖的是 192.168.88.0 到 192.168.88.127。如果网关那边实际配置的是192.168.88.0/24那你这条路由只覆盖了一半后半段依然不通。所以掩码一定要和目标网络实际情况保持一致。4.3 重启后永久路由消失了理论上只要加了-p路由就会写入注册表重启后自动加载。如果重启后它还是消失了可以从两个方向找原因。第一检查你是不是后来执行过route -f之后再叠加了其他操作。route -f清空的是当前路由表但如果系统在关机阶段重新加载了不完整的持久路由配置或者你在某个脚本里又调用了route delete那是会被删掉的。第二确认持久路由是否真的写在注册表里。打开注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes在右侧能看到类似192.168.88.0/255.255.255.0/192.168.10.254/12/20的值。这里每个字段分别对应“网络目标/掩码/网关/接口索引/跃点数”。如果这里没有记录说明你之前加的并不是永久路由只是临时路由重启后消失是完全正常的。另外如果你用的是通过 DHCP 下发的全部配置某些网络策略或安全软件会在开机后清理路由表。遇到这种环境单纯靠route -p add可能不够你得把这条命令放到计划任务里开机执行或者用 PowerShell 在系统启动时重新写入。4.4 两条永久路由抢流量多网卡机器上最容易出现这种状况两条路由的网络目标一模一样一条指向 A 网关一条指向 B 网关Windows 最后选了不想要的那条。为什么会这样因为 Windows 选路时不只看网络目标还看跃点数、网卡速度、接口状态。你想让某条路由胜出最直接的方法是给更希望走的那条路由配更小的metric。比如route add 192.168.88.0 mask 255.255.255.0 192.168.10.254 metric 10 if 12 -p route add 192.168.88.0 mask 255.255.255.0 192.168.20.1 metric 100 if 6 -p这样默认情况下流量走第一条第二条作为备用。但注意metric 10和metric 100不能保证第一条永远稳定优先因为 Windows 还可能根据网络成本自动修正。如果需要更精细的控制可以在网卡的 IPv4 高级设置里把“自动跃点”关掉手动填一个保守数值让系统不再乱调。5. 一些踩过坑之后养成的习惯最后分享几个我在实际配置里养成的习惯不算什么高深技巧但确实能少踩坑。第一个习惯配置前先导出当前路由表快照。在改动之前执行一下route print -4 C:\route_backup.txt改出问题后可以直接打开这个备份文件对照着看改动前后到底差在哪。你可能会说route 命令改动看着也没几条不至于这么谨慎。但生产服务器上出问题的时候有一个历史快照真的能救命。第二个习惯给每条永久路由加注释式的命名。Windows 的 route 命令没有注释功能但你可以把配置命令和业务用途写进一个脚本文件里放到服务器特定目录:: 访问工厂生产网段走办公网出口 route add 172.16.8.0 mask 255.255.255.0 192.168.10.254 if 12 metric 20 -p :: 访问历史监控系统走备份出口 route add 10.20.0.0 mask 255.255.0.0 192.168.10.253 if 12 metric 30 -p下次再有人问“这台机器为什么多了一条路由”你翻一下脚本就知道当时是什么业务需求不用对着路由表猜。第三个习惯加完永久路由后不等重启先手动验证再持久化。我的做法是分两步走先不加-p用临时路由测试连通性确认没问题后再删除临时路由加上-p。你可能觉得多此一举但实际环境里网关可达性和业务端口可用性本来就要先验证没必要直接把一条可能错误的路由写进系统注册表污染整台机器的启动配置。第四个习惯定期检查持久路由。Windows 机器跑久了持久路由区域里很可能积攒一些早就用不上的旧规则。检查命令route print -4专门看“持久路由”区域。发现不需要的直接route delete清掉。遗留路由比没有路由更麻烦因为你看网络不通时会多一个干扰项。我个人实际操作下来永久路由最大的价值不是“省得每次都敲一遍命令”而是把网络的确定性还给了系统。服务器重启后路由还在业务还能通这种稳定感是临时路由给不了的。如果你现在正好被重启丢路由的问题折腾照着上面的命令把-p加上大概率一次就能解决。