首页主机资讯CentOS Sniffer如何实现流量控制

CentOS Sniffer如何实现流量控制

时间2025-12-20 00:39:04发布访客分类主机资讯浏览683
导读:在 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):
    # 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
    
    说明:上述出方向使用 HTB 实现多速率与优先级;入方向通过 ingress policer 丢包来“限入”。若需更复杂的入方向整形,通常在网关上游或本机做 ifb 伪设备配合 HTB 实现。

方案二 按进程限速(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/wslu
    
    提示:先用 ldd /usr/bin/your_app | grep libc.so 检查是否使用 libc.so,否则 trickle 不会生效。

方案三 一键接口限速(wondershaper)

  • 适用:快速为某网卡设置下载/上传上限,并保持交互会话低延迟。
  • 原理:wondershaper 是封装了 tc 的脚本,出方向用队列整形,入方向通过丢包近似限速。
  • 示例(网卡 eth0,下载 1024 Kbps,上传 512 Kbps;清除限速用 clear):
    # 安装(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
    
    说明:wondershaper 适合“快速落地”,如需细粒度策略(多用户/多业务/优先级),建议直接使用 TC 手工编排。

验证与排错

  • 查看与清理规则:
    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
CentOS Sniffer能检测到哪些网络攻击 CentOS Sniffer怎样分析网络数据

游客 回复需填写必要信息