![在 RPi4b 上使用 netplan 和网络的 Ubuntu Server 22.04 LTS 不会为 wlan0 分配 DHCP IP](https://linux22.com/image/1073106/%E5%9C%A8%20RPi4b%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20netplan%20%E5%92%8C%E7%BD%91%E7%BB%9C%E7%9A%84%20Ubuntu%20Server%2022.04%20LTS%20%E4%B8%8D%E4%BC%9A%E4%B8%BA%20wlan0%20%E5%88%86%E9%85%8D%20DHCP%20IP.png)
在 4GB Raspberry Pi 4b 上全新安装 Ubuntu Server 22.04 LTS 并激活 PRO。在首次启动时,我没有意识到我需要等到 cloud-init 序列完成,所以我可能因为在控制台上登录得太早而搞砸了。
使用 Raspberry Pi Imager 为 Ubuntu Server 22.04 LTS 创建可启动媒体,我使用高级选项指定 Wi-Fi SSID 和密码。
服务器启动了 RPi4 的 eth0 接口,并从我的路由器获取了 DHCP 地址预留。但它无法获取内置 Broadcom Wi-Fi 接口的 IP,我需要使用该接口才能断开有线连接。
我读过 netplan 设置文章,也看过各种论坛上关于如何让 Wi-Fi 正常工作的大量帖子。在过去 4 天里,我尝试了各种方法,但无法让内置的 RPi4b Wi-Fi 接口在 Server 22.04 LTS 下正常工作。
激活 PRO 的 Ubuntu Desktop 22.04 LTS 会同时启动 eth0 和 wlan0 接口。使用 netplan 和 NetworkManager 时,这两个接口都会从我的路由器的 MAC 预留中获取 DHCP IP。
dmesg 中提到 eth0 链路已启动,但没有提到 wlan0 或 phy0。dmesg 中与无线相关的唯一几行是 cfg80211 行,其中提到已启用省电功能。
服务器 22.04 使用 netplan 和 networkd 来启动接口。以下是我尝试过但无济于事的方法。eth0 获得了 IP4,但没有为 wlan0 分配 IP。在 /etc/netplan 中,我尝试在 01-network-manager-all.yaml 中像这样同时定义两个接口。
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
wifis:
wlan0:
dhcp4: yes
access-points:
"MySSID":
password: "MyPWD"
我省略了键“optional:”。yaml 文件中是否包含该行对结果没有影响。当我为其中一个或两个接口添加该键时,“optional:”设置为“true”或“false”都没有影响。
netplan --debug try(或 generate 或 apply)表示我尝试过的配置多次都是有效的,并且没有显示任何我认为不好的东西。以下是部分输出。
starting new processing pass
wlan0: adding wifi AP 'MySSID'
We have some netdefs, pass them through a final round of validation
wlan0: setting default backend to 1
Configuration is valid
eth0: setting default backend to 1
Configuration is valid
Generating output files..
openvswitch: definition eth0 is not for us (backend 1)
NetworkManager: definition eth0 is not for us (backend 1)
Creating wpa_supplicant config
wlan0: Creating wpa_supplicant configuration file run/netplan/wpa-wlan0.conf
Creating wpa_supplicant unit /run/systemd/system/netplan-wpa-wlan0.service
Creating wpa_supplicant service enablement link
/run/systemd/system/systemd-networkd.service.wants/netplan-wpa-wlan0.service
openvswitch: definition wlan0 is not for us (backend 1)
NetworkManager: definition wlan0 is not for us (backend 1)
我查看了 wpa_supplicant 文件,看起来没问题。它有正确的 SSID 和密码。
$ sudo cat /run/netplan/wpa-wlan0.conf
ctrl_interface=/run/wpa_supplicant
network={
ssid="MySSID"
key_mgmt=WPA-PSK
psk="MyPWD"
}
我确实注意到 networkd journalctl 条目显示 eth0 获得 IP,而 wlan0 没有获得 IP。我不知道为什么没有。
$ sudo journalctl -b -u systemd-networkd
16:27:47 rpi4 systemd-networkd[775]: wlan0: Link DOWN
16:27:48 rpi4 systemd-networkd[775]: eth0: Re-configuring with /run/systemd/network/10-netplan-eth0.network
16:27:48 rpi4 systemd-networkd[775]: eth0: Failed to send DHCP RELEASE, ignoring: Stale file handle
16:27:48 rpi4 systemd-networkd[775]: eth0: DHCP lease lost
16:27:48 rpi4 systemd-networkd[775]: eth0: DHCPv6 lease lost
16:27:48 rpi4 systemd-networkd[775]: eth0: DHCPv4 address 192.168.nn.nn/24 via 192.168.nn.mm
16:27:48 rpi4 systemd-networkd[775]: wlan0: Re-configuring with /run/systemd/network/10-netplan-wlan0.network
16:27:48 rpi4 systemd-networkd[775]: wlan0: DHCPv6 lease lost
16:27:48 rpi4 systemd-networkd[775]: wlan0: Link UP
除了 Name= 和 RouteMetric 之外,10-netplan-eth0.network 和 10-netplan-wlan0.network 文件看起来完全相同。
$ sudo iw wlan0 info
Interface wlan0
ifindex 3
wdev 0x1
addr dc:a6:32:85:nn:mm
type managed
wiphy 0
channel 116 (5580 MHz), width: 20 MHz, center1: 5580 MHz
txpower 31.00 dBm
$ sudo iwconfig wlan0
wlan0 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
我尝试了一个包含 wifi 行但不包含以太网行的 NetPlan yaml 文件。eth0 仍然工作正常,但仍然没有为 wlan0 分配 IP。这就是我得到的全部结果。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:nn:nn:nn brd ff:ff:ff:ff:ff:ff
inet 192.168.nn.nn/24 metric 100 brd 192.168.nn.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::dea6:xxxx:xxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether dc:a6:32:nn:nn:mm brd ff:ff:ff:ff:ff:ff
我尝试了另一个建议,只使用
network:
version: 2
renderer: networkd
eth0 已启用 DHCP IP,但没有为 wlan0 分配 IP。
此时我已经没有其他选择,因此我希望能够帮助将适用于桌面的 Wi-Fi 应用于服务器。