2、有线网络配置:使用nmcli和ifconfig配置静态IP、动态IP(DHCP),配置双网卡冗余与负载均衡

好,咱们接着聊网络配置。这一章是实战中的硬骨头,也是我平时在项目里花时间最多的地方。你想想看,Jetson 作为边缘计算节点,网络就是它的生命线。一旦断网,数据传不回来,模型更新不了,整个系统就瘫了。

我个人习惯,拿到一块 Jetson 板子,第一件事就是先把有线网络调通。别急着搞无线,有线网络稳定、可靠,是调试阶段的首选。今天咱们就聊聊怎么用 nmcliifconfig 这两个工具,搞定静态 IP、动态 IP,以及双网卡冗余和负载均衡。

2.1 工具选择:nmcli vs ifconfig

先说工具。很多老工程师习惯用 ifconfig,我也一样。但说实话,在 Ubuntu 20.04 之后的系统里,ifconfig 已经逐渐被 ip 命令取代了。不过,nmcli 才是真正的“大杀器”。

nmcli 是 NetworkManager 的命令行工具。它不仅能配置 IP,还能管理连接、设备、甚至 VPN。我个人建议,能用 nmcli 就别用 ifconfig。为什么?因为 nmcli 的配置是持久化的,重启后还在。而 ifconfig 改完,一重启就没了,除非你写到脚本里。

小提示: 如果你只是临时改个 IP 测试一下,用 ifconfig 很方便。但如果是生产环境,请务必用 nmcli 或直接改配置文件。

2.2 配置动态 IP(DHCP)

动态 IP 是最简单的。Jetson 默认就是 DHCP 模式,插上网线就能自动获取 IP。但有时候系统被改乱了,或者你想手动切回 DHCP,可以用以下命令。

先看看当前有哪些网络接口:

nmcli device status

你会看到类似 eth0eth1 这样的设备名。假设我们要配置 eth0 为 DHCP:

nmcli connection add type ethernet con-name "my-dhcp" ifname eth0
nmcli connection modify "my-dhcp" ipv4.method auto
nmcli connection up "my-dhcp"

搞定。就这么三行。第一行创建了一个叫 my-dhcp 的连接,绑定到 eth0。第二行设置 IP 获取方式为自动(DHCP)。第三行激活它。

我记得有一次在客户现场,他们的交换机 DHCP 池子满了,导致 Jetson 拿不到 IP。我当时用 nmcli 一看,发现连接状态是 connecting,但就是拿不到地址。后来查了交换机日志才找到原因。嗯,这里要注意:DHCP 失败时,nmcli 不会报错,只是连不上。你得用 nmcli connection show 看状态。

2.3 配置静态 IP

静态 IP 在边缘计算中更常见。因为很多场景下,你需要固定 IP 来访问 Jetson,或者让它作为网关。

假设我们要给 eth0 配置静态 IP:192.168.1.100/24,网关 192.168.1.1,DNS 用 8.8.8.8

nmcli connection add type ethernet con-name "my-static" ifname eth0
nmcli connection modify "my-static" ipv4.method manual
nmcli connection modify "my-static" ipv4.addresses 192.168.1.100/24
nmcli connection modify "my-static" ipv4.gateway 192.168.1.1
nmcli connection modify "my-static" ipv4.dns 8.8.8.8
nmcli connection up "my-static"

这里有个坑,我踩过好几次。如果你同时配置了多个 IP 地址,nmcli 会用逗号分隔。比如:

nmcli connection modify "my-static" ipv4.addresses "192.168.1.100/24, 10.0.0.100/16"

但要注意,网关只能有一个。如果你需要多个网关,那就得用路由表了,那是更高级的话题。

警告: 配置静态 IP 时,一定要确保 IP 没有被其他设备占用。我曾经在调试时,把 Jetson 的 IP 设成了和交换机管理 IP 一样的地址,结果整个网络都乱了。排查了半天才发现是 IP 冲突。

2.4 使用 ifconfig 临时配置

虽然我推荐 nmcli,但 ifconfig 在某些场景下还是很有用的。比如你只是临时改个 IP 测试一下,不想动持久化配置。

# 临时设置 IP
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up

# 添加默认网关
sudo route add default gw 192.168.1.1 eth0

注意,ifconfig 改完,重启网络服务或重启系统后就会失效。所以它只适合临时调试。

我个人习惯,在写自动化脚本时,会先用 ifconfig 快速验证网络通不通,确认没问题了,再用 nmcli 写入持久化配置。这样效率更高。

2.5 双网卡冗余与负载均衡

这是本章的重头戏。在工业现场,网络可靠性是第一位的。一个网卡坏了,另一个要能无缝接管。或者两个网卡同时工作,分担流量。

Jetson 通常有两个有线网口(比如 Orin 系列)。我们可以用 Linux 的 bonding 技术来实现。bonding 有几种模式,常用的两种:

模式 名称 说明
mode=1 active-backup 主备模式,一个网卡工作,另一个待命。故障时自动切换。
mode=0 balance-rr 轮询模式,两个网卡轮流发送数据包,实现负载均衡。
mode=4 802.3ad 动态链路聚合,需要交换机支持 LACP 协议。

在边缘计算场景中,我最常用的是 mode=1(主备模式)。为什么?因为很多现场交换机不支持 LACP,而 mode=0 虽然能负载均衡,但数据包乱序的问题在某些应用里很致命。

好,咱们用 nmcli 来配置 bonding。假设我们有 eth0eth1 两个网卡,要组成一个 bond0,模式为 active-backup。

# 创建 bond 接口
nmcli connection add type bond con-name "my-bond" ifname bond0 bond.options "mode=active-backup,miimon=100"

# 将 eth0 加入 bond
nmcli connection add type ethernet con-name "bond-slave-1" ifname eth0 master bond0

# 将 eth1 加入 bond
nmcli connection add type ethernet con-name "bond-slave-2" ifname eth1 master bond0

# 给 bond0 配置 IP(静态)
nmcli connection modify "my-bond" ipv4.method manual
nmcli connection modify "my-bond" ipv4.addresses 192.168.1.100/24
nmcli connection modify "my-bond" ipv4.gateway 192.168.1.1
nmcli connection modify "my-bond" ipv4.dns 8.8.8.8

# 激活
nmcli connection up "my-bond"

这里有个参数 miimon=100,意思是每 100 毫秒检测一次链路状态。如果发现网卡挂了,就自动切换到另一个。这个值我一般设 100,太快了浪费 CPU,太慢了切换不及时。

我曾经在一个项目中,用 Jetson 做车载边缘计算。车辆震动导致网口接触不良,网卡时断时续。用了 bonding mode=1 之后,即使一个网口松了,另一个立刻接管,业务完全不受影响。嗯,这就是冗余的价值。

核心要点: 配置完 bonding 后,可以用 cat /proc/net/bonding/bond0 查看当前哪个网卡是 active 的。如果看到 MII Status: up,说明链路正常。

2.6 验证与排错

配置完了,怎么验证?我一般三步走:

  1. 看接口状态: nmcli device statusip a,确认 bond0 有 IP,eth0 和 eth1 状态是 connected
  2. 测连通性: ping -c 4 192.168.1.1,ping 网关。通了说明网络层没问题。
  3. 模拟故障: 拔掉一根网线,看 ping 是否中断。如果 bonding 配置正确,应该只有一两个丢包,然后自动恢复。

如果 ping 不通,先检查网线,再检查 IP 是否冲突。我遇到过最奇葩的问题,是 Jetson 的网口速率不匹配。有的交换机只支持 100M,而 Jetson 默认是 auto-negotiation,协商失败就会降速甚至断连。这时候可以用 ethtool eth0 查看速率,手动固定:

sudo ethtool -s eth0 speed 100 duplex full autoneg off

好了,这一章的内容就这些。有线网络配置看似简单,但细节很多。尤其是双网卡冗余,在工业现场几乎是标配。下一章咱们聊聊无线网络,那又是另一番天地了。