
在我的 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 范围内的邻居已经知道了当前密码,并且现在“试图像电视中的机器人先生一样破解你”。