Windows双网卡路由分流:接口索引、跃点数与静态路由实战
2026/9/17 17:14:13 网站建设 项目流程

Windows 配置双网卡这件事,说穿了就一句话:让一台机器同时接两条网线,各走各的路,互不打架。听着简单,但我在过去几年里帮人收拾过的烂摊子,十个里有八个是"插上第二块网卡,结果整个机器上网都瘫了"。典型症状是内网系统打不开、外网时通时断、DNS 解析慢到让人砸键盘。这类问题的根子不在网卡本身,而在 Windows 的路由决策机制——它默认只认一条最优先的路,你不告诉它怎么分流,它就用最笨的方式替你选。

这篇内容适合三类人看:一是办公机要同时接公司内网和互联网的人,二是做设备调试、需要一边连被测设备一边查资料的工程人员,三是手上有双出口或双网段的服务器运维。前面我会把原理讲透,包括接口索引、跃点数、路由表这三样东西到底怎么配合;中间给一套可以直接抄的配置流程,图形界面和命令行两版都有;后面是变体场景和踩坑记录。全程只需 Windows 自带工具,不依赖任何第三方软件。

1. 双网卡要解决的是什么问题,先想清楚再动手

很多人一上手就插网卡、改 IP,改完发现不通,再回头猜哪儿错了。这个顺序反了。双网卡配置本质上是路由规划问题,先想清楚"哪些流量该走哪条线",配置只是把想法翻译成命令。

1.1 三种最常见的双网卡场景

第一种是内网办公 + 外网访问。一块网卡接公司内网,用来访问文件服务器、ERP、内部 Git、数据库;另一块接互联网,用来查文档、拉公共依赖、收邮件。这是最普遍的场景,也是矛盾最集中的场景——因为两边的网段通常互不可见,而 Windows 又只能有一个默认出口。

第二种是设备调试。做嵌入式、工控、网络设备的人特别熟:一块网卡接被测设备的私有网段(比如 192.168.0.x),另一块接正常办公网。被测设备的 Web 管理页面、SSH 端口都在那个私有网段里,但设备本身不提供上网能力。

第三种是多出口或冗余。比如一条宽带加一条专线,或者服务器上有两块网卡分别接不同交换机,一块做主用一块做备份。这种场景对配置精度的要求最高,因为一旦切换逻辑没设对,会出现"主线路挂了但流量没切过去"或者"两条线来回抢"的情况。

三种场景的配置手法有共同点,也有明显差异,后面我会分开讲。判断自己属于哪一类,是第一步。

1.2 网卡选型:板载、PCIe、USB 该怎么挑

绝大多数主板都带一块板载网卡,所以双网卡意味着你得再添一块。可选的就三条路:PCIe 独立网卡、USB 网卡、以及主板自带第二块(部分工作站主板有)。

台式机和服务器优先选PCIe 网卡。理由很实际:走 PCIe 通道,延迟稳定、不占 CPU、不受 USB 供电波动影响。芯片方面,Intel 的 I210、I211、I225 系列在 Windows 下驱动成熟,长时间跑不抽风;常见的 2.5G 方案(比如 RTL8125)家用完全够用,驱动在较新的 Windows 版本里是自带的。买之前确认一下主板有没有空余的 PCIe x1 插槽,别买回来发现被显卡挡住了。

USB 网卡胜在方便,适合笔记本和临时场景。但有几个坑必须提前知道:USB 3.0 网卡在持续大流量下发热明显,芯片温度上来之后会掉速甚至断连;USB 口供电不足会导致网卡间歇性失联,表现为"网络偶尔断一下又自己好了",极难排查。如果一定要用,优先选带独立供电或者带散热片的型号,并且插在主板后置的 USB 口上,别用前置面板和 Hub。

笔记本的话还有第三种选择:有线 + 无线组合。板载有线接内网,Wi-Fi 接互联网,这是最省钱的方案。缺点是 Wi-Fi 的链路质量波动大,跑数据库这类对稳定性敏感的应用会很难受。但作为查资料、下载依赖的出口,完全够用。

1.3 影响范围:配错了会连累哪些工作

双网卡配错的代价,往往不是"多一块网卡不能用",而是"整台机器都不好用"。我把常见的影响列一下,你可以对照自己的情况判断风险等级。

  • 外网访问间歇性失败:两块网卡都配了默认网关时,Windows 会在两个出口之间做选择,链路状态稍有变化就可能切走,表现为网页加载一半卡住、下载断流。
  • 内网服务连接超时:内网网段没有对应的路由条目时,发往内网服务器的包会被丢给默认网关(也就是外网出口),然后石沉大海,客户端只能等到超时。
  • DNS 解析变慢:Windows 会把所有网卡上配置的 DNS 服务器纳入候选列表,如果排在前面的那台 DNS 不可达,每次解析都要等一轮超时,整机所有网络操作都跟着变慢。
  • 虚拟机和容器网络异常:Hyper-V、VMware 的虚拟交换机会绑定到具体物理网卡,如果绑错了那块,虚拟机的网络就跟着一起出问题。
  • 域环境登录失败:公司电脑如果连不上域控,登录会走缓存凭据,组策略、共享盘、打印机全部失效,但用户往往意识不到是网络配置引起的。

看到这里你应该能感觉到,双网卡不是一个"顺手配一下"的事,它牵动的是整机的网络行为。所以接下来这两节,我会把底层机制说清楚,理解了机制,配置就是顺水推舟的事。

2. 动手前必须搞懂的三个概念:接口、跃点数、路由表

Windows 的网络栈其实很直白:所有命令都要指定"对哪块网卡操作",而流量走向由路由表决定,路由表里谁排前面由跃点数决定。这三样东西串起来,就是双网卡配置的全部逻辑。

2.1 接口索引:所有命令的"身份证"

每块网卡在系统里都有一个接口索引(Interface Index),是个数字,比如 12、18、25。图形界面里看不到它,但命令行操作几乎都要用到它。因为网卡的名字是可改的("以太网 2"、"本地连接 3"),也可能包含中文和空格,用名字写脚本非常容易出错,用索引就稳得多。

查看方式有两种。命令提示符里执行route print,输出顶部的 "Interface List" 段落会把所有接口索引和对应的网卡名字列出来。PowerShell 里更方便:

Get-NetAdapter | Select-Object Name, InterfaceIndex, Status, LinkSpeed, MacAddress

注意一个很容易踩的坑:网卡禁用再启用、或者拔掉 USB 网卡重新插上,接口索引可能会变。所以如果你把索引写进了脚本,每次大变动之后要重新确认一遍。我在一个客户现场就遇到过,脚本跑得好好的,某天 USB 网卡换了个口,索引从 18 变成 22,脚本静默地给错误的接口加了路由,结果内网不通,查了半天。

2.2 跃点数:Windows 用什么决定走哪块网卡

**跃点数(Metric)**是一个优先级数值,越小越优先。当路由表里存在多条通往同一目标的路由时,Windows 选择跃点数最小的那条。这个概念本身很简单,麻烦在于它有两层:接口跃点数(Interface Metric)和路由跃点数(Route Metric)。

默认情况下,网卡的接口跃点数是"自动"的,Windows 按链路速度估算。官方的对应关系大致是这样:

链路速度自动跃点数
大于 200 Mbps5
20 Mbps ~ 200 Mbps10
4 Mbps ~ 20 Mbps20
200 Kbps ~ 4 Mbps30
小于 200 Kbps40

一条默认路由的最终跃点数 = 接口跃点数 + 网关跃点数。网关跃点数通常由 DHCP 下发,很多路由器会下发一个不小的值。这就解释了为什么有的环境里无线反而压过了有线——不是速度问题,是 DHCP 下发的网关跃点数在起作用。

提示:双网卡环境下,我强烈建议手动把接口跃点数写死,别用自动。自动值会随链路速度和 DHCP 下发内容变化,你今天测通了,明天换了个网络环境又不对了。

手动设置的方式在 PowerShell 里是一行:

Set-NetIPInterface -InterfaceIndex 12 -InterfaceMetric 10

数字填多少不重要,重要的是两个网卡之间的相对大小关系。我习惯外网设为 10、内网设为 20,差值拉开一些,避免某些情况下被系统重算覆盖。

2.3 路由表:直连路由、默认路由、静态路由

路由表是决定一切的地方。route print -4能看到完整的 IPv4 路由表,里面通常有三类条目,理解它们的分工,双网卡配置就没有神秘感了。

直连路由:网卡配了 IP 和掩码之后,系统自动生成。意思是"和我同网段的目标,直接从这块网卡发出去"。比如网卡配了 192.168.1.100/24,就会自动有一条 192.168.1.0/24 的直连路由。这类路由不需要你管,也不需要配网关。

默认路由:目标写 0.0.0.0/0,意思是"所有我匹配不上的目标,统统交给这个网关"。正常情况下每个系统只需要一条。双网卡环境的绝大多数故障,都源于出现了两条默认路由。

静态路由:手工添加的、指向特定网段的条目。这正是双网卡配置的核心手段——"去内网网段的包,从内网网卡出去,交给内网网关"。

用一个寄信的类比把这三者串起来:同一个小区里的邻居,你直接走过去把信给了(直连路由);隔壁城市的某个具体地址,你知道要交给管那片区域的快递点(静态路由);剩下所有不知道具体怎么走的信,一律送到小区门口的主邮局(默认路由)。现在问题来了——如果你告诉系统"有两个主邮局,门口的邮局和城东的邮局都是主邮局",它就会犯迷糊。这就是双默认网关问题的本质。

理解了这一层,配置思路就非常清晰了:只保留一条默认路由,其余目标网段全部用静态路由精确指向。接下来就是具体操作。

3. 标准配置流程:一块网卡上网,一块网卡走内网

这一节给一套可直接照做的配置。我用的示例拓扑在全文中保持一致,方便你对照:外网是 192.168.1.0/24,网关 192.168.1.1;内网是 10.20.0.0/16,网关 10.20.0.1,内网有一台数据库服务器 10.20.8.5 和一台文件服务器 10.20.8.10。

3.1 地址规划与参数表

动手之前先把参数列成表,这一步花两分钟,能省后面半小时。对照自己的环境填一遍:

项目外网网卡内网网卡
物理接口板载千兆PCIe 千兆
接口索引1218
IP 地址192.168.1.10010.20.0.100
子网掩码255.255.255.0255.255.0.0
默认网关192.168.1.1留空
DNS223.5.5.5、114.114.114.114留空(或内网 DNS)
接口跃点数1020

这张表里最关键的一格是内网网卡的默认网关留空。很多人栽在这里:习惯性地把网关填满,结果机器上出现两条默认路由,外网时通时断。原因在 2.3 节讲过,内网网段靠直连路由和静态路由就够了,根本不需要默认网关。

关于内网 DNS 要不要填,分情况。如果内网有自己的一套域名(比如git.corp.local),那内网 DNS 必须填,否则解析不了。但要注意,内网 DNS 一般只解析内网域名,公网域名它不认,所以外网 DNS 也要保留,形成"内网 DNS + 公网 DNS"的组合。如果内网全靠 IP 访问,那内网 DNS 就留空,避免解析走弯路。

如果你的内网网卡是 DHCP 获取地址的,需要特别注意:DHCP 服务器默认会下发网关(Option 3)。如果内网 DHCP 不能改,那就只能在客户端手动覆盖——把网卡改成静态地址,或者用后面提到的Set-NetRoute手动删掉多余的那条默认路由。

3.2 图形界面怎么点(含高级里的默认跃点选项)

图形界面适合一次性配置,流程是这样:

  1. Win + R输入ncpa.cpl回车,打开"网络连接"面板。
  2. 右键外网网卡 → 属性 → 双击"Internet 协议版本 4 (TCP/IPv4)"。
  3. 选择"使用下面的 IP 地址",按 3.1 的表填入 IP、掩码、网关;DNS 部分选择"使用下面的 DNS 服务器地址"填入。
  4. 点击右下角"高级",在弹出的窗口里取消勾选"自动跃点",在"接口跃点数"里填入 10,确定。
  5. 对内网网卡重复第 2、3 步,但网关留空;在"高级"里把接口跃点数填成 20。

这里有个细节值得说一下:第 4 步那个"自动跃点"复选框,很多人从来没注意过。它就在 IP 设置的高级对话框里,取消勾选之后才能手动指定。如果不取消,你填的数值不生效,系统还是按链路速度自动算。这个坑我见过太多次了,配置完发现优先级不对,回头查半天,最后发现是这个勾没去掉。

另外提醒一句:不要在两块网卡上配同一个网段的 IP(比如一块 192.168.1.100、另一块 192.168.1.101)。同一个网段绑两块网卡,Windows 会只认其中一块来发流量,入站流量的返回路径还可能从另一块出去,形成不对称路径,表现为"能 ping 通但 TCP 连接建不起来"。这个情况 4.1 节会专门讲。

3.3 PowerShell / netsh 命令行版本

图形界面点一遍没问题,但如果你要给几十台机器配,或者想留个可复现的记录,命令行版本更靠谱。先确认接口索引:

Get-NetAdapter | Select-Object Name, InterfaceIndex, Status

然后设置外网网卡(假设索引 12):

# 清掉可能存在的旧地址,避免 "对象已存在" 报错 Remove-NetIPAddress -InterfaceIndex 12 -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue # 配置 IP、掩码、网关 New-NetIPAddress -InterfaceIndex 12 -IPAddress 192.168.1.100 -PrefixLength 24 -DefaultGateway 192.168.1.1 # 配置 DNS Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 223.5.5.5,114.114.114.114 # 固定接口跃点数 Set-NetIPInterface -InterfaceIndex 12 -InterfaceMetric 10

内网网卡(假设索引 18),注意New-NetIPAddress这里不带-DefaultGateway

Remove-NetIPAddress -InterfaceIndex 18 -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue New-NetIPAddress -InterfaceIndex 18 -IPAddress 10.20.0.100 -PrefixLength 16 Set-NetIPInterface -InterfaceIndex 18 -InterfaceMetric 20

如果你更习惯传统的 netsh,等效写法是这样:

netsh interface ipv4 set address name="以太网 2" static 10.20.0.100 255.255.0.0 netsh interface ipv4 set interface "以太网 2" metric=20

注意 netsh 的set address命令不写网关就是不带网关,写法上比 PowerShell 更容易"一不小心漏掉"或者"一不小心带上",改完记得用route print确认一遍。

3.4 加静态路由:把内网网段指过去

到这一步,两块网卡的地址都配好了,外网能上,同网段的内网设备也能访问。但如果内网服务器在别的网段(比如 10.20.8.5 在 10.20.8.0/24),而不在网卡所在的 10.20.0.0/16 里,那就需要静态路由。这里我把整个 10.20.0.0/16 都指过去,一条搞定:

PowerShell 写法:

New-NetRoute -DestinationPrefix "10.20.0.0/16" -InterfaceIndex 18 -NextHop 10.20.0.1 -PolicyStore PersistentStore -RouteMetric 1

route命令写法:

route -p add 10.20.0.0 mask 255.255.0.0 10.20.0.1 metric 1 if 18

三个参数的含义需要解释清楚,不然改起来容易出错:

  • -NextHop 10.20.0.1是下一跳地址,也就是内网网关。这个地址必须和网卡自身在同一个网段内,否则路由不生效。
  • -InterfaceIndex 18指定从哪块网卡发出去。虽然下一跳地址已经隐含了网卡信息,但显式指定更保险,尤其是在两条链路都能到达同一网关的时候。
  • -PolicyStore PersistentStore(或route -p)表示持久化。不加这个参数,路由只存在于内存里,重启之后消失。这是新手最常踩的坑之一:当场测试全通,重启之后内网全断。

关于-RouteMetric 1:这个值只要小于默认路由的跃点数就行,填 1 是最省事的做法,保证内网流量不会被默认路由截胡。

如果内网有多个网段,并且它们都在 10.x 的范围内,可以合并成一条 10.0.0.0/8 的汇总路由。但这么做有风险——如果以后有某块网卡也用了 10 开头的地址(比如某些物联网设备默认用 10.0.0.x),就会被这条路由劫持。所以我更倾向于按实际网段精确添加,需要几条加几条。

3.5 验证:三条命令确认走对了

配完不验证就上生产,是很危险的习惯。我一般用这三步:

route print -4

看两件事:一是 0.0.0.0 的默认路由是不是只有一条,且指向外网网关;二是 10.20.0.0/16 的条目是否存在,且网关和接口都对。如果发现两条默认路由,说明内网网卡上的网关没删干净。

Find-NetRoute -RemoteIPAddress 10.20.8.5 | Select-Object -First 2

这条命令会告诉你"要去 10.20.8.5,系统选了哪条路由、用哪个源地址"。-First 2是因为它通常返回两个对象,一个是路由信息,一个是接口信息。这是我最喜欢的一条排查命令,比route print更直接。

Test-NetConnection -ComputerName 10.20.8.5 -Port 1433 -InformationLevel Detailed

Test-NetConnection测具体端口,比单纯 ping 可靠得多。ping 通不代表 TCP 能连上,端口级别的验证才算数。外网方向同理,测一个外网地址的 443 端口即可。

4. 几种变体场景的处理方式

标准流程覆盖了大部分情况,但现实里总会遇到不那么规整的环境。下面这几种场景,配置思路和标准流程有实质区别,需要单独说。

4.1 两块网卡在同一个网段(最容易翻车的组合)

有人会问:两块网卡都接在同一个交换机的同一个网段,能不能做负载均衡或者备份?技术上能启,但Windows 下不推荐这么玩

原因是 Windows 的 TCP/IP 栈对多网卡同网段的处理比较粗暴:当两块网卡都在 192.168.1.x 网段时,系统可能只选其中一块作为出站接口,而另一块收到的 ARP 请求也会被响应,导致同一 IP 出现两个 MAC 地址的应答。结果就是网关的 ARP 表频繁刷新,部分连接随机失败——现象是"网络时通时断,但 ping 大部分时候是通的",特别折磨人。

如果确实需要这个场景,正规做法是用网卡厂商的**组合(Teaming)**功能,比如 Intel 的 ANS(Advanced Network Services)或者主板厂商提供的工具(部分 Realtek 驱动也带)。它会把两块物理网卡虚拟成一块逻辑网卡,对外只有一个 MAC,这才是正确的做法。

实在没有 Teaming 支持,退一步的方案是:停用其中一块网卡的 IP 层,只让它物理连接,或者干脆接受"一主一备"的静态配置,不做自动切换。

注意:家用和办公环境如果只是想"多插一根网线以防万一",更省事的做法是把备用网卡配成不同网段的地址,需要时再手工切换,别指望系统自动帮你选。

4.2 双外网出口做备份

两条宽带或者宽带加专线的场景,目标通常是"主线路挂了自动切到备线"。Windows 本身有一套**死网关检测(Dead Gateway Detection)**机制,当默认网关连续无响应时会尝试切换到次优先的默认网关。

要利用这个机制,配置方式反而和标准流程相反——你需要保留两条默认路由,用跃点数拉开优先级:

# 主线路,跃点数小 Set-NetIPInterface -InterfaceIndex 12 -InterfaceMetric 10 # 备线路,跃点数大 Set-NetIPInterface -InterfaceIndex 20 -InterfaceMetric 50

但我必须说实话:Windows 的死网关检测切换不够灵敏也不够可靠。它的判定基于 TCP 重传失败次数,实际体验上切换可能延迟几十秒,而且切回来之后经常不会自动切回主线路。对可用性要求高的场景,我的建议是:

  • 用硬件路由器做双 WAN 负载均衡,Windows 只连一条线,让专业设备干专业的事;
  • 或者在 Windows 上写个定时脚本,主动探测主线路健康状态,异常时用Set-NetIPInterface动态调整跃点数。这个方案我看过几个现场在用,虽然土,但可控。

死网关检测本身可以通过注册表项EnableDeadGWDetect关闭(位置在HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,值为 0 表示禁用)。在只保留一条默认路由的标准场景里,关掉它反而能避免一些意外切换,我自己在内网办公机上就是这么设的。

4.3 多内网网段与 /16、/8 汇总路由的取舍

前面提到过汇总路由的问题,这里展开说。假设内网有三个网段:10.20.0.0/16、10.21.0.0/16、172.16.5.0/24。有三种加路由的方式:

方案写法优点风险
逐条精确三条路由分别写精确可控,不会误伤网段多了要维护一堆
/8 汇总10.0.0.0/8 一条一条搞定所有 10 开头会劫持所有 10.x 地址
折中汇总10.20.0.0/15 两条兼顾简洁和边界需要规划好地址空间

我踩过的具体坑:某次把内网统一写成了 10.0.0.0/8,结果客户新接了一台 IP 是 10.0.0.8 的网络摄像头(在另一块网卡所在的网段),从此这台摄像头再也访问不到,因为所有 10 开头的流量都被丢到内网网关了。找了两天才定位到。所以汇总路由的边界一定要比实际使用的网段宽,但不能宽到覆盖其他链路

判断方法很简单:把两个网卡所在的网段、以及所有需要访问的目标网段列出来,找它们的共同前缀。如果共同前缀只有 8 位,那说明网段太分散,老老实实逐条写。

4.4 虚拟机和 USB 网卡的特殊处理

虚拟机部分。Hyper-V 的"虚拟交换机管理器"里创建外部交换机时,会要求绑定一块物理网卡。绑定的那块网卡,其网络行为会发生变化——比如绑定后宿主机上的这块网卡会进入一种特殊的桥接状态,某些驱动版本下会影响宿主机的网络性能或导致网卡属性面板出现异常。如果你在宿主机上配了双网卡又跑 Hyper-V,建议只把外网网卡绑给虚拟交换机,内网网卡保持独立,避免虚拟交换机的流量干扰内网路由。

VMware Workstation 的桥接模式同理,它默认会自动选择一块物理网卡做桥接。多网卡环境下它的自动选择经常选错,导致虚拟机拿不到预期的地址。手动在"虚拟网络编辑器"里指定桥接到哪块网卡,能省掉很多困惑。

USB 网卡部分。前面提过供电和发热问题,配置层面还有两个点:

第一,Windows 默认可能会关闭 USB 网卡以省电。在设备管理器里找到这块网卡 → 属性 → 电源管理 → 取消"允许计算机关闭此设备以节约电源"。这个设置解决过我遇到的一类"每隔十几分钟断一次网"的玄学问题。

第二,USB 网卡重新插拔后接口索引会变。如果静态路由里写死了接口索引,重新插拔之后路由就指错了。稳妥做法是把 USB 网卡接在一个固定的口上,并且在每次插拔后执行一遍验证命令,确认路由还指向正确的接口。

5. 常见故障与排查实录

配置这东西,讲完正确的做法只是上半场,下半场是出了问题怎么找。我把这几年积累的排查经验整理成一张表和几个具体案例,遇到问题时可以直接对照。

5.1 故障速查表

现象最可能的原因排查动作处理方式
内网服务全部超时缺少内网网段的静态路由Find-NetRoute -RemoteIPAddress 内网IP补加静态路由并持久化
外网时通时断存在两条默认路由route print -4看 0.0.0.0 条目数删掉内网网卡的网关
重启后内网不通静态路由未持久化route print比对重启前后-pPersistentStore
所有网站都打不开但能 ping 通 IPDNS 解析失败Resolve-DnsName 域名检查 DNS 配置和接口顺序
网页打开明显变慢DNS 服务器不可达导致超时Get-DnsClientServerAddress清理无效 DNS 条目
能 ping 通但 TCP 连不上双网卡同网段,返回路径不对称检查两块网卡的网段拆分成不同网段或启用 Teaming
网络每隔一段时间断一下USB 网卡省电或供电不足设备管理器电源管理设置关闭省电,换后置 USB 口
配置后整个网络都卡网卡驱动问题或交换机环路查看交换机指示灯、驱动版本更新驱动,检查物理接线

这张表我建议存下来,遇到问题时先按现象定位到原因,比盲目试错快得多。

5.2 几个我亲身踩过的坑

坑一:DHCP 悄悄下发了网关。内网网卡改成静态 IP 之后,我以为万事大吉,结果重启后外网又断断续续。查route print发现内网网卡上还是冒出了一条默认路由。原因是那台机器上有个域策略会重设网卡配置,把网关又填回去了。解决办法是在网卡属性的高级设置里,把"默认网关"那一栏的地址删干净之后,再用Set-NetRoute确认一遍,并在策略层面排除这台机器。这件事的教训是:配完之后一定要重启一次再验证,热配置状态下的表现和重启后可能不一样。

坑二:DNS 顺序导致解析慢。有段时间我访问任何网站都要等两三秒才出页面,ping 是通的,nslookup手动指定公共 DNS 也很快。最后发现问题在于接口跃点数是自动的,Windows 把内网 DNS(那台服务器当时正在维护)排在了前面,每次解析都要先等它超时。把外网网卡的跃点数手动设为 10、内网设为 20 之后,问题消失。这类问题的隐蔽性在于"它能用,只是慢",很多人会一直忍着。

坑三:route add 的 if 参数用错。早年我给一台机器加路由,route -p add 10.20.0.0 mask 255.255.0.0 10.20.0.1后面忘了写if,结果系统自动选了外网网卡作为出口。因为下一跳 10.20.0.1 和外网网卡不在同一网段,这条路由实际是失效的,但route print里看着像是加上了。从那之后,我加路由必带if参数,加完必带Find-NetRoute验证一遍。

坑四:USB 网卡拔插后索引变化。这个前面提过,补充一个排查技巧:写脚本时不要硬编码接口索引,用名字去查。比如:

$lanIf = (Get-NetAdapter -Name "以太网 2").InterfaceIndex

这样即使索引变了,脚本依然正确。代价是名字被改了脚本也会失效,所以建议把网卡重命名成固定且有意义的名字(比如"内网-LAN"、"外网-WAN"),比默认的"以太网 2"好认得多。

5.3 一键配置脚本与路由备份回滚

把前面所有内容串起来,我给一份可以直接改参数使用的脚本。它做的四件事是:清旧配置、配地址、固定跃点数、加持久路由。

# 需以管理员身份运行 PowerShell # 参数按自己环境修改 $WanIf = 12 # 外网网卡接口索引 $LanIf = 18 # 内网网卡接口索引 $WanIP = "192.168.1.100" $WanGw = "192.168.1.1" $WanDns = @("223.5.5.5","114.114.114.114") $LanIP = "10.20.0.100" $LanGw = "10.20.0.1" $LanNet = "10.20.0.0/16" # 1. 清理旧地址和旧路由 Remove-NetIPAddress -InterfaceIndex $WanIf -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue Remove-NetIPAddress -InterfaceIndex $LanIf -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue # 2. 外网网卡:地址 + 网关 + DNS New-NetIPAddress -InterfaceIndex $WanIf -IPAddress $WanIP -PrefixLength 24 -DefaultGateway $WanGw Set-DnsClientServerAddress -InterfaceIndex $WanIf -ServerAddresses $WanDns # 3. 内网网卡:只给地址,不给网关 New-NetIPAddress -InterfaceIndex $LanIf -IPAddress $LanIP -PrefixLength 16 # 4. 固定接口跃点数,外网优先 Set-NetIPInterface -InterfaceIndex $WanIf -InterfaceMetric 10 Set-NetIPInterface -InterfaceIndex $LanIf -InterfaceMetric 20 # 5. 内网网段走内网网关,持久化 New-NetRoute -DestinationPrefix $LanNet -InterfaceIndex $LanIf -NextHop $LanGw -PolicyStore PersistentStore -RouteMetric 1 # 6. 输出验证结果 Write-Host "默认路由条目:" -ForegroundColor Cyan Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Select-Object ifIndex, NextHop, RouteMetric Write-Host "内网路由条目:" -ForegroundColor Cyan Get-NetRoute -DestinationPrefix $LanNet | Select-Object ifIndex, NextHop, RouteMetric

回滚方案必须提前准备。配置之前,先把当前状态存下来:

route print -4 > %USERPROFILE%\routes-before.txt ipconfig /all > %USERPROFILE%\ipconfig-before.txt

出问题的时候,对照这两份记录手工恢复即可。如果改动比较大,用 PowerShell 清掉所有手工配置再恢复 DHCP 也很简单:

# 让两块网卡回到自动获取 Remove-NetIPAddress -InterfaceIndex 12 -AddressFamily IPv4 -Confirm:$false Remove-NetIPAddress -InterfaceIndex 18 -AddressFamily IPv4 -Confirm:$false Set-NetIPInterface -InterfaceIndex 12 -Dhcp Enabled Set-NetIPInterface -InterfaceIndex 18 -Dhcp Enabled ipconfig /renew

最后再说一个容易被忽略的收尾动作:把配置结果记录成文档。接口索引、IP、网关、加了哪几条路由、脚本放在哪个目录、回滚文件在哪,这五样写在一张纸上贴到机箱侧面或者存进运维知识库。半年之后你或者你的同事再来看这台机器,能省下大量重新摸索的时间。我自己维护过的机器里,凡是没留记录的,再动的时候基本都要从头查一遍,这个成本高得离谱。

我个人在实际操作中的体会是,双网卡配置真正难的不是敲命令,而是先画清楚那张流量走向图:哪块网卡负责什么、目标网段怎么走、出问题从哪一层开始查。图想明白了,配置就是几行命令的事;图没想明白,改十遍也是碰运气。还有一个小技巧分享给你——先把外网配好并确认能上网,再动内网,每次只改一个变量并立刻验证,这样一旦出问题,你马上就知道是哪一步引起的。我见过太多人一口气把所有配置改完,最后不通了,连从哪儿查都不知道。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询