在 Debian 上限制 DHCP 只给特定网段(子网)分配地址,通常是通过配置 ISC DHCP Server(isc-dhcp-server) 的 /etc/dhcp/dhcpd.conf 来实现的。下面按常见场景说明。
DHCP 本身是通过 subnet 声明 来限制网段的:
subnet 中定义的网段所以“限制网段”本质是:只写你允许的 subnet,不写其他网段。
例如只允许 192.168.10.0/24:
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
}
✅ 其他网段(如 192.168.20.0/24)不写就不分配
Debian 中 DHCP 默认可能监听所有网卡,容易“乱发地址”。
编辑:
sudo nano /etc/default/isc-dhcp-server
示例(只监听 eth0):
INTERFACESv4="eth0"
然后重启:
sudo systemctl restart isc-dhcp-server
# 允许分配
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
}
# 存在但不分配地址(仅用于 OPTIONS)
subnet 192.168.20.0 netmask 255.255.255.0 {
option routers 192.168.20.1;
}
⚠️ 没有 range 的 subnet 不会分配 IP
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
}
host pc1 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.10.101;
}
class "known" {
match hardware;
}
subnet 192.168.10.0 netmask 255.255.255.0 {
pool {
range 192.168.10.100 192.168.10.200;
deny unknown clients;
}
}
如果怕 DHCP 被其他网段请求:
sudo ufw deny in on eth1 to any port 67
或 iptables:
iptables -A INPUT -i eth1 -p udp --dport 67 -j DROP
❌ subnet 写了但网卡不在该网段
❌ 多个网卡都监听 DHCP
❌ 配置文件语法错误(dhcpd -t 检查)
sudo dhcpd -t
如果你能告诉我:
isc-dhcp-server我可以给你一份可直接用的配置文件。