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。连接名可以继续叫 eth0 或 sl4e,但连接配置不能错误地强绑定到一个已经不存在的设备名。
示例:
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 管理,否则可以先保留,不影响当前 eth0 和 wlan0 的使用。
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
如果实际设备名已经变成 wld1 和 end0,则使用:
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

浙公网安备 33010602011771号