我正在使用 rhel 8 设置防火墙/网关路由器。我有一个带有两个 NICS 的服务器,一个面向公众,它是一个 dhcp 客户端,第二个 NIC 将面向内部。第一个 NIC 是公共区域,第二个 NIC 是内部区域。我想让面向内部的 NIC 成为内部客户端的 DHCP 服务器。
我需要阻止我的 DHCP 服务器在公共区域接收 DHCP 请求。
问题:您能否将 dhcp 配置为仅用于特定 NIC 的服务器,或者您是否使用防火墙规则来管理它以阻止来自公共区域的所有 DHCP?设置这样的多功能网关时有什么好的做法?
在 RHEL 8 中,
dhcpd.service
使用命令行$DHCPDARGS
上的变量:ExecStart=
但是定义这样一个变量的环境文件
/etc/sysconfig/dhcpd
有一个警告,告诉你不要再使用那个文件了:因此,显然 RHEL 8 的 ISC dhcpd 已被修补,以根据其配置文件是否包含接口的子网声明来选择要侦听的接口。如果特定接口没有子网声明,则不应响应该接口。
由于 DHCP 协议在 IPv4 上的工作方式,
dhcpd
需要使用原始套接字(以便能够接收源地址为 0.0.0.0 和目标地址为 255.255.255.255 的广播数据包,并且还可以不受限制地发送到 255.255.255.255通过普通的 IPv4 路由),因此无论如何它都需要更仔细地处理其传入的数据包。因为
dhcpd
使用原始套接字,所以它也不受iptables
防火墙的影响。如果您仍然希望在命令行中添加接口名称,您可以
cp /lib/systemd/system/dhcpd.service /etc/systemd/system/
然后在 中修改版本/etc/systemd/system
,或者仅用于systemctl edit dhcpd.service
创建覆盖文件。当然,您需要记住服务文件可能有多ExecStart=
行,因此为了覆盖现有行而不是仅仅添加另一行,您将运行systemctl edit dhcpd.service
并输入三行:第一个空
ExecStart=
行告诉 systemd 您要覆盖ExecStart
服务文件中的现有定义,而不是添加第二个定义。如果使用
cp /lib/systemd/system/dhcpd.service /etc/systemd/system/
策略,记得systemctl daemon-reload
修改/etc/systemd/system/dhcpd.service
文件后运行。如果您使用
systemctl edit dhcpd.service
,它将systemctl daemon-reload
自动为您运行等效的 。这取决于您使用的是哪个特定的 dhcp 守护程序,但是可以,可以配置 dhcp 守护程序以根据 dhcp/bootp 请求来自哪个接口给出不同的答案,或者运行 dhcpd 的多个实例,每个实例都配置为只听一个接口。
在您的情况下,听起来您只想告诉您的 dhcpd 仅在您的私有 LAN 接口上侦听。如果您使用的是 ISC dhcpd,则只需将您希望它侦听的接口的名称添加到 dhcpd 命令行即可。
例如,在我的系统上,我希望 dhcpd 仅在我的无线
wifi0
(br0