Debian Sniffer带宽限制的正确做法
概念澄清
“Sniffer”通常指用于抓包与分析的工具(如tcpdump、Wireshark/dumpcap),它们不具备带宽限制或整形能力。若需要限速,应使用 Linux 内核的**流量控制(Traffic Control,tc)**等机制;抓包工具仅用于监控与验证效果。
使用 tc 进行出口限速 HTB
以下示例将接口eth0的出口带宽限制为1 Mbps,并演示按源 IP 分流与查看、清理命令。请将 eth0 替换为你的实际接口名。
- 安装工具(通常已预装):sudo apt-get install -y iproute2
- 设置 HTB 根队列与默认类
- sudo tc qdisc add dev eth0 root handle 1: htb default 30
- sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
- 按源 IP 分流示例(将 192.168.1.100 的流量限速到 512 kbps)
- sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbit ceil 1mbit
- sudo tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip src 192.168.1.100 flowid 1:10
- 查看与清理
- 查看:tc -s qdisc ls dev eth0;tc -s class ls dev eth0;tc -s filter ls dev eth0
- 清理:sudo tc qdisc del dev eth0 root
说明:HTB 使用令牌桶思想,rate 为保底带宽,ceil 为峰值带宽,适合做出口限速与分级。
限制入口带宽 Police
入口限速通过ingress伪队列配合策略(police)丢弃超速率报文,示例将下载限速为1 Mbps:
- 添加 ingress 队列:sudo tc qdisc add dev eth0 ingress
- 对目的地址为任意的流量应用限速策略(丢弃超速率):sudo tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 0.0.0.0/0 police rate 1mbit burst 15k drop flowid :1
- 查看与清理:tc -s filter ls dev eth0;sudo tc qdisc del dev eth0 ingress
提示:ingress 不支持整形队列(如 HTB),只能丢弃或标记;如需更平滑的入口整形,通常需在网关/上游设备处理。
按进程或端口限速的替代方案
- 使用 nftables 的 limit 模块按规则限速(示例为对 OUTPUT 链限速为1 Mbps,突发10 kb)
- sudo apt-get install -y nftables
- sudo nft add table ip filter
- sudo nft add chain ip filter output ‘{ type filter hook output priority 0; }’
- sudo nft add rule ip filter output limit rate 1mbit burst 10kb
- 按进程定位与治理:结合 nethogs 观察进程带宽,再决定是否用 nftables/tc 针对对应端口或 IP 限速
- sudo apt-get install -y nethogs
- sudo nethogs eth0
说明:nftables 的 limit 规则简单有效,适合快速限速;复杂分级与整形仍以 tc 为佳。
验证与注意事项
- 验证:限速生效后,可用 iftop、nload、vnstat 等工具观察带宽变化,确认是否达到预期的1 Mbps等目标速率。
- 注意:
- 抓包工具(如 tcpdump/dumpcap)仅用于监控,不能限速;限速应使用 tc/nftables。
- 执行 tc 需要管理员权限;在生产环境变更前建议先备份现有队列规则。
- 进行网络抓包与限速需确保合法授权与合规,避免侵犯隐私或违反策略。