在 Linux 上做 DHCP 限速,通常分两种理解,下面分别说明,并给出常见做法。
DHCP 协议只负责分配 IP,不控制流量速率
所以“DHCP 限速”一般是指:
通过 DHCP 分配 IP 后,对对应客户端进行带宽限制
常见实现方式有两种:
isc-dhcp-server 分配固定 IPtc 限速# 限制 eth0 上 192.168.1.100 的速率为 1M
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:10 htb rate 1mbit ceil 1mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dst 192.168.1.100 flowid 1:10
这是下行限速(从服务器到客户端)
在 dhcpd.conf 中:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
on commit {
exec "/usr/local/bin/limit.sh", clientIP;
}
}
limit.sh 里写 tc 命令即可。
# 限制 192.168.1.0/24 总带宽
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
或更精细:
iptables -A FORWARD -s 192.168.1.0/24 -m limit --limit 100/s -j ACCEPT
适合简单粗粒度限速
dnsmasq 本身不支持限速,但可配合 tc:
dhcp-range=192.168.1.100,192.168.1.200,12h
再按 IP 写 tc 规则。
如果你是要做真正用户级限速,推荐:
| 需求 | 推荐方案 |
|---|---|
| 简单限速 | tc + DHCP |
| 自动按用户 | DHCP on commit + tc |
| 企业级 | RADIUS / 网管系统 |
| 路由器环境 | OpenWrt SQM |
如果你能告诉我:
我可以直接给你一套可复制的配置。