Ubuntu 18.04工控机双网卡上网冲突?一个metric值设置搞定有线无线优先级
Ubuntu 18.04工控机双网卡优先级配置实战指南在工业自动化现场一台稳定运行的Ubuntu 18.04工控机往往需要同时接入多个网络通过有线网卡连接PLC控制网络又需要通过无线网卡访问互联网进行软件更新或远程维护。这种典型的多网卡场景下工程师们经常遇到一个棘手问题——当所有网卡都处于连接状态时系统似乎随机选择网络路径导致关键的网络操作失败。1. 工控环境下的网络优先级困境走进任何现代化工厂的车间你会看到数十台工控设备通过复杂的网络拓扑相互连接。这些设备通常需要同时满足两个看似矛盾的需求既要与本地工业设备如PLC、HMI、视觉系统保持毫秒级响应的稳定通信又要能偶尔接入企业内网或互联网进行数据上报或软件更新。上周我就遇到这样一个案例某汽车零部件生产线的视觉检测工控机在尝试通过apt安装OpenCV更新时反复出现无法连接错误而同一时间其与PLC的Modbus TCP通信却完全正常。这种看似网络通畅但无法上网的现象根源就在于Linux内核的路由选择机制。典型工控网络拓扑特征有线网络1192.168.1.0/24连接PLC控制器网关192.168.1.1有线网络210.0.0.0/8连接厂级MES系统网关10.0.0.254无线网络DHCP获取连接企业WiFi网关172.16.1.1当所有网卡同时激活时执行route -n会看到类似如下的路由表Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno1 0.0.0.0 10.0.0.254 0.0.0.0 UG 101 0 0 eno2 0.0.0.0 172.16.1.1 0.0.0.0 UG 600 0 0 wlp3s02. 理解Metric值的核心作用Metric值在Linux网络栈中扮演着交通警察的角色它决定了当存在多条可达路径时内核的选择偏好。这个看似简单的数值背后其实是一套精密的决策机制Metric的深层含义数值范围1-9999数值越小优先级越高影响要素路径跳数、链路速率、可靠性、管理策略特殊场景当metric相同时会出现路由震荡flapping通过实验可以验证metric的影响。在终端执行以下命令实时观察路由变化watch -n 1 route -n | grep -E Iface|eno1|wlp3s0然后尝试修改metric值sudo ifmetric eno1 200 # 降低有线网卡优先级 sudo ifmetric wlp3s0 50 # 提高无线网卡优先级3. 临时调整方案ifmetric的妙用对于需要频繁切换网络配置的现场工程师ifmetric工具就像一把瑞士军刀。它不仅能够快速解决问题还能实现一些精妙的临时配置ifmetric进阶用法# 查看特定网卡的当前metric ifmetric wlp3s0 # 设置metric并立即生效 sudo ifmetric wlp3s0 50 # 基于连接质量动态调整需要自定义脚本 LINK_QUALITY$(iwconfig wlp3s0 | grep Link Quality | awk {print $2} | cut -d -f2) METRIC$(( 100 - LINK_QUALITY * 100 )) sudo ifmetric wlp3s0 $METRIC注意ifmetric修改会在重启后失效适合以下场景现场临时调试网络故障应急处理测试不同metric值的效果4. 永久配置方案Netplan最佳实践对于需要7×24小时稳定运行的工控设备Netplan提供了可靠的持久化配置方案。相比传统的/etc/network/interfacesNetplan的YAML语法更加清晰易读。完整的多网卡配置示例network: version: 2 renderer: networkd ethernets: eno1: dhcp4: no addresses: [192.168.1.100/24] routes: - to: 192.168.1.0/24 via: 192.168.1.1 metric: 100 - to: 0.0.0.0/0 via: 192.168.1.1 metric: 200 eno2: dhcp4: yes dhcp4-overrides: route-metric: 300 wifis: wlp3s0: dhcp4: yes access-points: Factory_WiFi: password: s3cr3tpss dhcp4-overrides: route-metric: 50关键配置说明为有线网络设置明确的静态metric200无线网络配置更低的metric50保留到本地子网的独立路由metric 100使用networkd而非NetworkManager更适合无GUI环境应用配置后建议执行完整的验证流程sudo netplan generate sudo netplan apply ip route show | grep -E default|via ping -I wlp3s0 8.8.8.8 # 指定网卡测试5. 工业场景下的特殊考量工控环境往往有着比普通办公室更复杂的网络需求需要特别注意以下几点冗余网络配置routes: - to: 0.0.0.0/0 via: 192.168.1.1 metric: 100 on-link: true - to: 0.0.0.0/0 via: 192.168.1.254 metric: 150多租户隔离vlans: eno1.100: id: 100 link: eno1 addresses: [10.100.0.2/24] routes: - to: 10.100.0.0/24 via: 10.100.0.1 metric: 50QoS策略集成# 配合tc实现带宽保障 sudo tc qdisc add dev eno1 root handle 1: htb default 10 sudo tc class add dev eno1 parent 1: classid 1:10 htb rate 100mbit ceil 100mbit在汽车生产线等对实时性要求极高的场景建议将PLC通信网络的metric设为固定值如50而将办公网络的metric设为动态调整基于当前流量负载。这可以通过结合ifmetric和自定义监控脚本实现#!/bin/bash while true; do PLC_TRAFFIC$(iftop -t -s 1 -i eno1 -n | grep | awk {print $4}) if [ ${PLC_TRAFFIC%%.*} -gt 50 ]; then sudo ifmetric wlp3s0 200 # 当PLC流量大时降低WiFi优先级 else sudo ifmetric wlp3s0 50 fi sleep 5 done