温馨提示×

linux dhcp如何限速

小樊
35
2026-09-21 23:11:10
栏目: 智能运维

在 Linux 上“DHCP 限速”通常指两种场景,需要区分清楚:

  1. ** DHCP 只负责分配 IP,不直接限速 **
    DHCP 本身(isc-dhcp / dnsmasq)不能限制带宽,只能分配 IP、网关、DNS。

  2. ** 真正限速要在“网关/网桥/接口”上做 **
    常见做法:DHCP + tc / iptables / nftables / dnsmasq 限速插件。

下面按常见方案说明。


一、用 dnsmasq 做“简单限速”(最常用)

如果你用 dnsmasq 作为 DHCP 服务器,它可以配合 tc 或自身限制。

1️⃣ dnsmasq + tc(推荐)

(1)dnsmasq 分配固定 IP

# /etc/dnsmasq.conf
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.1.100,limit-pc

(2)使用 tc 限速(例子:限制 1Mbit)

# 限制 192.168.1.100 上行/下行
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

⚠️ 缺点:IP 固定才好限,动态 IP 要脚本配合。


二、DHCP + iptables + tc(动态用户)

适合“每个 DHCP 客户端都限速”。

思路

  1. DHCP 分配 IP
  2. 在 DHCP 脚本里自动加 tc 规则
  3. 租约到期删除规则

isc-dhcp 示例

# /etc/dhcp/dhcpd.conf
on commit {
    execute("/usr/local/bin/limit.sh", clientip);
}
#!/bin/bash
# limit.sh
tc class add dev eth0 parent 1: classid 1:${RANDOM} htb rate 2mbit
tc filter add dev eth0 u32 match ip dst $1 flowid 1:${RANDOM}

三、用 systemd + nftables(现代方案)

table inet filter {
    chain forward {
        type filter hook forward priority 0;
        ip saddr 192.168.1.0/24 limit rate 2 mbytes/second accept
    }
}

配合 DHCP 固定地址效果最好。


四、OpenWrt / 路由器场景(最简单)

如果你是用 OpenWrt:

  • DHCP:LuCI → Network → DHCP
  • 限速:LuCI → Network → SQM / QoS

✅ 最简单,不需要命令行


五、总结建议

场景 推荐方案
家庭/小公司 dnsmasq + tc
动态客户端 DHCP 脚本 + tc
路由器 OpenWrt SQM
企业 交换机/防火墙限速

如果你能告诉我:

  • 用的 哪个 DHCP(dnsmasq / isc-dhcp)
  • Linux 是 服务器 / 路由器 / 虚拟机
  • 想限 上行 / 下行 / 总带宽

我可以直接给你一份可复制的配置。

0 踩