Raspberry Pi 4B ISC DHCP 服务器

Raspberry Pi 4B ISC DHCP 服务器

我一直在 Raspberry Pi 4B 最新 Buster 版本上运行 ISC DHCP 服务器,该服务器具有静态 IP,可充当家庭网络上的网关、DHCP、DNS 和 IDS/IPS 服务器。按照在线文档,经过短暂的努力,我能够安装、设置并启动并运行它。

在此过程中,我还发现了 ISC DHCP 服务器中的一个错误,如果存在现有的 DHCPD,该错误会导致它无法启动(这里并相当雄辩地描述这里) 文件位于 /run/dhcpd.pid 中。每次我测试它时,我都必须删除 /run/dhcpd.pid 文件,然后它才能正常工作。

昨晚我经历了最糟糕的时刻,由于短暂的断电,整个网络基础设施必须重新启动(仅路由器、AP 和 Pi)。由于路由器上的 DHCP 被禁用,其他机器没有有效的 IP,在短时间内,直到我能够在某些设备上设置静态 IP,我的网络基本上是无用的。由于 Pi 是无头操作的,我不得不谷歌搜索并找到一种通过 LAN 将 Pi 直接连接到我的计算机的方法,然后使用 SSH 进行弥补。

我做的第一件事是尝试查看为什么静态 IP 设置不起作用。是什么导致 Pi 无法通过网络访问?除了 ISC DHCP 服务器无法启动,这可能导致 Pi 无法通过网络识别,我找不到一个明显的答案?考虑到我在网络接口文件中设置了静态 IP,这对我来说仍然没有多大意义。

除非我将 DHCP 控制移回路由器,否则该设备将无法通过网络访问。

然后我开始尝试在启动时运行一个脚本,该脚本首先终止 DHCP 进程,删除 /run/dhcpd.pid 文件,然后重新启动 dhcpd 服务。

shell 脚本和服务文件如下所示:

    /usr/bin/dhcpdrelease.sh
    
    #!/bin/sh
    set -e
    set echo off
    #sudo killall dhcpcd 
    #sudo rm -rf /run/dhcpd.pid 
    #sudo service isc-dhcp-server restart &
    
    
    chmod u+x /usr/bin/dhcpdrelease.sh
    
    /etc/systemd/system/dhcprelease.service

    [Unit]
    Description=DHCPD Release
    After=network.target
    RequiresMountsFor=/usr/bin/    
    
    [Service]
    ExecStart=/usr/bin/dhcpdrelease.sh
    
    [Install]
    WantedBy=multi-user.target
    
    sudo systemctl start dhcprelease
    sudo systemctl enable dhcprelease

这又没有效果。 Pi 再次无法通过网络访问,促使我再次通过 LAN、SSH 连接它并注释掉 shell 脚本。

我对 Unix 最多只是个业余爱好者,不知道 DHCP 守护进程在 Unix/Pi OS 中如何运行,也不了解在启动时运行此类脚本的最佳方法是什么。

我只是想在重启时自动执行以下操作:

  1. 设备具有有效 IP 并且可通过网络访问/ping 通
  2. 删除 dhcp.pid 文件
  3. 重新启动ISC DHCP服务

如果发生电源循环,我不可能让整个网络瘫痪。

我希望路由器只处理 wifi 和互联网连接接口,同时将大部分功能委托给 Pi。现在,我已将 DHCP 控制权恢复给路由器,同时仅将 DNS 委托给 Pi。网络接口文件已恢复为从路由器获取动态 IP。IDS 在此框架内运行,因此它不一定是最有效的。我希望 Pi 成为网络的网关。

我强烈怀疑 DHCP 服务是罪魁祸首,但我承认我对如何解决这个问题几乎一无所知。

答案1

实际上不能将其称为“答案”,因为该错误尚未解决并且阻止人们获得“不受管理”的体验。

我刚刚安装了 Pi-Hole 并将 DNS 和 DHCP 服务器合二为一。

然而,昨天在我反复试验的过程中,网络问题发生了有趣的转变。我注意到,当接口文件中强制执行静态 IP 代码时,接口会出现严重问题。我意识到这一点的原因是,我有一个外部 Wi-Fi 适配器连接到 USB 端口,但它没有显示任何开机迹象。然后,我继续注释掉网络接口文件中的静态 IP 强制执行,只使用 /etc/dhcpd.conf。这似乎很基本,甚至很明显,但网络接口文件有明确的指示来处理后者中的静态 IP。我设置了它,重新启动,然后就好了!

“休斯顿,这里是宁静号基地。Pi 已经降落。”

相关内容