如果你在工位上同时插着网线、又连着WiFi,十有八九遇到过一个非常诡异的场景:有线网口能访问公司内网系统,但网页就是打不开;拔掉网线只连WiFi,外网秒开,可内网那台服务器又怎么都ping不通。很多人第一反应是网卡坏了、网线坏了,或者是公司网络限制,折腾半天才发现问题出在Windows的路由表上。
这个问题的本质,是电脑同时拥有两条“默认出口”,但系统只会挑一条来用。你想要的其实是“内网流量走有线、外网流量走WiFi”,也就是把内网和外网按需求分流。这篇文章就专门讲这件事,把原理、命令、常见坑一次说清楚,适合企业办公、开发调试、运维排障,以及学校宿舍里既要访问校园内网资源、又要正常上公网的同学。
1. 插着网线就断外网?问题出在默认路由
1.1 一条默认路由是怎么“抢走”所有流量的
电脑发任何一个网络请求,靠的是路由表。路由表就像一个路牌:目标IP是某个具体网段,就往对应方向走;目标IP没匹配到任何具体条目,就往“默认路由”走。
当电脑只有WiFi时,路由表很干净,一条默认路由指向WiFi网关,所有流量全部走无线。一旦你插上网线,有线网卡通常会拿到自己的IP和网关,Windows会自动给有线网卡也生成一条默认路由。这时候路由表里出现了两条“默认路由”,电脑必须选一条作为默认出口。
Win10、Win11选哪一条,不是看心情,而是看接口的“跃点数”(Metric)。跃点数越小优先级越高,而Windows默认情况下更偏爱有线连接,所以插上网线后,默认流量基本都被拉到了有线网卡。如果你的内网网关是隔离的、出不了公网,那结果就是:内网能访问,外网全断。
反过来,如果你把WiFi设为默认出口,内网那条路由又没了,因为有线网卡的默认路由被系统压住,流量都往WiFi网关走,而WiFi网关又到不了内网网段,于是内网又打不开了。
1.2 跃点数:Windows无声的“裁判”
我刚接触这个问题时,想的是“手动改跃点数”。在网卡的高级TCP/IP设置里,取消“自动跃点”,填一个固定值,你就可以干预系统选择默认路由的方向。
简单说,跃点数越小越优先。如果你希望默认流量走WiFi,就把WiFi网卡的跃点数设小一点,比如10;把有线网卡的跃点数设大一点,比如20。这样,系统会优先把默认路由挂在WiFi上,有线网卡就算插着也不会抢默认出口。
但只改跃点数还不够,还需要让“去往某个内网网段”的流量明确走有线网卡。否则默认流量走WiFi没问题,可内网流量也会因为匹配不到精确路由、被扔给WiFi网关,还是到不了内网。
1.3 哪些场景最需要内外网同时在线
先对号入座一下,再往下操作。最典型的三类场景:
- 企业办公网:工位网口接的是公司内网,只能访问OA、代码仓库、内部数据库;日常查资料、看文档需要走WiFi外网。
- 研发和运维:开发环境在内网,npm、pip、GitHub、搜索引擎都在外网,频繁来回切网络非常影响效率。
- 校园网络:宿舍有线口登录校园网后,访问知网、校内BBS、实验平台;WiFi用于日常上网,两个网都不想断。
这类需求有个通用解法:给“需要走内网”的网段添加静态路由,让精确网段优先匹配,同时把默认路由留给外网网卡。后面所有步骤都围绕这个核心思路展开。
2. 动手之前,先把网络信息盘清楚
2.1 记录内网IP、掩码和网关
在改配置之前,先按几下键盘记录网络信息,这步千万别跳。用Win+R打开运行窗口,输入cmd,然后执行:
ipconfig /all重点看有线网卡(以太网)这一段,记录四样东西:IPv4地址、子网掩码、默认网关、DNS服务器。
举个例子,有线网卡拿到的是192.168.10.50,掩码255.255.255.0,网关192.168.10.1,说明你所在的内网网段大概率就是192.168.10.0/24。只要访问目标在这个网段内,就应该走有线。
这里容易犯一个错误:默认网关的来源。如果内网是DHCP自动分配的,网卡上一般会自动填好网关,这条网关会生成一条默认路由,和WiFi产生冲突。所以我后面建议手动把有线网卡的“默认网关”留空,只填IP和掩码。
2.2 记录外网网关和DNS
同样用ipconfig /all看无线网卡(WLAN)这一段。通常WiFi是自动获取IP,IPv4地址可能是192.168.50.100,默认网关192.168.50.1。
DNS建议也记下来,因为某些内网环境下,系统自动分配的DNS可能指向内网DNS服务器,解析公网域名反而很慢或失败。如果发现外网能通但域名打不开,可以把DNS改成公共DNS,或者在内网网卡和外网网卡上分别设置对应环境的DNS。
2.3 判断你该按网段分流还是按IP分流
这是很多教程没有讲清楚的分叉点。静态路由不是只能加一条,你可以根据内网规模选择:
- 内网是一整个网段,比如192.168.10.0/24、10.0.0.0/8,那就加“网段路由”,一条能覆盖一片。
- 内网只有一两个固定IP,比如10.0.3.5是服务器、10.0.3.6是打印机,那就加“单机路由”,掩码用255.255.255.255,精确到单个IP。
- 内网跨多个网段,那就一条一条加,但要注意别把内网的默认路由加得太大,比如直接加一条0.0.0.0/0,那就等于把默认出口又抢回有线网卡了,前功尽弃。
判断技巧其实很简单:先ping一下目标内网地址,再看它属于哪个网段,或者直接问内网管理员要网段表。最怕的就是想当然,把内网范围写太大,结果所有流量都跑去内网网关,外网又断了。
3. Windows内外网双网并用实操步骤
3.1 网卡设置:固定IP、网关留空
先操作有线网卡,让它只负责内网通信,不掺和默认路由。
打开“控制面板 -> 网络和共享中心 -> 更改适配器设置”,找到“以太网”,右键属性,双击“Internet协议版本4(TCP/IPv4)”。
这里有两种情况。如果内网要求静态IP,那就手动填IP、子网掩码,默认网关留空,DNS按需填。如果内网是DHCP,可以先让网卡自动获取,确认能正常访问内网后,再把这几个值手动填进去,同样网关留空。
重点说一句:默认网关留空,是为了不在路由表里生成第二条0.0.0.0/0默认路由。静态路由的下一跳网关和网卡上是否填写默认网关没有必然关系,后面用route add命令时,只要内网网卡能和网关通信即可。
对于WiFi网卡,不用做太多改动,保持自动获取IP和网关,让它作为默认流量的出口。
3.2 管理员命令添加静态路由
找到“命令提示符”,右键选择“以管理员身份运行”。不管理员运行会提示“请求的操作需要提升”,命令不会生效。
先查看当前路由表,确认一下两条默认路由和网卡接口编号:
route print -4输出里你会看到Interace List,记下有线网卡对应的接口编号,比如18。然后在路由表部分,注意有没有两条0.0.0.0 mask 0.0.0.0开头的路由。如果只有一条,说明有线网卡没有生成默认路由,这是最理想状态。
接着添加静态路由,让内网网段走有线网关。例如内网网段是192.168.10.0/24,有线网关是192.168.10.1:
route add 192.168.10.0 mask 255.255.255.0 192.168.10.1 -p参数含义:192.168.10.0是目标网段,mask后面是该网段的子网掩码,192.168.10.1是下一跳网关,-p表示持久化保存,重启不会丢。
如果内网有多个网段,比如还有10.0.0.0/8,那就继续加:
route add 10.0.0.0 mask 255.0.0.0 192.168.10.1 -p这里网关通常指向同一个有线网关,如果你的内网跨了VLAN,可能需要让网关变成对应网段的三层接口地址,这个找内网管理员确认即可。
3.3 验证和设置开机持久化
添加完成后,先验证路由是否生效:
route print -4找到Network Destination为192.168.10.0的那条,确认Gateway是192.168.10.1,Metri的值会显示一个数字,因为是用-p添加的持久路由,它也能正常显示。
然后直接ping内网地址和外网地址:
ping 192.168.10.50 ping baidu.com两条都通,说明静态路由和默认路由各司其职,内外网同时在线已经搞定了。
如果外网ping不通,先看看是不是默认路由跑到了有线网卡上,用route print -4确认。如果确实有线网卡的默认路由还在,用下面的命令删掉它,但要把“接口编号”换成有线网卡实际的编号:
route delete 0.0.0.0 mask 0.0.0.0 if 18这个命令会把有线网卡上那条默认路由删掉,之后再ping外网通常就恢复了。
3.4 内网只有一两个IP时的精简写法
有些场景内网没有大网段,只有几台固定IP设备,比如NAS、打印机、测试服务器。这时候加整段路由反而会有风险,可用单机路由精确指定。
假设内网服务器IP是10.0.3.5,网关是10.0.3.1:
route add 10.0.3.5 mask 255.255.255.255 10.0.3.1 -p再看内网打印机是10.0.3.6,继续加一条:
route add 10.0.3.6 mask 255.255.255.255 10.0.3.1 -p这种写法的好处是,除了这两个目标IP,其他流量一律走外网WiFi,完全不影响日常上网。缺点是如果你要频繁新增设备,需要不停维护路由条目,所以还是建议优先按网段规划。
4. Linux与银河麒麟双网卡分流
4.1 临时生效的ip route命令
如果你使用的是Ubuntu、Deepin、银河麒麟这类Linux系统,思路完全一样,但命令换成了ip route。
先用命令查看当前路由:
ip route你会看到default via后面跟着一个网关,可能是有线网卡,也可能是无线网卡。添加静态路由的写法:
sudo ip route add 192.168.10.0/24 via 192.168.10.1 dev eth0其中eth0是有线网卡的接口名,根据你的机器可能是eno1、ens33等,用ip link查看确认。如果内网是单机IP:
sudo ip route add 10.0.3.5/32 via 10.0.3.1 dev eth0这类命令重启后会丢,只是临时生效。建议在调试阶段先用这种方式试,确认可行再写持久化配置。
4.2 用netplan做持久化配置
Ubuntu 22.04、24.04等新版本默认用netplan,配置文件在/etc/netplan/下面,通常是01-network-manager-all.yaml或类似名字。编辑时要用sudo权限。
一个典型的双网卡配置可以这样写:
network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: false addresses: - 192.168.10.50/24 routes: - to: 192.168.10.0/24 via: 192.168.10.1 wifis: wlan0: dhcp4: true注意这里eth0没有设置gateway4,因为不希望对整个系统生成默认路由,只通过routes字段精确指定内网段。保存后执行:
sudo netplan apply再用ip route查看,确认默认路由在wlan0上,内网路由在eth0上,然后ping验证。
4.3 双网关带来的坑
Linux系统里有一个比Windows更容易踩的坑:如果你在图形界面里给有线网卡也填了网关,NetworkManager会自动生成default路由。两个默认网关同时存在,系统按metric选择一个,但经常不是你想要的那个。
我实际排障时见过一种情况:系统route表里有两个default,一个metric 100走有线,一个metric 600走无线,看起来有线优先级更高,但内网网关根本出不了公网,于是外网全断。
处理办法有两个。一是直接删除有线网卡的默认路由:
sudo ip route del default via 192.168.10.1 dev eth0二是把默认路由的策略设清楚,在netplan的wlan0配置里显式加gateway4,并在eth0配置里只写静态路由不写gateway,最大程度避免系统自动生成两条默认路由。
如果遇到WiFi图标都找不到的情况,比如Ubuntu 22.04下无线网卡被识别为unclaimed,或者银河麒麟V10装不上AX211的WiFi驱动,那就先解决驱动问题再配置路由。驱动没起来,WiFi网卡都不存在,分流也就无从谈起。
5. 常见问题与排查技巧实录
5.1 加了静态路由内网还是不通
这种情况我踩过很多次,排查顺序很重要。
第一件事,ping网关,确认本机到内网网关是通的:
ping 192.168.10.1如果不通,说明有线网卡的IP、掩码或者网线物理链路有问题,静态路由写得再好也没用。
第二件事,确认路由的掩码没写错。比如内网实际是10.0.0.0/8,你却写成10.0.0.0/24,那么目标10.0.8.8就不会匹配到这条路由。
第三件事,确认内网设备开启了防火墙允许规则。很多内网服务器默认拒绝来自非内网网段的ping,这个和本机路由无关。
5.2 一插网线WiFi就被挤掉线
有同事问我,为什么插上网线后WiFi图标直接变成“已禁用”。这不一定是你路由配置的问题,更可能是Windows的网络管理机制认为有线连接更稳定,主动把无线网卡切掉了。
解决方法是到“设备管理器 -> 网络适配器 -> 无线网卡 -> 右键属性 -> 电源管理”,取消勾选“允许计算机关闭此设备以节约电源”。然后到“高级”选项卡,找到类似“Preferred Band”或“Concurrent Connection”的设置项,不同网卡命名不同,把“同时支持有线无线”的功能打开。
另外,某些电脑管家类软件也会自动禁用无线,需要到对应软件的网络优化设置里关掉。
5.3 浏览器访问内网IP被代理拦截
静态路由配置好了,命令行里ping内网正常,但浏览器输入内网地址还是打不开。这种情况十有八九是“系统代理”在捣乱。
打开“设置 -> 网络和Internet -> 代理”,如果“使用代理服务器”开着,把“请勿对以下列条目使用代理服务器”里的“例外”加上内网IP或网段,比如192.168.10.*,也可以把内网域名写进去。有些浏览器自带代理插件,也要在插件里设置绕过列表。
这个问题的表现很典型:curl在命令行能访问,浏览器不行,基本都是代理规则拦截,而不是路由问题。
5.4 重启后路由丢失
如果你用了-p参数添加静态路由,正常情况下重启不会丢。但如果用的是不带-p的route add命令,那只要重启或者网卡被重新插拔,新增路由就会消失。
排查时先确认一下:
route print -4看看那条内网路由还在不在。如果不在,说明之前添加时没加-p。重新添加一次并记住加-p即可。
如果加了-p仍然丢失,很可能是某安全软件或网络管理软件在启动时重置了路由表。解决办法是把添加路由的命令写成一个批处理脚本,放到开机启动目录里,或者通过任务计划程序设置开机执行。脚本很简单:
route add 192.168.10.0 mask 255.255.255.0 192.168.10.1 -p5.5 一键切换脚本,省下反复敲命令
实际办公中,你可能会在不同网络环境之间切换:今天在办公室要内外网分流,明天出差只需要WiFi,后天在客户现场又要另一套内网段。手动一条一条改路由太累,建议写一个切换脚本。
Windows下可以写一个批处理脚本,内容大致这样:
@echo off :: 删除旧的静态路由(按需改成你的网段) route delete 192.168.10.0 mask 255.255.255.0 192.168.10.1 :: 添加内网静态路由 route add 192.168.10.0 mask 255.255.255.0 192.168.10.1 -p :: 查看结果 route print -4 pause再用管理员身份运行,或者建一个快捷方式并勾选“以管理员身份运行”。以后只需要双击脚本,就完成一轮路由修正。
Linux下可以写一个shell脚本:
#!/bin/bash sudo ip route add 192.168.10.0/24 via 192.168.10.1 dev eth0 ip route我在实际项目里,还会把各个环境的网段表以注释形式写进脚本,防止换一台电脑就忘了当时怎么配的。比如:
:: 办公室内网: 192.168.10.0/24, 网关192.168.10.1 :: 客户内网: 10.12.0.0/16, 网关10.12.0.1几个月后回头看,脚本里这些注释能帮你省下大量回忆时间。
最后再分享一个小技巧:如果你要在内网服务器之间频繁复制文件,或者用RaiDrive这类工具挂载内网NAS,建议把它们都规划进同一段网段路由,不要用单个IP方式零散添加。网段口径一致,路由表才干净,后续问题也好排查。毕竟双网同时用的核心,从来不是一条命令,而是把网络规划想清楚。