CentOS Sniffer如何实现流量控制
导读:在 CentOS 上实现流量控制的思路与工具 在 Linux 环境中,嗅探工具(如 tcpdump、tshark、iftop、nethogs)负责“看见”流量;真正的“控制”需要借助内核的 TC(Traffic Control) 框架或用户...
在 CentOS 上实现流量控制的思路与工具
在 Linux 环境中,嗅探工具(如 tcpdump、tshark、iftop、nethogs)负责“看见”流量;真正的“控制”需要借助内核的 TC(Traffic Control) 框架或用户态工具(如 trickle、wondershaper)。TC 以 qdisc/class/filter 的树形结构实现限速、整形与优先级;需要注意的是,TC 主要作用于发送队列,通常“控发不控收”,下载侧限速常需借助 ingress 过滤或上游设备配合。若你是网关/NAT 场景,还需开启 IP 转发 并结合 iptables mangle/fwmark 做策略分流。
方案一 接口级限速与整形(TC + HTB)
- 适用:对服务器某网卡的整体出/入方向设定带宽上限与优先级,保持交互会话低延迟。
- 思路:在网卡上创建 HTB 根,划分多个 class(不同速率),用 sfq 做公平排队,配合 iptables fwmark + tc filter 将流量导入对应 class。
- 示例(出方向 eth0 限速 10Mbit,保留 1Mbit 应急带宽;入方向 eth1 对 192.168.0.10 限速 2Mbit):
说明:上述出方向使用 HTB 实现多速率与优先级;入方向通过 ingress policer 丢包来“限入”。若需更复杂的入方向整形,通常在网关上游或本机做 ifb 伪设备配合 HTB 实现。# 1) 出方向 eth0:整体 10M,保留 1M 应急,按 class 整形 tc qdisc del dev eth0 root 2> /dev/null tc qdisc add dev eth0 root handle 1: htb default 30 tc class add dev eth0 parent 1: classid 1:1 htb rate 10Mbit ceil 10Mbit tc class add dev eth0 parent 1:1 classid 1:10 htb rate 8Mbit ceil 9Mbit prio 0 tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1Mbit ceil 1Mbit prio 1 tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10 # 将某业务(示例:源 IP 192.168.0.10)打标并导入 class 1:20 iptables -t mangle -I PREROUTING -s 192.168.0.10 -j MARK --set-mark 0x20 tc filter add dev eth0 parent 1: protocol ip prio 1 handle 0x20 fw classid 1:20 # 2) 入方向 eth1:对 192.168.0.10 限速 2Mbit(ingress 不能直接“整形”,用 policer 丢包近似限速) tc qdisc del dev eth1 ingress 2> /dev/null tc qdisc add dev eth1 handle ffff: ingress tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \ match ip src 192.168.0.10/32 \ police rate 2Mbit burst 10k drop \ flowid :1
方案二 按进程限速(trickle)
- 适用:只想限制某个应用的上传/下载速率,且该程序使用 glibc 的动态链接。
- 特点:用户态实现、无需 root 即可限制进程;对 UDP 与静态链接程序无效。
- 示例(将 scp 上传限速为 100 KB/s):
提示:先用# 安装(EPEL) sudo yum install -y epel-release sudo yum install -y trickle # 限制命令 trickle -u 100 scp backup.tgz alice@192.168.4.93:/home/wsluldd /usr/bin/your_app | grep libc.so检查是否使用 libc.so,否则 trickle 不会生效。
方案三 一键接口限速(wondershaper)
- 适用:快速为某网卡设置下载/上传上限,并保持交互会话低延迟。
- 原理:wondershaper 是封装了 tc 的脚本,出方向用队列整形,入方向通过丢包近似限速。
- 示例(网卡 eth0,下载 1024 Kbps,上传 512 Kbps;清除限速用 clear):
说明:wondershaper 适合“快速落地”,如需细粒度策略(多用户/多业务/优先级),建议直接使用 TC 手工编排。# 安装(EPEL) sudo yum install -y epel-release sudo yum install -y wondershaper # 设置限速 sudo wondershaper -a eth0 -d 1024 -u 512 # 清除限速 sudo wondershaper -a eth0 -c # 或 sudo wondershaper clear eth0
验证与排错
- 查看与清理规则:
tc -s qdisc ls dev eth0 tc -s class ls dev eth0 tc filter show dev eth0 tc qdisc del dev eth0 root tc qdisc del dev eth1 ingress - 实时观测带宽:
sudo yum install -y iftop nethogs sudo iftop -i eth0 sudo nethogs eth0 - 常见注意点:
- TC 主要“控发不控收”,入方向限速多用 ingress policer 或上游配合;
- 作为网关/NAT 时需开启 net.ipv4.ip_forward=1 并正确配置 SNAT;
- 多业务分流优先用 iptables mangle + fwmark + tc filter,便于维护与扩展。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Sniffer如何实现流量控制
本文地址: https://pptw.com/jishu/776863.html
