Windows系统仅允许一条默认路由生效,通过PowerShell可设置跃点数优先级、添加静态目标路由、脚本化切换网关实现多网关逻辑管理。
powershell 本身不支持“同时启用多个默认网关”,windows 系统底层路由机制只允许一条 0.0.0.0/0 默认路由生效——系统会自动选择 metric(跃点数)最小 的那条。所谓“多网关管理”,本质是通过 powershell 精准控制各网卡的跃点优先级、添加特定目标路由、或按需切换默认出口,实现逻辑上的内外网分流与故障转移。
一、用跃点数(Metric)决定默认网关优先级
这是最常用、最稳定的方式,适用于双网卡(如以太网+Wi-Fi)同时在线场景:
- 获取当前网卡接口索引和跃点值:
Get-NetIPInterface -AddressFamily IPv4 | ft InterfaceAlias, IfIndex, InterfaceMetric
- 将主上网网卡(如“以太网”)设为高优(Metric=5),备用网卡(如“Wi-Fi”)设为低优(Metric=30):
Set-NetIPInterface -InterfaceIndex 12 -AddressFamily IPv4 -InterfaceMetric 5 Set-NetIPInterface -InterfaceIndex 5 -AddressFamily IPv4 -InterfaceMetric 30
- 效果:系统自动生成两条默认路由,但仅 Metric=5 的那条实际用于所有未匹配的流量;Metric=30 的作为“待命路由”,不会干扰主路径。
二、添加静态路由实现目标网段精准走指定网关
当需要访问多个内网段(如 10.10.1.0/24、172.16.8.0/22)且它们各有独立网关时:
- 不改动默认网关,只为特定目的网络加路由:
# 让去往开发网段走开发网关 New-NetRoute -DestinationPrefix "10.10.1.0/24" -NextHop "10.10.1.1" -InterfaceAlias "以太网" -PolicyStore PersistentStore # 让去往测试网段走测试网关 New-NetRoute -DestinationPrefix "172.16.8.0/22" -NextHop "172.16.8.1" -InterfaceAlias "以太网" -PolicyStore PersistentStore
-
-PolicyStore PersistentStore确保重启后仍存在;若仅临时测试,可省略该参数。
三、脚本化切换默认网关(适合单网卡多环境)
适用于开发人员需频繁在不同办公网络间切换(如公司内网 vs 宿舍宽带):
- 先清除现有默认路由:
Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Remove-NetRoute -Confirm:$false
- 再添加新默认网关(带跃点):
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.1.1" -InterfaceAlias "以太网" -RouteMetric 10
- 可封装成函数,配合参数
-Env "Office"或-Env "Home"自动加载对应网关与DNS。
四、检查与验证是否生效
- 查看当前生效的默认路由:
Get-NetRoute -DestinationPrefix "0.0.0.0/0" | ft DestinationPrefix, NextHop, RouteMetric, InterfaceAlias
- 测试某目标地址实际走哪条路:
Test-NetConnection 10.10.1.100 -TraceRoute # 观察第一跳是否为你设定的内网网关
- 检查网关连通性(避免配置了却不通):
$gw = (Get-NetIPConfiguration).IPv4DefaultGateway.NextHop Test-NetConnection $gw -Quiet
不复杂但容易忽略。


















