新闻详情

新闻详情

首页 / 资讯中心 / 详情

工业双网卡路由优先级配置:systemd-networkd Metric实战

发布时间:2026/10/1 13:40:48来源:尧图网络
工业双网卡路由优先级配置:systemd-networkd Metric实战
1. 工业现场双网卡的真实困境1.1 一个让运维半夜爬起来的场景我接触过不少工业计算机的部署现场最常见的硬件配置就是一台工控机插两块网卡一块有线网口接车间内网的交换机负责和 PLC、HMI、传感器这些设备通信另一块无线网卡或者 4G/5G 模块负责把采集到的数据往上层平台回传或者做远程运维通道。听起来很清晰各走各的路互不干扰。但实际跑起来问题往往出在一个很隐蔽的地方——路由优先级。具体表现是什么呢有线网口明明连着内网ping 内网设备也通但数据就是上不去外网或者反过来无线通道正常但访问车间里某台设备的 Web 管理页面死活打不开。你去看ip route会发现默认路由指向了错误的那块网卡。更让人头疼的是重启一次可能好了再重启一次又乱了因为两块网卡谁先拿到默认路由取决于内核启动时网卡初始化的顺序而这个顺序并不总是稳定的。这个问题的根源在于 Linux 内核的路由表里默认路由0.0.0.0/0只能有一条生效。当两块网卡都通过 DHCP 或者静态配置拿到了网关系统就会面临一个选择到底听谁的如果没有人为干预内核会按照路由的Metric 值来决定优先级Metric 越小优先级越高。而很多发行版默认给所有网卡分配的 Metric 是一样的这时候就变成了“先到先得”谁先注册谁生效。1.2 为什么工业场景比办公场景更容易踩坑办公电脑一般只有一块有线网卡加一块无线网卡而且通常不会同时启用或者无线只是备用。但工业计算机不一样双网卡同时在线是常态而且两块网卡承担的业务职责完全不同。有线侧往往要访问大量内网私有地址段比如 192.168.x.x、10.x.x.x无线侧要访问公网或者上层专网。如果默认路由跑到了有线侧上层数据就回不去如果默认路由跑到了无线侧内网设备的访问就可能绕远路甚至不通。还有一个容易被忽略的点工业现场经常使用systemd-networkd来管理网络而不是传统的 NetworkManager 或者 ifupdown。systemd-networkd 是 systemd 生态的一部分轻量、启动早、配置集中非常适合嵌入式或者工控场景。但它的配置方式和传统工具差异很大很多人第一次接触时连配置文件放哪里、怎么生效都不清楚更别说精细控制路由 Metric 了。1.3 这篇内容能帮你解决什么接下来我会把整个排查和解决过程拆开讲清楚。从理解 systemd-networkd 的配置结构到给两块网卡分别设定不同的 Metric再到验证路由表是否符合预期最后补充一些我在现场踩过的坑和排查技巧。目标很明确让你拿到一台双网卡工控机能自己把路由优先级理顺不再靠重启碰运气。不管你是刚接触 Linux 网络的新手还是已经用过 systemd-networkd 但没深究过 Metric 的老手这篇内容都能给你一套可以直接抄作业的方案。我尽量不堆术语用现场能听懂的话把原理讲透把配置写全。2. systemd-networkd 的配置逻辑与 Metric 的作用2.1 systemd-networkd 到底是怎么管网络的要理解 Metric 怎么配先得搞清楚 systemd-networkd 的工作方式。它和 NetworkManager 最大的区别在于配置是声明式的放在固定的目录里由守护进程统一加载。你不需要敲一堆命令去“创建连接”而是写好配置文件然后让 networkd 去读。配置文件主要放在三个地方优先级从高到低/etc/systemd/network/—— 管理员手动配置优先级最高/run/systemd/network/—— 运行时临时配置重启丢失/usr/lib/systemd/network/—— 软件包自带的默认配置优先级最低实际运维中我们只需要关心/etc/systemd/network/这个目录。里面的文件按扩展名分三类.network—— 定义网络接口的配置比如 IP 地址、网关、路由、DNS.netdev—— 定义虚拟网络设备比如 bridge、bond、vlan.link—— 定义底层链路层参数比如 MAC 地址、MTU对于双网卡路由优先级这个问题我们只需要改.network文件。每个.network文件通过[Match]段来匹配具体的网卡匹配的依据可以是网卡名称、MAC 地址、驱动类型等。匹配上之后[Network]段里的配置就会应用到这块网卡上。2.2 Metric 在路由决策中扮演什么角色Metric 这个词在 Linux 网络里出现的地方很多但核心含义就一个当有多条路由可以到达同一个目的地时Metric 小的那条优先被选中。你可以把它理解成“代价”或者“权重”代价越低越优先。对于默认路由来说情况稍微特殊一点。默认路由是“所有没有明确匹配规则的目的地”的兜底出口。当系统里存在两条默认路由时内核不会同时使用它们除非配置了多路径路由而是选 Metric 最小的那条放进主路由表。另一条虽然还在但不会生效除非第一条消失了。这里有一个关键细节Metric 的比较是在同一张路由表内进行的。Linux 支持多张路由表默认情况下所有路由都进main表table 254。如果你用策略路由把不同网卡的路由分到不同的表里那 Metric 的比较范围就变了。不过对于大多数工业场景我们不需要搞那么复杂直接在main表里用 Metric 区分优先级就够了。2.3 为什么默认配置会导致冲突很多发行版包括 Debian、Ubuntu、CentOS 的某些版本在默认情况下通过 DHCP 获取地址时DHCP 客户端会给默认路由分配一个 Metric通常是 100 或者 1024 这样的值。如果两块网卡都走 DHCP而且没有特别指定它们拿到的 Metric 可能相同。这时候内核就懵了两条默认路由 Metric 一样选谁内核的决策逻辑是如果 Metric 相同就比较路由的“来源”或者“添加顺序”。先被添加进路由表的那条会生效。而网卡的初始化顺序受很多因素影响PCI 总线扫描顺序、驱动加载顺序、systemd 的并行启动调度甚至硬件插槽位置。这就解释了为什么有时候重启后路由正常有时候不正常——完全是运气。更麻烦的是有些无线网卡的 DHCP 客户端会默认给一个更小的 Metric比如 50导致无线优先级反而高于有线。这在办公场景可能是故意的无线优先但在工业场景就是灾难内网流量被强行推到无线侧延迟高、丢包多甚至完全不通。2.4 解决思路用 Metric 明确指定优先级思路其实很直接给两块网卡的默认路由设定不同的 Metric让业务需要的那个方向优先。具体来说如果希望有线侧作为内网访问的主通道同时不希望它抢走默认路由那就把有线的 Metric 设大一些比如 1000无线的 Metric 设小一些比如 100。这样默认路由走无线内网流量因为有更精确的路由条目比如 192.168.0.0/24 直连走有线各司其职。反过来如果希望有线侧承担默认出口比如有线接的是能上外网的核心交换机无线只是备用那就把有线 Metric 设小无线设大。关键是根据业务流向来决定而不是凭感觉。在 systemd-networkd 里设置 Metric 的位置在.network文件的[DHCPv4]段或者[Route]段。如果地址是 DHCP 获取的用[DHCPv4]里的RouteMetric来指定如果是静态配置的用[Route]段里的Metric来指定。两种方式我都下面会给出完整示例。3. 手把手配置双网卡 Metric3.1 先摸清现场情况确认网卡名称和当前路由动手之前先把现场情况摸清楚。第一步是确认两块网卡的系统名称。工业计算机的网卡命名可能是enp3s0、enp4s0这种基于 PCI 位置的也可能是eth0、eth1这种传统命名甚至有些无线网卡是wlan0、wlp2s0。用下面这条命令看ip link show输出里会列出所有网络接口state UP的是已经启用的state DOWN的是没启用的。找到你的有线和无线分别叫什么记下来。接着看当前的路由表ip route show重点关注default via ...那几行。你会看到类似这样的输出default via 192.168.1.1 dev enp3s0 proto dhcp src 192.168.1.100 metric 100 default via 10.0.0.1 dev wlan0 proto dhcp src 10.0.0.50 metric 600这里metric后面的数字就是当前生效的 Metric。如果两条默认路由的 Metric 不同说明已经有人配过了如果相同或者只有一条那就是我们要处理的对象。还要确认一下 systemd-networkd 是不是真的在管这两块网卡networkctl status这个命令会列出所有被 networkd 接管的接口以及它们的状态。如果某块网卡显示unmanaged说明 networkd 没管它可能是 NetworkManager 或者别的工具在管那配置方式就不一样了。3.2 有线网卡的配置文件怎么写假设有线网卡叫enp3s0走 DHCP 获取地址我们希望它的默认路由 Metric 设为 1000优先级低不抢默认出口同时内网直连路由正常。在/etc/systemd/network/下创建一个文件比如10-wired.network[Match] Nameenp3s0 [Network] DHCPipv4 [DHCPv4] RouteMetric1000这里RouteMetric1000的作用是DHCP 客户端在安装默认路由时把 Metric 设成 1000。注意这个参数只影响 DHCP 获取的默认路由不影响直连路由直连路由的 Metric 通常是 0优先级最高这是对的内网流量本来就该直连。如果有线网卡是静态 IP配置会稍微不一样[Match] Nameenp3s0 [Network] Address192.168.1.100/24 Gateway192.168.1.1 DNS192.168.1.1 [Route] Gateway192.168.1.1 Metric1000静态配置时[Network]段里的Gateway会生成一条默认路由但它的 Metric 是默认值。为了精确控制我们额外写一个[Route]段显式指定 Gateway 和 Metric。这样默认路由的 Metric 就是 1000。3.3 无线网卡的配置文件怎么写无线网卡的情况稍微复杂一点因为除了 IP 配置还要处理无线认证。systemd-networkd 本身不直接管理无线认证通常需要配合wpa_supplicant。不过很多工业计算机的无线模块是 4G/5G 模块走的是 PPP 或者 QMI 接口那又是另一套配置。这里我按最常见的 WiFi 场景来讲。假设无线网卡叫wlan0通过 wpa_supplicant 连上 AP 后由 networkd 通过 DHCP 获取地址。我们希望它的默认路由 Metric 设为 100优先级高作为默认出口。创建20-wireless.network[Match] Namewlan0 [Network] DHCPipv4 [DHCPv4] RouteMetric100如果无线侧也是静态 IP比如专网固定地址那就用静态配置的方式[Match] Namewlan0 [Network] Address10.0.0.50/24 Gateway10.0.0.1 DNS10.0.0.1 [Route] Gateway10.0.0.1 Metric100这里有一个容易踩的坑无线网卡的[Match]段如果只写Namewlan0有时候匹配不上因为无线接口在 wpa_supplicant 完成认证之前可能处于 DOWN 状态networkd 可能错过匹配时机。更稳妥的做法是用 MAC 地址匹配[Match] MACAddressaa:bb:cc:dd:ee:ffMAC 地址用ip link show wlan0可以查到。用 MAC 匹配的好处是不受接口名称变化的影响也不受接口状态影响。3.4 让配置生效并验证配置文件写好后需要让 networkd 重新加载systemctl restart systemd-networkd然后等几秒钟再看路由表ip route show你应该能看到两条默认路由Metric 分别是 1000 和 100。Metric 小的那条100会生效成为实际出口。可以用ip route get来验证某个目的地走哪条路ip route get 8.8.8.8 ip route get 192.168.1.50第一条命令查公网地址应该走无线侧第二条查内网地址应该走有线侧直连。如果结果符合预期说明配置成功。还可以用networkctl status enp3s0和networkctl status wlan0分别查看两块网卡的详细状态确认 networkd 确实应用了我们的配置。3.5 一个完整的配置对照表为了让你更清楚不同场景下怎么配我整理了一个对照表场景有线 Metric无线 Metric默认出口适用情况无线为主出口1000100无线有线只连内网设备无线负责上联有线为主出口1001000有线有线接核心交换机无线做备用双出口负载100100看策略路由需要策略路由配合不单靠 Metric无线仅备用1001000有线有线正常时无线不参与路由这个表里的数值不是固定的你可以根据实际情况调整关键是两块网卡的 Metric 要有明显差距避免内核在相近值之间反复摇摆。4. 现场排查与常见问题实录4.1 配置写了但不生效先查这三个地方配置文件写对了但路由没变化是最常见的情况。我一般按这个顺序排查第一确认文件扩展名和位置。.network文件必须放在/etc/systemd/network/下扩展名必须是.network。有些人写成.conf或者放在子目录里networkd 是不认的。第二确认[Match]段真的匹配上了。用networkctl status看接口状态如果显示unmanaged说明没匹配上。这时候检查Name或MACAddress是否写对。特别注意大小写网卡名称是区分大小写的。第三确认没有其他配置文件冲突。/etc/systemd/network/下如果有多个文件匹配同一块网卡networkd 会按文件名字典序加载后面的覆盖前面的。用ls -l /etc/systemd/network/看看有没有多余的文件。4.2 DHCP 拿到的 Metric 为什么和我设的不一样有时候你在[DHCPv4]里设了RouteMetric1000但ip route显示的还是 100。这种情况通常是 DHCP 服务器下发了自己的 Metric覆盖了本地设置。DHCP 协议里有一个选项叫“静态路由”option 33或者“类别less静态路由”option 121服务器可以通过这些选项指定路由和 Metric。解决办法是在[DHCPv4]段里加一行UseRoutesfalse这样 DHCP 客户端就不会安装服务器下发的路由只用我们本地配置的。但要注意关掉之后如果服务器下发了必要的内网路由也会被忽略。所以更精细的做法是用RouteMetric配合UseRoutestrue让本地 Metric 覆盖服务器下发的值。不同版本的 systemd 行为可能略有差异建议实测确认。4.3 无线网卡频繁掉线导致路由抖动工业现场的无线环境往往很恶劣AP 信号不稳定无线网卡可能频繁重连。每次重连都会重新走一遍 DHCP路由表也会跟着抖动。如果无线是默认出口这会导致上层数据时断时续。一个缓解办法是给无线网卡配置静态 IP避免 DHCP 重连带来的路由变化。如果必须用 DHCP可以在[DHCPv4]里加RouteMetric100 RouteTablemain强制指定路由表和 Metric减少不确定性。另外可以考虑用wpa_supplicant的bgscan参数优化漫游行为减少不必要的重连。4.4 内网设备访问慢或者不通如果默认路由配对了但访问内网某台设备还是很慢大概率是直连路由没生效或者子网掩码配错了。比如有线网卡配的是192.168.1.100/24但实际内网设备在192.168.2.0/24网段那流量就会走默认路由出去绕一大圈。用ip route get 192.168.2.50查一下实际走哪条路。如果显示走默认路由说明缺少到192.168.2.0/24的路由。解决办法是在有线网卡的配置文件里加一条静态路由[Route] Destination192.168.2.0/24 Gateway192.168.1.1 Metric50这条路由的 Metric 设小一点确保优先于默认路由。4.5 常见问题速查表现象可能原因排查命令解决方法默认路由只有一条另一块网卡没启用或没匹配networkctl status检查.network文件匹配规则Metric 和配置不符DHCP 服务器覆盖ip route show加UseRoutesfalse或调整RouteMetric重启后路由变化网卡初始化顺序不稳定journalctl -u systemd-networkd显式设置不同 Metric内网访问绕路缺少直连路由或掩码错误ip route get 内网IP补充静态路由或修正掩码无线重连后路由丢失DHCP 租约更新journalctl -u systemd-networkd改用静态 IP 或固定 Metric4.6 几个我踩过的坑第一个坑在[Network]段里写Gateway的同时又在[Route]段里写 Gateway导致重复路由。systemd-networkd 会把两处都处理生成两条默认路由Metric 可能不同反而造成混乱。正确做法是二选一要么只用[Network]的Gateway要么只用[Route]段显式配置。第二个坑无线网卡的[Match]用Name匹配但接口在启动时名称还没确定。有些无线网卡的名称是动态生成的比如基于 MAC 地址的wlx00e04c123456重启后可能变。用MACAddress匹配最稳妥。第三个坑改了配置文件但忘了systemctl restart systemd-networkd。networkd 不会自动监听文件变化必须手动重启或者systemctl reload systemd-networkd部分版本支持 reload。我习惯改完就重启然后ip route确认一遍。第四个坑在有线网卡的配置文件里设了RouteMetric但网卡走的是静态 IP[DHCPv4]段根本不生效。静态 IP 的 Metric 要在[Route]段里设这个前面已经强调过了。5. 进阶策略路由与多表配合5.1 什么时候 Metric 不够用Metric 解决的是“同一张路由表内多条默认路由谁优先”的问题。但有些场景下光靠 Metric 不够。比如有线侧和无线侧都需要访问同一个公网地址但希望根据源地址或者应用类型走不同的出口。这时候就需要策略路由也就是根据源 IP、目的 IP、TOS 等条件把流量分配到不同的路由表。策略路由的配置在 systemd-networkd 里通过[RoutingPolicyRule]段实现。比如我们希望来自有线网卡源地址的流量走有线出口来自无线网卡源地址的流量走无线出口[RoutingPolicyRule] From192.168.1.0/24 Table100 Priority100然后在有线网卡的配置里把默认路由放到 table 100[Route] Gateway192.168.1.1 Table100 Metric100这样来自192.168.1.0/24的流量会查 table 100找到有线侧的默认路由其他流量查 main 表走无线侧。两块网卡各司其职互不干扰。5.2 策略路由的配置要点策略路由的配置有几个关键点Priority越小优先级越高规则按 Priority 从小到大匹配Table可以是数字1-252或者名称在/etc/iproute2/rt_tables里定义路由表里的默认路由需要显式指定Table否则会进 main 表策略路由规则和路由表要配套缺一不可这种配置方式比单纯改 Metric 复杂但灵活性高得多。如果你的工业场景需要严格的流量分离建议用策略路由。如果只是想让默认出口明确Metric 就够了。5.3 验证策略路由是否生效配置完成后用ip rule show查看策略规则ip rule show输出里应该能看到你配置的规则比如100: from 192.168.1.0/24 lookup 100。然后用ip route show table 100查看 table 100 里的路由ip route show table 100确认默认路由在 table 100 里。最后用ip route get带上源地址验证ip route get 8.8.8.8 from 192.168.1.100如果输出显示走 table 100 的默认路由说明策略路由生效了。6. 收尾一些个人经验这套配置我在多个工业现场用过从简单的双网卡工控机到带 4G 模块的远程终端核心思路都是一样的先明确业务流向再用 Metric 或策略路由把流量引导到正确的出口。不要指望系统自动帮你选对工业场景的网络环境比办公环境复杂得多必须人为干预。有一个习惯我强烈建议你养成每次改完网络配置立刻用ip route show和ip route get验证不要等到重启后才检查。很多问题在重启前就能发现省得半夜被叫起来处理。另外配置文件建议用版本管理工具管起来比如 git。工业现场的配置往往需要复制到多台设备有了版本管理改了什么、为什么改一目了然。下次遇到类似问题直接翻历史记录就行。最后再分享一个小技巧如果现场条件允许给每块网卡配一个带注释的配置文件。systemd-networkd 的配置文件支持#开头的注释把这块网卡的用途、Metric 设定的理由写进去。过几个月再回来看你还能快速回忆起当时的决策逻辑。这个习惯在多人协作的运维团队里尤其重要。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Skill和MCP推荐清单 2026/10/1 16:00:43

Skill和MCP推荐清单

Skill & MCP 推荐清单:我私藏的 AI 扩展能力工具箱 我有时候需要一些 AI 扩展能力的时候,发现让 AI 搓一个比较耗费时间和 token,网络上找半天又不知道哪个比较好用。 因此建立这个文档,欢迎大家在下面留下觉得好用的 Skill…

阅读更多 →
权重绑定深度语言模型:深度缩放、免费早退与一个基本权衡 2026/10/1 16:00:43

权重绑定深度语言模型:深度缩放、免费早退与一个基本权衡

Tied-Depth Language Models: Depth Scaling, Free Early Exit, and a Fundamental Trade-off 草稿 v2 | 2026-09-29 | 基于 DEQ-LM v1→v11 十一个版本、7.27M/23M 两个规模、约 18 小时 GPU 实验摘要 权重绑定迭代块(同一 Transformer 块反复应用 k 次&#xff09…

阅读更多 →
直播域名体系开发:推流域名、播流域名、CNAME 与加速区域 2026/10/1 16:00:43

直播域名体系开发:推流域名、播流域名、CNAME 与加速区域

配置明明在控制台生效了,播放却始终拉不到流——这是直播域名体系里最反直觉的误区,也是域名规划阶段最常见的痛点之一。运维在 PC 运营管理后台看到推流域名和播流域名都显示"已配置成功",CNAME 也填了,可观众在移动端…

阅读更多 →
靠谱的AI智能体独立站GEO优化服务商有哪些 2026/10/1 16:00:43

靠谱的AI智能体独立站GEO优化服务商有哪些

采购装备、寻找供应商、筛选服务商,如今越来越多企业的第一站不再是传统搜索引擎,而是直接向豆包、DeepSeek、元宝、千问、Kimi等AI平台提问。AI给出的推荐名单,正在决定一家企业能否进入客户的候选池。正因如此,GEO(生成式引擎优…

阅读更多 →
DBSCAN聚类算法Matlab实现:从密度概念到调参避坑实战 2026/10/1 16:00:43

DBSCAN聚类算法Matlab实现:从密度概念到调参避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
PLC 基础知识 2026/10/1 16:00:36

PLC 基础知识

模拟量 开关量

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉