一篇讲清楚蘑菇视频:网络适配的“优先级规则”,搞懂就不乱了

很多人在笔记本插上网线后发现流量还走着 Wi‑Fi,或者连上 VPN 后某些流量还是走本地网络,常常搞不清楚哪里出了问题。网络适配器之间的“优先级规则”(通常表现为路由和接口的 metric/顺序/DNS 优先级)才是幕后主角。把这些概念弄明白,网络就不再“任性”——下面把关键概念、常见场景和实际操作都讲清楚,按平台给出可直接执行的办法。
一、先搞清楚:什么是“优先级规则”?
- 默认路由(default gateway):当目标地址不在本地子网内,系统会使用一条默认路由把流量发出去。如果有多条默认路由,系统按“优先级”选择。
- metric(或称路由/接口度量值):数值越小表示优先级越高。系统会选择 metric 值最低的路由/接口来发包。
- 绑定顺序 / 服务顺序(某些系统对 DNS/服务有额外优先级):比如 macOS 的“服务顺序”决定哪个接口优先用于 DNS 查询或拨号。
- DNS 顺序:有时多个接口或 VPN 提供不同的 DNS,解析顺序也会影响结果。 要点:低 metric 赢,明确设置比靠“自动”更可控。
二、常见场景与问题举例(对应解决思路)
- 场景:插网线后流量仍走 Wi‑Fi → 检查接口 metric,适当把以太网 metric 设为更低。
- 场景:连上公司 VPN,但部分流量不走 VPN → VPN 客户端可能没有修改默认路由或 metric;需调整 VPN 的路由策略或添加静态路由。
- 场景:多网络(有线、无线、手机热点)互相冲突 → 为不同连接设置明确 metric 或服务顺序;必要时创建持久路由。
- 场景:某个应用必须通过特定网卡 → 在 Windows 可用 ForceBindIP / 代理;在 Linux 可用 network namespaces;在 macOS 可用应用级代理 / SOCKS。
三、实操:按平台设置优先级(可复制执行) Windows
- 查看接口和 metric:
- PowerShell: Get-NetIPInterface
- 旧命令: route print
- 设置接口 metric(示例把以太网设为 10,Wi‑Fi 为 20):
- GUI:控制面板 → 网络和 Internet → 网络连接 → 右键适配器 → 属性 → IPv4 → 属性 → 高级 → 取消“自动度量”,手动填写“接口度量值”。
- PowerShell(管理员):
- Get-NetIPInterface 先确认 InterfaceIndex;
- Set-NetIPInterface -InterfaceIndex 4 -InterfaceMetric 10
- netsh(也可):
- netsh interface ipv4 set interface "Ethernet" metric=10
- 查看路由表与默认路由:
- route print 或 Get-NetRoute
macOS
- GUI(最直观):系统偏好设置 → 网络 → 左下齿轮(…)→ 设置服务顺序,拖动把优先用的接口放前面。
- 命令行:
- 查看服务顺序:networksetup -listnetworkserviceorder
- 设置服务顺序:networksetup -ordernetworkservices "Ethernet" "Wi-Fi" "Bluetooth PAN" (按需要列出顺序)
- 查看路由:netstat -rn 或 route get 8.8.8.8
Linux(以常见发行版为例)
- 临时查看/修改:
- 查看路由:ip route show
- 查看某目标走哪个接口:ip route get 8.8.8.8
- 临时添加默认路由并带 metric:sudo ip route add default via 192.168.1.1 dev eth0 metric 100
- NetworkManager(常见桌面管理器):
- 设置连接的 route metric:nmcli connection modify "Wired connection 1" ipv4.route-metric 100
- 重新激活连接:nmcli connection up "Wired connection 1"
- systemd-resolved / netplan / ifupdown 各有配置方式(可根据发行版把 metric 写进对应配置文件)
- 持久路由请在网络配置里写入,不要仅用临时 ip route add
四、DNS 优先级与解析问题
- 多个接口同时存在时,系统可能同时有多个 DNS 服务器条目,解析顺序影响域名解析结果。
- Windows:可在适配器 IPv4/IPv6 的高级设置中设置 DNS 服务器和顺序;也可以使用 netsh winsock reset 或 ipconfig /flushdns 排查。
- Linux(systemd-resolved):使用 resolvectl status 查看每个接口的 DNS。NetworkManager 可以设置 “ipv4.dns-priority” 或在连接中指定 DNS。
- macOS:服务顺序决定 DNS 查询先从哪个接口的 DNS 服务器开始。
五、验证与排错小技巧
- 确认哪个接口在发包:
- Windows: route print、Get-NetRoute、tracert 目标
- Linux: ip route get 目标、traceroute
- macOS: route get 目标、traceroute
- 测试 DNS:nslookup/ dig(指定服务器)看是否解析到想要的结果。
- VPN 问题:连上 VPN 后用 ipconfig /all(Windows)或 ip addr/route(Linux/macOS)确认默认路由是否被 VPN 覆盖;查看是否启用了“使用远程网关(use default gateway on remote network)”或类似选项。
- 若改了设置无效,重启网络服务或断开重连通常能清除旧路由缓存。
六、进阶技巧(按需使用)
- 持久化静态路由:Windows 可用 route add -p 或在路由表配置里加入持久条目;Linux 写入网络配置文件或使用 Netplan。
- 应用级路由:在 Windows 上使用 ForceBindIP 强制某应用绑定到指定网卡;在 Linux 上可以用 network namespaces 或 ip rule + ip route 配合策略路由实现按进程/用户分流。
- Docker/虚拟化:容器或虚拟机通常有独立网络命名空间,注意它们的默认路由和主机的路由不会自动一致。
- IPv6:同样有 metric 概念,别忘了同时检查 IPv6 的路由优先级。
七、快速检查清单(按此排查常见“乱”)
- 确认当前有哪些接口:查看接口列表和状态。
- 查看默认路由和各路由的 metric。
- 把你希望优先的接口 metric 设为更小的数值(例如:以太网 10、Wi‑Fi 20,VPN 5)。
- 检查 DNS 顺序和解析是否符合预期。
- 若需按应用分流,考虑应用级工具或使用网络命名空间/代理。
- 测试并重启网络服务/断开重连,确保配置生效。
结语 网络适配器的“优先级规则”看起来有点抽象,但核心只有两点:默认路由和 metric(数值越小优先),再加上 DNS 顺序和平台各自的服务顺序。把这些概念弄清楚并按需调整设置,绝大多数“连上网但不走期望网络”的问题都能迎刃而解。按你用的平台选对应的方法改一遍,遇到具体情形可以把相关命令输出贴过来,我再帮你看哪儿出问题。