Untitled
title: 网络路由实战:当内网 OA 机接上 WiFi 之后
tags:
- Linux
- 网络
- 路由
- NetworkManager
categories: [Systems, Linux]
series: [Linux]
abbrlink: linux-multi-nic-route
date: 2026-10-12
一台办公电脑原本通过有线网卡访问内网 OA 系统。为了临时查阅外部资料,接入 WiFi 后,电脑同时拥有了两条网络连接:有线网卡连接办公内网,无线网卡连接外部网络。
网络连接看起来正常,但接下来可能出现一些不符合直觉的现象:OA 页面无法打开,外部网站仍然可以访问;断开 WiFi 后 OA 恢复正常;重新连接 WiFi 后,问题再次出现。
这类现象不一定是 OA 服务异常,也不一定是 DNS 配置错误。一个值得优先检查的方向是:当 Linux 主机同时连接多个网络时,内核究竟根据什么决定一个数据包从哪个网卡发出?
理解这个问题,需要区分三个层次:路由表决定数据包可以走哪条路径,路由规则决定查询哪些路由表,网络管理工具则负责把配置写入系统并在连接变化时重新应用。
本文所有 IP 地址均取自 RFC 5737(
192.0.2.0/24、198.51.100.0/24、203.0.113.0/24)与 RFC 1918 保留的示例网段,不对应任何真实网络。
一、接入 WiFi 改变了主机的网络路径
先假设办公电脑有以下网络配置:
| 网络接口 | 地址 | 用途 |
|---|---|---|
enp3s0 |
192.0.2.15/24 |
连接办公内网 |
wlp2s0 |
203.0.113.25/24 |
连接 WiFi |
办公内网的 OA 服务器地址为 192.0.2.80,WiFi 路由器的地址为 203.0.113.1。
有线连接建立后,系统通常会获得一条指向办公网的直连路由。如果有线网络还提供了默认网关,系统也可能获得一条默认路由。接入 WiFi 后,无线连接可能再增加一条直连路由和一条默认路由。
问题由此产生:系统同时存在多条路由时,并不会简单地按照网卡连接顺序选择出口。它需要依据目标地址、路由前缀、路由优先级以及可能存在的策略规则完成路径选择。
这张拓扑图只描述网络连接关系。真正决定一个数据包从哪个接口离开的,是 Linux 内核执行的路由查询结果,而不是图中的连线,也不是应用程序认为自己连接了哪张网卡。
二、Linux 如何选择路由
1. 路由表描述目标网络的可达路径
可以先查看当前系统的 IPv4 路由表:
1 | ip -4 route show |
在上述办公网络中,可能看到类似这样的结果:
1 | default via 203.0.113.1 dev wlp2s0 metric 600 |
注意:这是一份用于解释路由选择的示例路由表,并非某台办公电脑的实测输出。实际路由取决于网络配置、DHCP 下发信息、NetworkManager 设置以及其他网络管理服务。
每一条路由都描述了一个目标前缀,以及到达该前缀时可以使用的路径。
default表示默认路由,即没有匹配到更具体路由时可考虑的路径。via指定下一跳网关。dev指定出接口。metric表示路由度量值。在其他选择条件相同、路由可比较的情况下,较低的 metric 通常具有更高优先级。src出现在直连路由中时,表示内核可为相关流量选择的首选源地址。
路由表不是"当前正在使用的网卡列表",而是内核执行路由查询时使用的路径信息。
2. 最长前缀匹配优先于默认路由
假设系统有以下两条路由:
1 | default via 203.0.113.1 dev wlp2s0 metric 100 |
当目标地址为 192.0.2.80 时,它既符合默认路由 0.0.0.0/0,也符合 192.0.2.0/24。
但是,192.0.2.0/24 的前缀更具体,因此正常情况下会优先匹配这条直连路由,数据包从 enp3s0 发出,而不是经由 WiFi 默认网关转发。
当目标地址变成 1.1.1.1 时,它不属于 192.0.2.0/24,系统才会考虑默认路由。
这里有一个重要区别:metric 并不是让所有路由进行全局排序的唯一依据。路由前缀的匹配程度是关键因素;metric 主要用于比较可用于同一目标的候选路由。不能因为 WiFi 的默认路由 metric 较低,就直接推断所有流量都会走 WiFi。
3. 多条默认路由如何竞争
如果有线网络和 WiFi 都配置了默认路由,那么访问不属于任何更具体路由的目标时,系统需要在可用的默认路径中作出选择。
例如:
1 | default via 192.0.2.1 dev enp3s0 metric 100 |
在这份示例配置中,有线默认路由的 metric 更低,因此在普通主路由表的相应查询条件下,它通常会成为优先路径。
但这并不意味着"metric 越低,所有流量就必然走该接口"。如果系统使用了策略路由、不同的路由表、数据包标记、VRF 或其他路由选择条件,最终结果还会受到这些机制的影响。
三、先查询内核的真实决策
查看路由表可以了解系统配置了哪些路径,但要确认某个目标地址实际会使用哪条路径,更直接的方式是查询内核的路由决策。
1. 使用 ip route get
例如:
1 | ip route get 192.0.2.80 |
第一条查询内网 OA 服务器的路由,第二条查询外部地址的路由。命令会根据当前环境中的路由与规则,返回相应的路由查询结果。
如果 OA 服务器的路由指向 enp3s0,而外部地址指向 wlp2s0,说明当前路由查询分别选择了有线和无线出口。
如果两者都指向 WiFi,或者 OA 服务器的路由意外指向有线网卡之外的路径,就需要继续检查路由表与规则。
ip route get 的输出会给出这条查询最终选中的出口接口、下一跳和源地址,是判断"内核到底怎么走"最直接的依据。
2. 路由表与 ip route get 的分工
两者回答的问题并不相同:
| 命令 | 主要回答的问题 |
|---|---|
ip route show |
当前路由表里有哪些路由? |
ip rule show |
内核按什么规则选择路由表? |
ip route get <地址> |
当前查询条件下,该目标会选择什么路径? |
如果系统存在策略路由,仅查看主路由表可能无法解释全部现象。因此,当路由表看起来正确,但实际流量仍然异常时,应该进一步检查路由规则。
四、用 ip route 临时修正路径
假设办公电脑的内网地址为 192.0.2.15/24,OA 服务器地址为 192.0.2.80。正常情况下,同一网段内的 OA 服务器可以通过有线网卡的直连路由到达。
如果 OA 服务器位于其他网段,例如 198.51.100.0/24,而该网络应通过办公网关 192.0.2.1 到达,就可以添加一条更具体的路由:
1 | ip route add 198.51.100.0/24 via 192.0.2.1 dev enp3s0 |
这条命令告诉内核:访问 198.51.100.0/24 时,经由办公网关 192.0.2.1,从 enp3s0 发出。
随后可以检查配置:
1 | ip route show 198.51.100.0/24 |
当确认这条路由不再需要时,可以删除:
1 | ip route del 198.51.100.0/24 via 192.0.2.1 dev enp3s0 |
上述路由配置是适用于相应网络拓扑的命令示例;本次验证环境没有执行添加、删除该办公网路由的操作。实际使用前,应确认网关可达、目标前缀正确,并且有权修改本机路由表。
还需要注意,ip route add 修改的是内核当前使用的路由配置。它并不会自动写入 NetworkManager 的连接配置文件。网络连接重新激活、网络管理服务重新应用配置或系统重启后,这条路由可能不再存在。
因此,ip route 适合用来验证路由设计、临时修复路径,以及快速判断问题是否来自路由选择;如果需要长期生效,就应该把配置写入对应的网络管理配置。
五、用 NetworkManager 配置持久化路由
在使用 NetworkManager 管理网络连接的 Linux 桌面或办公电脑上,nmcli 可以修改连接配置,使路由在连接重新激活时重新应用。
首先查看连接名称:
1 | nmcli connection show |
假设有线连接的名称为 Office Ethernet,WiFi 连接的名称为 Office WiFi。注意,连接名称不一定与接口名称相同,应该以本机实际输出为准。
1. 调整默认路由的 metric
如果希望 WiFi 主要用于访问外部网络,而办公网默认出口应优先使用有线连接,可以在确认网络设计允许的前提下,设置两条连接的默认路由 metric:
1 | nmcli connection modify "Office Ethernet" ipv4.route-metric 100 |
这里的数值仅为示例。ipv4.route-metric 是连接配置中的默认路由度量设置,会影响适用该默认值的 IPv4 路由,不只影响默认路由本身。因此,修改前应检查这两条连接是否还承担其他网段的路由职责。
如果需要让新配置应用到当前活动连接,可以在维护窗口内重新激活连接。重新激活可能导致网络短暂中断,远程操作时尤其需要谨慎:
1 | nmcli connection up "Office Ethernet" |
连接重新激活的具体行为取决于设备与连接状态;不应在没有确认管理通道和恢复方式时直接对远程办公设备执行。
应用后,再使用以下命令核对实际结果:
1 | ip -4 route show |
应当关注最终选中的出口接口、下一跳和源地址,而不是仅凭配置命令执行成功就判断问题已经解决。
2. 持久化添加专用内网路由
如果只有特定内网网段需要经由办公网关,通常比单纯调整两条默认路由更精确的办法,是为目标网段添加静态路由。
例如,使用 nmcli 为有线连接添加路由:
1 | nmcli connection modify "Office Ethernet" +ipv4.routes "198.51.100.0/24 192.0.2.1 100" |
这条配置将 198.51.100.0/24 指向网关 192.0.2.1,并为这条静态路由指定 metric 100。
其中 +ipv4.routes 用于在现有路由列表上追加配置。若需要删除这条路由,应当依据当前连接中实际存在的路由条目,使用 NetworkManager 支持的修改方式移除对应配置,而不是随意清空整个路由列表。
修改连接配置后,需要让该配置在连接激活时应用,再检查:
1 | nmcli connection show "Office Ethernet" |
NetworkManager 的连接配置和内核当前路由表是两个相关但不同的层次:前者描述网络连接应当如何配置,后者反映系统当前实际使用的路由。只有检查后者,才能确认内核最终采用的路径。
六、metric 不能解决所有多网卡问题
到这里,已经可以解释大部分常见的多网卡路由问题:具体内网路由优先于默认路由;多个默认路由之间可以通过 metric 调整相对优先级;ip route 适合临时验证,NetworkManager 则适合管理持久配置。
但有些问题不能只靠调整 metric 解决。
1. 内网与 WiFi 的网段发生重叠
假设办公网和 WiFi 都使用 203.0.113.0/24。此时,两张网卡可能各自拥有指向相同前缀的直连路由。
这时系统无法仅凭目标 IP 地址表达"这个地址应该属于办公网,而不是 WiFi 网络"。路由优先级可能影响选择结果,但它并不能从根本上消除地址空间重叠带来的歧义。
应优先通过网络规划避免重叠网段。如果无法调整地址规划,则需要结合实际拓扑评估独立路由表、策略路由或网络隔离方案,而不是仅仅继续调低某条路由的 metric。
2. 策略路由改变了查询顺序
Linux 除了路由表,还有路由规则。可以通过以下命令查看:
1 | ip rule show |
路由规则可以根据源地址、目标地址、数据包标记等条件选择不同的路由表。此时,即使主路由表中存在一条看似正确的路径,实际查询也可能先匹配其他规则,并使用不同的路由表。
因此,当普通路由表无法解释 ip route get 的结果时,应该检查规则与其他路由表,而不是直接假设内核忽略了 metric。
3. 出口正确,但回程路径不正确
网络通信不仅需要发送方选择正确的出口,也需要返回流量能够到达原始主机。
例如,请求从有线网卡发往 OA 服务器,但服务器的返回路由指向另一条无法到达客户端的路径,连接仍然可能失败。类似现象也可能由防火墙策略、源地址选择、网关配置或网络设备的访问控制造成。
遇到这种情况,应分别检查请求方向和响应方向的路径。必要时使用抓包工具观察报文从哪个接口发出、是否收到响应,以及响应是否从预期接口返回。
七、排查时应遵循的顺序
多网卡环境下,最有效的排查方式是先确认内核的决策,再逐层检查配置来源,而不是一开始就修改所有网卡的 metric。
- 确认接口和地址。 使用
ip -br addr检查网卡状态与 IP 地址,确认 OA 服务器实际位于哪个网段。 - 检查路由表。 使用
ip -4 route show查看直连路由、专用内网路由和默认路由。 - 查询目标路径。 使用
ip route get <OA服务器地址>,检查所选接口、下一跳和源地址。 - 检查路由规则。 使用
ip rule show和ip route show table all,确认是否存在策略路由或其他路由表。 - 选择合适的修正方式。 单次验证可以使用
ip route;长期配置则应修改对应的 NetworkManager 连接。 - 验证配置的持续性。 在适当维护条件下重新激活连接,再次检查路由表和实际查询结果。
这套顺序的核心是区分现象与原因。OA 无法访问只是应用层现象;只有确认实际路由决策,才能判断问题是否发生在主机侧路径选择。
八、小结
当一台 Linux 办公电脑同时连接有线内网与 WiFi 时,真正需要理解的不是"哪张网卡先连接",而是内核如何根据目标前缀、路由度量值和路由规则选择数据包的路径。
ip route 提供了直接观察和调整内核路由的手段,nmcli 则让网络配置能够随连接生命周期持续生效。两者分别对应当前生效状态与连接配置管理,不能互相替代。
对于多网卡问题,先使用 ip route get 确认内核选择了什么路径,再结合路由表、路由规则与连接配置定位原因,通常比反复切换网卡或盲目调整 metric 更可靠。
三条能带走的:
- 最长前缀匹配优先于 metric。只要存在更具体的网段条目,它必然被命中,metric 之间的比较不会发生。
- metric 只用于比较同一目标的候选路由。它无法表达"某个网段必须走某张卡"这类诉求,用它解决内网可达性,实质是把出口选择整体推向某一侧。
- 内核当前状态与连接配置是两个层次。
ip route改的是前者(易失),nmcli改的是后者(持久);判断问题是否解决,最终要看内核实际选了什么路径,而不是命令有没有执行成功。

