我目前正在使用 Raspberry Pi Zero W 开发一个便携式无头项目,我在该项目上安装了 Arch Linux,并且目前正在使用 systemd-networkd 将其无线连接到我的家庭路由器。我希望能够让它自动连接到优先的 SSID 对,每个 SSID 使用不同的静态 IP,适用于以下用例:
当我在外面使用它时,我需要它使用静态 IP 自动连接到我的 Android 设备的无线热点(以便我可以轻松地从手机通过 SSH 或 VNC 连接到它)。
当我在家时,我还需要能够从我的家庭 LAN 通过 SSH 进入它来执行管理,同样使用静态 IP 以方便 SSH 访问。
然而,当我在家时,我还需要能够将其连接到我的手机以进行测试,并根据我的 Android 热点是否存在自动在 SSID 之间切换。
更复杂的是,我的家庭路由器使用与 Android 手机不同的 IP 范围,因此两个连接上的静态 IP 需要不同。
理想情况下,我需要 Pi 按如下方式工作:
- 如果它检测到我的 Android 热点的 SSID,它将使用特定于该 SSID 的静态 IP 地址专门连接到该热点
- 如果它没有检测到我的 Android 热点的 SSID,它将尝试使用不同的静态 IP 连接到我的家庭 Wifi SSID
这意味着我可以在家里使用手机测试 Pi,只需打开手机的热点,并且可以通过关闭热点使用家用 PC 来管理它。
有谁知道我怎样才能实现这一目标?
答案1
最后弄清楚了如何使用 nmcli 来使用网络管理器来做到这一点。设置两个配置文件如下:
nmcli con add con-name "[Connection Name]" ifname wlan0 type wifi ssid "[SSID]"
ip4 [Static IP Address]/24 gw4 [Default Gateway]
nmcli con mod "[Connection Name]" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod "[Connection Name]" wifi-sec.key-mgmt wpa-psk
nmcli con mod "[Connection Name]" wifi-sec.psk [Passkey]
nmcli con mod "[Connection Name]" connection.autoconnect-priority 0
确保我的手机 wifi 连接具有比我的家庭 wifi 更高的自动连接优先级。然后把两个连接都放上
nmcli con up "[Connection Name]"
然后网络管理器会根据优先级然后可用性自动决定使用哪个。要从家庭 wifi 切换到手机 wifi,我打开手机热点并重新启动 NetworkManager 服务;为了再次切换回来,我关闭了手机的热点。