ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows双网卡路由分流:接口索引、跃点数与静态路由实战

Windows双网卡路由分流:接口索引、跃点数与静态路由实战 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 Mbps520 Mbps ~ 200 Mbps104 Mbps ~ 20 Mbps20200 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 千兆接口索引1218IP 地址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 图形界面怎么点含高级里的默认跃点选项图形界面适合一次性配置流程是这样按Win R输入ncpa.cpl回车打开网络连接面板。右键外网网卡 → 属性 → 双击Internet 协议版本 4 (TCP/IPv4)。选择使用下面的 IP 地址按 3.1 的表填入 IP、掩码、网关DNS 部分选择使用下面的 DNS 服务器地址填入。点击右下角高级在弹出的窗口里取消勾选自动跃点在接口跃点数里填入 10确定。对内网网卡重复第 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这里不带-DefaultGatewayRemove-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 metric20注意 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 1route命令写法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 的 ANSAdvanced 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比对重启前后加-p或PersistentStore所有网站都打不开但能 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、网关、加了哪几条路由、脚本放在哪个目录、回滚文件在哪这五样写在一张纸上贴到机箱侧面或者存进运维知识库。半年之后你或者你的同事再来看这台机器能省下大量重新摸索的时间。我自己维护过的机器里凡是没留记录的再动的时候基本都要从头查一遍这个成本高得离谱。我个人在实际操作中的体会是双网卡配置真正难的不是敲命令而是先画清楚那张流量走向图哪块网卡负责什么、目标网段怎么走、出问题从哪一层开始查。图想明白了配置就是几行命令的事图没想明白改十遍也是碰运气。还有一个小技巧分享给你——先把外网配好并确认能上网再动内网每次只改一个变量并立刻验证这样一旦出问题你马上就知道是哪一步引起的。我见过太多人一口气把所有配置改完最后不通了连从哪儿查都不知道。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进