Orange Pi 使用 nmcli 配置 Wi-Fi 和 eth0 固定 IP

整理旧物件的时候找到一片多年前留下的OrangePi PC +, 刚好想体验一下VS Code的Remote SSH, 结果不巧的是之前烧录的是ubuntu18.04依赖的GLIBC要求的版本是GLIBC_2.28 or newer, 官方渠道有20.04的版本镜像,电脑没有安装X盘,就顺手搜索了一下竟然发现了一个armbian的社区,适合PC +的有26.04的版本,可以直接下载不需要三方下载器体验非常好,使用balenaEtcher将镜像写到TF卡,然后启动完成后在串口终端下sudo armbian-config(选择System->Storage->2 boot from emmc - system on emmc)将系统安装在eMMC上。

注意:由于网络的原因golang的语言服务器和调试器在目标板卡上很难安装成功,需要使用代理

gopls 是 Go 的语言服务器,VS Code 远程开发时,它需要安装在 远程目标机 上,而不是你的 Windows 本机上。

你可以在目标 ARM Linux 上配置 Go 模块代理镜像。

先 SSH 到目标板卡,执行:

go env -w GOPROXY= https://goproxy.cn ,direct
go env -w GOSUMDB=sum.golang.google.cn

然后手动安装:

go install golang.org/x/tools/gopls@latest

确认:

which gopls
gopls version

如果 which gopls 没有结果,通常是 Go 的 bin 目录没进 PATH。查看:

go env GOPATH

一般是:

/home/你的用户名/go

把它加入 PATH:

echo 'export PATH=\(PATH:\)(go env GOPATH)/bin' >> ~/.bashrc
source ~/.bashrc

然后重启 VS Code Remote SSH 窗口。

调试 Go 程序还需要 dlv,也建议一起装:

go install github.com/go-delve/delve/cmd/dlv@latest

确认:

which dlv
dlv version

接下来通过串口登录 Orange Pi 后,使用 nmcli 配置网络的场景。

目标配置:

Wi-Fi / wlan0 或 wld1:
  IP 地址: 192.168.0.10/24
  网关: 192.168.0.1
  DNS: 192.168.0.1 8.8.8.8
  用途: 日常 SSH 远程访问和上网

有线网卡 / eth0 或 end0:
  IP 地址: 192.168.150.20/24
  网关: 不设置
  DNS: 不设置
  用途: 笔记本直连维护 Orange Pi

关键原则:

Wi-Fi 负责上网,所以 Wi-Fi 配 gateway 和 DNS。
eth0 只负责直连维护,所以 eth0 不配 gateway 和 DNS。

这样可以避免 eth0 抢默认路由,也可以避免有线网卡的 DNS 配置影响 Wi-Fi 上网。

1. 通过串口登录 Orange Pi

常见串口参数:

115200 8N1

Linux/macOS 可以使用:

screen /dev/ttyUSB0 115200

Windows 可以使用 PuTTY、MobaXterm 等串口工具:

Serial
Port: 按实际串口号选择
Speed: 115200
Data bits: 8
Stop bits: 1
Parity: None
Flow control: None

串口登录的好处是:即使网络配置错了,仍然可以通过串口进入系统修复网络。

2. 查看当前连接和网卡状态

查看 NetworkManager 里的所有连接配置:

nmcli con show

这里第一列 NAME 是连接名,最后一列 DEVICE 是实际设备名。后续 nmcli con mod 通常使用连接名。

连接名和设备名不是一回事:

连接名:
  NetworkManager 保存的一份网络配置,例如 eth0、sl4e。

设备名:
  Linux 当前识别到的真实网卡名,例如 eth0、end0、wlan0、wld1、wlan1。

在某些系统或内核版本里,重启后设备名可能变化。例如之前是 eth0 / wlan0,重启后变成 end0 / wld1 / wlan1。连接名可以继续叫 eth0sl4e,但连接配置不能错误地强绑定到一个已经不存在的设备名。

示例:

NAME             UUID                                  TYPE      DEVICE
eth0             ae93d9df-38b9-418f-9f45-63950ba65a36  ethernet  eth0
Ifupdown (eth0)  681b428f-beaf-8932-dce4-687ed5bae28e  ethernet  --
sl4e             f95c6bf5-cc07-4ff1-a4ff-c17f456dd1ae  wifi      wlan0

含义:

eth0:
  当前有线网卡连接配置,绑定到设备 eth0。

sl4e:
  当前 Wi-Fi 连接配置,绑定到设备 wlan0。

Ifupdown (eth0):
  传统 /etc/network/interfaces 兼容配置生成的连接。
  如果 DEVICE 是 --,说明当前没有启用。
  它不一定影响当前网络,通常可以先不处理。

查看当前正在启用的连接:

nmcli con show --active

示例:

NAME  UUID                                  TYPE      DEVICE
eth0  ae93d9df-38b9-418f-9f45-63950ba65a36  ethernet  eth0
sl4e  f95c6bf5-cc07-4ff1-a4ff-c17f456dd1ae  wifi      wlan0

只有出现在 --active 里的连接才是当前正在使用的连接。

查看网卡 IP:

ip addr

只查看无线网卡:

ip addr show wlan0

如果重启后无线网卡不叫 wlan0,先用下面的命令确认实际设备名:

nmcli dev status
ip link

然后把 wlan0 换成实际名字,例如:

ip addr show wld1

只查看有线网卡:

ip addr show eth0

如果重启后有线网卡不叫 eth0,例如变成 end0,就查看:

ip addr show end0

查看路由:

ip route

ip route 很重要,因为它能告诉你系统默认从哪块网卡上网。

理想状态下,默认路由应该走 Wi-Fi:

default via 192.168.0.1 dev wlan0

如果看到默认路由走了 eth0,例如:

default via ... dev eth0

那通常说明 eth0 设置了 gateway,可能会影响 Wi-Fi 上网。

3. 配置 Wi-Fi 固定 IP

当前 Wi-Fi 连接名是:

sl4e

无线网卡设备名可能是:

wlan0
wld1

把 Wi-Fi 固定为:

IP 地址: 192.168.0.10/24
网关: 192.168.0.1
DNS: 192.168.0.1 8.8.8.8

执行:

sudo nmcli con mod sl4e \
  ipv4.addresses 192.168.0.10/24 \
  ipv4.gateway 192.168.0.1 \
  ipv4.dns "192.168.0.1 8.8.8.8" \
  ipv4.method manual

说明:

ipv4.addresses 192.168.0.10/24:
  设置 Orange Pi 的 Wi-Fi 固定 IP。
  /24 等价于子网掩码 255.255.255.0。

ipv4.gateway 192.168.0.1:
  设置默认网关。
  Orange Pi 访问外网时,会通过这个路由器出去。

ipv4.dns "192.168.0.1 8.8.8.8":
  设置 DNS。
  192.168.0.1 通常是路由器 DNS,8.8.8.8 是备用公共 DNS。

ipv4.method manual:
  使用手动静态 IP,不再通过 DHCP 自动获取地址。

注意:不要先单独执行下面这条命令:

sudo nmcli con mod sl4e ipv4.method manual

如果地址还没有设置,NetworkManager 可能会报错:

ipv4.addresses: this property cannot be empty for 'method=manual'

所以推荐把地址、网关、DNS 和 ipv4.method manual 放在同一条命令里设置。

重新启用 Wi-Fi 连接:

sudo nmcli con down sl4e
sudo nmcli con up sl4e

检查:

ip addr show wlan0
ip route

如果实际无线设备名是 wld1,则使用:

ip addr show wld1
ip route

期望看到:

wlan0 或 wld1 有 192.168.0.10/24
default via 192.168.0.1 dev wlan0 或 wld1

之后可以从同一个局域网里的电脑 SSH:

ssh root@192.168.0.10

如果不是 root 用户,换成实际用户名,例如:

ssh orangepi@192.168.0.10

4. 配置 eth0 固定 IP,且不设置 gateway 和 DNS

当前有线连接名是:

eth0

有线网卡设备名可能是:

eth0
end0

把有线网卡固定为:

IP 地址: 192.168.150.20/24
网关: 不设置
DNS: 不设置

执行:

sudo nmcli con mod eth0 \
  ipv4.addresses 192.168.150.20/24 \
  ipv4.gateway "" \
  ipv4.dns "" \
  ipv4.method manual \
  connection.autoconnect yes

说明:

ipv4.addresses 192.168.150.20/24:
  设置 Orange Pi 的有线网卡固定 IP。

ipv4.gateway "":
  清空 eth0 的网关。
  这样 eth0 不会成为默认上网出口。

ipv4.dns "":
  清空 eth0 的 DNS。
  这样 DNS 解析不会被 eth0 的配置干扰。

ipv4.method manual:
  使用手动静态 IP。

connection.autoconnect yes:
  开机后自动启用这个连接。

重新启用有线连接:

sudo nmcli con down eth0
sudo nmcli con up eth0

检查:

ip addr show eth0
ip route

如果实际有线设备名是 end0,则使用:

ip addr show end0
ip route

期望看到:

eth0 或 end0 有 192.168.150.20/24
192.168.150.0/24 dev eth0 或 end0

同时默认路由仍然应该走 Wi-Fi:

default via 192.168.0.1 dev wlan0 或 wld1

5. 笔记本直连 eth0 时怎么设置

当笔记本用网线直接连接 Orange Pi 的 eth0 时,笔记本有线网卡需要设置到同一个网段。

Orange Pi:

192.168.150.20/24

笔记本可以设置为:

IP 地址: 192.168.150.21
子网掩码: 255.255.255.0
网关: 留空
DNS: 留空

然后从笔记本 SSH:

ssh root@192.168.150.20

如果不是 root 用户,换成实际用户名:

ssh orangepi@192.168.150.20

笔记本需要设置 gateway 吗?

通常不需要。

原因是:笔记本和 Orange Pi 的 eth0 在同一个二层局域网、同一个 IP 网段里。

例如:

Orange Pi eth0: 192.168.150.20/24
笔记本有线网卡: 192.168.150.21/24

/24 表示这个网段是:

192.168.150.0 - 192.168.150.255

笔记本访问 192.168.150.20 时,会判断目标地址和自己在同一网段,因此会直接通过有线网卡发送数据,不需要经过网关。

gateway 的作用是访问“非本地网段”时使用的下一跳。

例如笔记本是:

192.168.150.21/24

它访问下面这个地址时:

192.168.150.20

这是同网段地址,不需要 gateway。

但它访问下面这个地址时:

8.8.8.8

这不是 192.168.150.0/24 网段内的地址,如果要从这块有线网卡出去,就需要 gateway。

在这个配置里,eth0 只用于笔记本直连维护,不用于上网,所以 Orange Pi 的 eth0 不设置 gateway,笔记本的直连有线网卡也可以不设置 gateway。

如果给笔记本的有线网卡乱设置 gateway,可能会导致笔记本误以为某些外网流量应该从这根直连网线出去,反而影响笔记本正常上网。

所以推荐:

Orange Pi eth0:
  IP: 192.168.150.20/24
  Gateway: 留空
  DNS: 留空

笔记本有线网卡:
  IP: 192.168.150.21/24
  Gateway: 留空
  DNS: 留空

6. 连接隐藏 Wi-Fi

如果 Wi-Fi 是隐藏 SSID,可以使用:

sudo nmcli dev wifi connect "你的隐藏SSID" password "你的WiFi密码" hidden yes

如果要指定无线网卡:

sudo nmcli dev wifi connect "你的隐藏SSID" password "你的WiFi密码" hidden yes ifname wlan0

如果实际无线设备名是 wld1,就改成:

sudo nmcli dev wifi connect "你的隐藏SSID" password "你的WiFi密码" hidden yes ifname wld1

连接成功后查看当前连接名:

nmcli con show --active

如果生成了新的 Wi-Fi 连接名,比如 sl4e,后续固定 IP 就对这个连接名操作。

7. 清理未使用的旧连接

查看所有连接:

nmcli con show

查看正在使用的连接:

nmcli con show --active

如果某个连接在 nmcli con show 里存在,但在 --active 里不存在,并且你确认不再使用,可以删除。

例如旧 Wi-Fi 连接名是 sl4

sudo nmcli con delete sl4

删除前可以先看详情:

nmcli con show sl4

Ifupdown (eth0) 通常来自 /etc/network/interfaces 的兼容配置。它当前如果显示 DEVICE--,说明没有启用。除非你确定系统已经完全交给 NetworkManager 管理,否则可以先保留,不影响当前 eth0wlan0 的使用。

8. 重启后 Wi-Fi 不自动连接的情况

有些系统重启后,网卡设备名可能变化。

例如配置时看到的是:

eth0
wlan0

重启后可能变成:

end0
wld1
wlan1

这时如果执行:

sudo nmcli con up sl4e

可能会出现类似错误:

Error: Connection activation failed: No suitable device found for this connection
device end0 not available because profile is not compatible with device
mismatching interface name

这通常不是 Wi-Fi 密码或静态 IP 配错,而是 sl4e 这个连接配置绑定了旧设备名,或者 NetworkManager 没有把它匹配到正确的无线网卡。

先查看当前真实设备名和 MAC 地址:

nmcli dev status
ip link

示例:

DEVICE         TYPE      STATE         CONNECTION
end0           ethernet  disconnected  --
wlan1          wifi      disconnected  --
wld1           wifi      disconnected  --

ip link 里可以看到 MAC 地址:

2: end0:
    link/ether 02:81:07:58:26:dd

3: wld1:
    link/ether 12:81:07:58:26:dd

4: wlan1:
    link/ether 12:81:07:58:24:dd

如果之前成功联网时 Wi-Fi 的 MAC 是:

12:81:07:58:26:dd

那对应的实际无线设备就是:

wld1

修复 Wi-Fi 连接 sl4e

查看 sl4e 当前是否绑定了旧接口名:

nmcli con show sl4e | grep -E "connection.interface-name|802-11-wireless.ssid|802-11-wireless.mac-address|802-11-wireless.hidden|connection.autoconnect"

推荐做法:不要强绑接口名,而是清空 connection.interface-name,再按 Wi-Fi MAC 地址绑定。

sudo nmcli con mod sl4e connection.interface-name ""
sudo nmcli con mod sl4e 802-11-wireless.mac-address 12:81:07:58:26:dd
sudo nmcli con mod sl4e connection.autoconnect yes
sudo nmcli con mod sl4e connection.autoconnect-priority 100
sudo nmcli con mod sl4e 802-11-wireless.hidden yes
sudo nmcli radio wifi on
sudo nmcli con up sl4e

说明:

connection.interface-name "":
  清空接口名绑定。
  这样即使 wlan0 变成 wld1,也不会因为旧设备名不存在而失败。

802-11-wireless.mac-address:
  绑定到具体无线网卡的 MAC 地址。
  这比绑定 wlan0、wld1 这种可能变化的名字更稳定。

connection.autoconnect yes:
  允许开机自动连接。

connection.autoconnect-priority 100:
  提高这个 Wi-Fi 配置的自动连接优先级。

802-11-wireless.hidden yes:
  如果 SSID 是隐藏的,需要设置这个。
  如果不是隐藏 SSID,也可以不设置。

nmcli radio wifi on:
  确保 Wi-Fi 开关是打开的。

如果需要临时指定当前无线设备名启动连接,可以使用:

sudo nmcli con up sl4e ifname wld1

但长期配置仍然建议按 MAC 绑定,而不是依赖 wld1 这个名字永远不变。

修复有线连接 eth0

如果重启后有线设备名从 eth0 变成了 end0,但连接名仍然叫 eth0,这是可以的。连接名只是配置文件名,不要求和设备名完全一致。

为了让它稳定匹配到有线网卡,可以同样清空接口名绑定,并按有线 MAC 地址绑定:

sudo nmcli con mod eth0 connection.interface-name ""
sudo nmcli con mod eth0 802-3-ethernet.mac-address 02:81:07:58:26:dd
sudo nmcli con mod eth0 connection.autoconnect yes

如果要立即启用:

sudo nmcli con up eth0

即使实际设备名是 end0,连接名仍然可以叫 eth0

检查:

nmcli con show --active
ip addr
ip route

期望状态:

sl4e 连接到实际 Wi-Fi 设备,例如 wld1
eth0 连接到实际有线设备,例如 end0
默认路由仍然走 Wi-Fi

9. 常用排查命令

查看所有网卡和 IP:

ip addr

查看无线网卡 IP:

ip addr show wlan0

查看有线网卡 IP:

ip addr show eth0

查看默认路由和网段路由:

ip route

查看 NetworkManager 所有连接:

nmcli con show

查看当前正在启用的连接:

nmcli con show --active

查看设备状态:

nmcli dev status

查看某个连接的详细配置:

nmcli con show sl4e

只看 IPv4 相关配置:

nmcli con show sl4e | grep ipv4

测试能否访问路由器:

ping 192.168.0.1

测试能否访问外网 IP:

ping 8.8.8.8

测试 DNS 是否正常:

ping www.baidu.com

10. 最终确认状态

最终推荐状态:

wlan0 或 wld1:
  192.168.0.10/24
  default via 192.168.0.1 dev wlan0 或 wld1

eth0 或 end0:
  192.168.150.20/24
  无 gateway
  无 DNS

检查命令:

ip addr show wlan0
ip addr show eth0
ip route
nmcli con show --active

如果实际设备名已经变成 wld1end0,则使用:

ip addr show wld1
ip addr show end0
ip route
nmcli con show --active

日常 SSH:

ssh root@192.168.0.10

笔记本直连维护:

ssh root@192.168.150.20
posted @ 2026-05-30 20:46  非法关键字  阅读(30)  评论(0)    收藏  举报