DHCP 客户端在 Raspbian 上不断停止

DHCP 客户端在 Raspbian 上不断停止

在我的 rasbperry pi(4b 8GB 版本)上,DHCP 似乎总是随机停止。我可以从终端(sudo dhcpcd)重新启动它,它工作正常一段时间,然后它再次停止。可能是什么原因造成的?我该如何解决?

为了澄清我如何确定 DHCPCD 不再运行:

  • Wifi 选择不可用,显示“dhcpcd 未运行”
  • HTOP 没有列出 DHCPCD 进程,即使以 root 身份运行也是如此
  • dhcpcd -y 0不执行任何操作(通常它会重新启动 DHCPCD),但运行sudo dhcpcd似乎会启动它并允许我连接到 wifi
  • 一旦出现这种“崩溃”行为,任何需要 wifi 的东西(SSH、xrdp-VNC 和 Samba)都会立即停止运行

发行版:Raspbian OS 10(基于 Debian Stretch,我相信)
DHCPCD 版本:8.1.2
编译功能:INET ARP ARPing IPv4LL INET6 HHCPv6 AUTH
我根本没有修改配置文件,这是 Raspbian 的全新安装

最后 16 行日志(主机名已在这里被审查): Jun 14 19:16:46 sk*****berry dhcpcd[10428]: wlan0: hardware address 00:00:00:00:00:00 Claims 192.168。 0.230
Jun 14 19:17:06 sk******berry dhcpcd[10428]: wlan0: 硬件地址 00:00:00:00:00:00 声明 192.168.0.230
(以上行重复了 11 次)
Jun 14 19:41:26 sk*****berry dhcpcd[10428]: wlan0: 192.168.0.23 Jun 14 19:41:26 sk******berry dhcpcd[10428]: wlan0: 10 第二次防御失败删除到 192.168.0.0/24 的路由
Jun 14 19:41:26 sk********berry dhcpcd[10428]: wlan0: 通过 192.168.0.1 删除默认路由

答案1

你说,“DHCP 似乎总是随机停止”,但你没有说你如何确定它正在“停止”。我怀疑它根本没有停止,但它确实停止了forking to run in the background(参考man dhcpcd)。您可以确认(或否认)如下:

检查systemd日志并journalctl滚动到寻呼机底部以查找最新条目:

journalctl --unit=dhcpcd | less

... [scroll to end of pager ...]

-- Boot 5687a151f68246acbe8c6bd12cd0798e --
Jun 09 09:52:46 raspberrypi3b systemd[1]: Starting DHCP Client Daemon...
Jun 09 09:52:46 raspberrypi3b dhcpcd[374]: dev: loaded udev
Jun 09 09:52:46 raspberrypi3b dhcpcd[465]: wlan0: starting wpa_supplicant
Jun 09 09:52:46 raspberrypi3b dhcpcd-run-hooks[479]: wlan0: starting wpa_supplicant
Jun 09 09:52:47 raspberrypi3b dhcpcd[374]: wlan0: connected to Access Point `'
Jun 09 09:52:47 raspberrypi3b dhcpcd[374]: eth0: waiting for carrier
Jun 09 09:52:47 raspberrypi3b dhcpcd[374]: wlan0: waiting for carrier
Jun 09 09:52:53 raspberrypi3b dhcpcd[374]: wlan0: carrier acquired
Jun 09 09:52:53 raspberrypi3b dhcpcd[374]: wlan0: connected to Access Point `Mesh01'
Jun 09 09:52:53 raspberrypi3b dhcpcd[374]: wlan0: soliciting a DHCP lease (requesting 192.168.1.143)
Jun 09 09:52:53 raspberrypi3b dhcpcd[374]: wlan0: offered 192.168.1.143 from 192.168.1.1
Jun 09 09:52:53 raspberrypi3b dhcpcd[374]: wlan0: probing address 192.168.1.143/24
Jun 09 09:52:58 raspberrypi3b dhcpcd[374]: wlan0: leased 192.168.1.143 for 7200 seconds
Jun 09 09:52:58 raspberrypi3b dhcpcd[374]: wlan0: adding route to 192.168.1.0/24
Jun 09 09:52:58 raspberrypi3b dhcpcd[374]: wlan0: adding default route via 192.168.1.1
Jun 09 09:52:58 raspberrypi3b dhcpcd[374]: forked to background, child pid 606
Jun 09 09:52:58 raspberrypi3b systemd[1]: Started DHCP Client Daemon.

上面的序列显示了dhcpcd自上次启动以来记录的内容 - 即典型的根据dhcpcd我的经验。

注意条目forked to background, child pid 606

检查PID:

$ ps -p606 -o comm,unit,stat
COMMAND         UNIT                            STAT
dhcpcd          dhcpcd.service                  Ss
$

它是

现在——如果你不要 dhcpcd要分叉到后台,您可以使用-B, --nobackground选项(同样, ref man dhcpcd)在前台运行它。但是:您现在应该知道ps上面命令的输出dhcpcd是由systemd(即 RPi 的在里面system),默认情况下它在引导过程中启动。您可以安全地忽略有关该实用程序的任何评论默认 /etc/dhcpcd.conf;在在大多数情况下dhcpcd在默认配置下运行得很好。

答案2

Jun 14 19:16:46 sk******berry dhcpcd[10428]: wlan0: hardware address 00:00:00:00:00:00 claims 192.168.0.230
Jun 14 19:17:06 sk******berry dhcpcd[10428]: wlan0: hardware address 00:00:00:00:00:00 claims 192.168.0.230
(above line repeated 11 more times)

您的无线网络中可能存在故障设备,导致 IP 地址冲突。或者您的无线网络可能受到攻击。

我还没有尝试过dhcpcd在 IP 地址劫持攻击下实际反应如何,但在我看来,它可能看起来很像这样。

你的dhcpcd 显然正在检测其他一些主机(显然声称其硬件地址是00:00:00:00:00:00,这本身就有些可疑)声称拥有与该系统当时使用的相同的 IP 地址。

dhcpcd试图捍卫自己对 IP 地址的主张,但对方并没有让步。在存在 IP 地址冲突的情况下尝试继续是徒劳的,因此dhcpcd请退缩。

重复地址检测代码dhcpcd显然是根据链接本地地址(IPV4LL:169.254.0.0/16)编写的,但它是在您的常规 IP 地址上触发的。也许这就是导致dhcpcd退出而不是尝试从 DHCP 服务器获取新 IP 地址的原因。

您可能需要确保您的无线网络使用 WPA2 或更好的保护,并将网络密码更改为不易猜测的密码;也许 WiFi 范围内的邻居已经知道了当前密码,并且现在“试图像电视中的机器人先生一样破解你”。

相关内容