在开始前,确认你的香港 CN2 VPS 系统(例如 Debian/Ubuntu/CentOS)内核支持 qdisc(tc)。准备工具:iperf3(测速)、tc(traffic control)、iftop/bmon(实时监控)、vnstat(流量统计)、netdata 或 node_exporter+Prometheus(监控告警)。示例安装:apt update && apt install -y iperf3 iproute2 iftop vnstat netdata。
步骤:1) 启动 vnstat:vnstat -u -i eth0(初始化),systemctl enable --now vnstat;2) 用 iftop 查看实时会话:iftop -i eth0 -P;3) 部署 netdata:bash <(curl -Ss https://my-netdata.io/kickstart.sh)。通过这些可以快速定位 CPU、网络突发或连接数问题。
用 iperf3 测试上行/下行到目标测试点:在目标服务器运行 iperf3 -s,在 VPS 上运行 iperf3 -c
示例场景:总带宽 100Mbps,给某个端口/用户限速至 10Mbps。操作步骤:1) 清理旧规则:tc qdisc del dev eth0 root || true;2) 创建根 qdisc:tc qdisc add dev eth0 root handle 1: htb default 30;3) 添加根 class:tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit;4) 添加子 class:tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit ceil 10mbit;5) 用 u32 或 fw 来匹配流量:tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10(示例按端口限速)。
步骤:1) 标记流量:iptables -t mangle -A PREROUTING -s 1.2.3.4 -j MARK --set-mark 10;2) 在 tc 中用 fw 过滤:tc filter add dev eth0 parent 1:0 protocol ip handle 10 fw flowid 1:10;这样能按来源 IP 或端口精确分配带宽,便于对 VIP 客户或异常 IP 做限流。
为减少延迟和缓冲区膨胀(bufferbloat),在 root qdisc 前加上 fq_codel:tc qdisc add dev eth0 root fq_codel。或者把 fq_codel 与 HTB 组合,先 HTB 分配带宽再对各 class 使用 fq_codel 做公平队列,命令细节按系统内核版本调整。
把基础 tc/iptables 规则写成 shell 脚本并放在 /usr/local/bin/limit_net.sh,开机用 systemd 启动:创建 /etc/systemd/system/limit_net.service,ExecStart=/usr/local/bin/limit_net.sh,Restart=on-failure。脚本内先清理再创建规则,避免多次运行冲突。
将 vnstat/iftop 的关键信息接入 netdata 或 Prometheus。用 netdata 的告警模板或 Prometheus+Alertmanager 设置阈值:例如 1 分钟内出口带宽 > 90% 或丢包率 > 1% 触发告警,并自动调用脚本降低某 class 带宽或封禁异常 IP。
每次改规则后做回归:1) 用 iperf3 多流并发测试目标 IP,看限速是否生效;2) 用 tc -s qdisc/class 查看字节计数确认流量被匹配;3) 恢复策略测试:手动触发告警脚本,观察 systemd 是否能自动恢复并记录日志。
如果出现总带宽无法到达预期或延迟升高:1) 检查内核 qdisc 支持:lsmod | grep sch_,必要时编译内核模块;2) 查看 tc -s qdisc/class 数据,确认流量是否落入正确 class;3) 检查 iptables mangle 表是否生效:iptables -t mangle -L -n -v;4) 若是 CN2 路由问题,用 traceroute/ mtr 定位到运营商链路瓶颈。
问:遇到短时 DDoS 或某个业务突发流量,如何快速在 CN2 VPS 上应急限流?
答:先用 iptables 在 mangle 表标记高流量源并在 tc 上把对应 mark 指向低速 class;若流量太大可临时封掉源 IP:iptables -I INPUT -s X.X.X.X -j DROP。结合 netdata 告警自动触发脚本可实现分钟级响应。
问:提供游戏或视频加速服务时,如何在 HTB 策略里兼顾带宽与延迟?
答:给延迟敏感流量(UDP 或特定端口)分配保证带宽(min rate)同时使用 fq_codel 减少排队延迟;将非关键下载类流量放在低优先级 class,设置较低 ceil,避免抢占延迟敏感流量。
问:实施带宽和负载策略后,如何做长期效果评估?
答:持续收集 netdata/Prometheus 指标(带宽、丢包、TCP重传、延迟),每周生成报告并与变更前的 iperf/用户体验数据对比;根据趋势调整 class rate 与告警阈值,保持策略动态优化。