我想在我尝试之前确定这会起作用,因为我正在处理一个只能通过 SSH 访问的无头 Pi(如果重要,为零 W)。
我已经在我的路由器中为 Pi 设置了地址保留,这或多或少是必不可少的,既可以简化通过 Putty 的访问,也可以访问在 Pi 上运行的自定义服务器。
问题是最初没有预留,所以它在池中的某个其他随机地址,而不是我为它预留的“非池”区域中的固定地址。耐心并没有解决这个问题:它已经坚定地坚持这个地址好几天了,而不是改变。我假设这里的路由器中的 DHCP 服务器有一个合理的租期,例如 12 或 24 小时。
显然,如果我只是dhclient -r
用来释放租约,我当前的 SSH 会话将中止,留下东西是一个不太有用的状态。我还注意到,如果您dhclient -r
有可能导致 WiFi 连接中断:请参阅本页底部的警告以了解详细信息。
那么,nohup (dhclient -r -d && dhclient) &
键入 root bash 会话的可能性有多大(a)终止当前租约,然后(b)在需要时尝试重新打开 WiFi,最后(c)获得新租约,希望使用正确的地址.
我的理由是 using意味着当 SSH 会话向南时nohup
它不会收到 a ,并且将它放在后台的子 shell 中意味着它最有可能执行两个命令。SIGHUP
我考虑过的另一个选项是nohup (dhclient -r && reboot) &
在 root bash 会话中,其中的逻辑是重新启动系统应该重新建立 WiFi 连接,然后 ping DHCP 服务器以获取地址。希望保留一个。
如果这两个都失败,我还有哪些其他选择可以释放和更新租约,并在首选地址连接到 WiFi 的运行系统完成?作为最后的手段,我可以看看我是否能弄清楚如何连接屏幕和键盘,但我真的不想这样做,这将是一个相当大的痛苦。
免责声明:我无法对其进行测试,但由于只有最后一个可选步骤会更改任何永久配置,因此可能发生的更糟糕的情况是必须重置系统。
为了说明起见,我们假设:
一切都应该以root用户身份运行。该方法将是:
添加一个带有保留地址的静态 IP 地址:既然它是保留的,谁在乎呢?
在接口上启用
promote_secondaries
(否则当 IP LAN 上配置的第一个地址被删除时,同一 IP LAN 中的所有其他地址也将被删除:新地址也会被删除)或者:
使用新地址连接
并再次成为根。从现在开始,在根 shell 上从新连接开始。
SIGKILL DHCP 客户端,以确保它在被杀死时不能做任何事情(比如关闭接口)。
目前尚不清楚
dhclient
,dhcpcd
,udhcpc
, 是否还有其他 DHCP 客户端正在使用,或者即使一个仍在运行(一些最小配置可能只获得一次 IP 地址并退出,而根本不处理租约续订或到期)。或者
等等
或者如果没有
pkill
命令,找出要杀死的 PID(使用kill -KILL ...
)。确保从现在开始没有客户端在运行,这一点很重要。
手动删除较旧的地址(将较新的地址提升为主要地址,而不是也被删除)
可选:如果需要,将配置更新为静态地址,或者什么都不做
由于它与 RaspberryPi Zero W 相关,我不知道如何执行这最后一步(它可以使用 Debian 的ifupdown并进行配置
/etc/network/interfaces
或进行不同的配置)。但是无论如何都没有任何改变,在下一次(重新)启动时,这将采用具有这个新 IP 地址的新租约,或者如果确实有一个错误恢复到旧的。如果 DHCP 由 处理
dhclient
,则通过删除其中的相关文件来擦除租用内存/var/lib/dhcp/dhclient*.leases
应该会强制它下次请求新的租用。因为dhcpcd
那可能是/var/lib/dhcpcd/*.lease