1.
评估与准备:确认“128m”含义与VPS环境
在开始之前,先确认128m是指128Mbps还是128MB/s(通常是128Mbps)。
步骤:1) 登陆VPS,运行 ip link show 确认网卡名(如 eth0、ens3)。2) 测速:安装 iperf3(apt-get install -y iperf3)并与远端iperf服务器测试:iperf3 -c iperf.example.com -P 4。3) 查看内核与已安装工具:iproute2(tc)与iptables/nft。若缺少,先安装 iproute2 iptables apt-get install -y iproute2 iptables。
2.
简单限速:使用 wondershaper 快速配置
wondershaper 适合新手或快捷场景。它按接口设置上行/下行限速(单位 kbps)。
安装与使用:apt-get install -y wondershaper。假定网卡 ens3,设置 128Mbps(约 128000 kbps):wondershaper ens3 128000 128000。取消限速:wondershaper clear ens3。注意:wondershaper 无法做复杂的按IP/端口分配。
3.
精细流量整形:tc + HTB 基本框架
tc(来自 iproute2)可用 HTB 创建层级队列,实现全局限速与分流。
示例命令(请将 ens3 替换为实际网卡):tc qdisc add dev ens3 root handle 1: htb default 20
tc class add dev ens3 parent 1: classid 1:1 htb rate 128mbit ceil 128mbit
tc class add dev ens3 parent 1:1 classid 1:10 htb rate 32mbit ceil 128mbit prio 1
tc class add dev ens3 parent 1:1 classid 1:20 htb rate 96mbit ceil 128mbit prio 2
说明:1:10 分配给高优先级(例如 HTTP/HTTPS),1:20 给其他流量。
4.
按端口/IP分类:iptables 标记 + tc 过滤
用 iptables 在 mangle 表设置 mark,然后 tc 根据 mark 分流。
示例:iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -j MARK --set-mark 20
然后在 tc 添加 filter:tc filter add dev ens3 parent 1: protocol ip handle 10 fw flowid 1:10
tc filter add dev ens3 parent 1: protocol ip handle 20 fw flowid 1:20
注意:使用 iptables 的 MARK 需配合 iptables-persistent 保存规则,或写入启动脚本。
5.
限制 P2P/异常流量与优先级设置
P2P/BT 流量会吃光带宽,应识别并限制。方法:1) 利用端口(常见BT端口)标记并降级;2) 用 conntrack 或 DPI(复杂)。
示例:iptables -t mangle -A PREROUTING -p tcp --dport 6881:6999 -j MARK --set-mark 30
tc class 1:30 rate 5mbit ceil 10mbit prio 3,并加 tc filter 根据 mark 指向该类。这样保证种子类流量最低优先。
6.
持久化与开机自动应用
把 tc 和 iptables 规则写成脚本并在开机时执行。
示例脚本 /usr/local/bin/traffic-shape.sh 内容包含所有 tc/iptables 命令,赋可执行:chmod +x /usr/local/bin/traffic-shape.sh。创建 systemd 服务 /etc/systemd/system/traffic-shape.service:
[Unit] After=network.target
[Service] Type=oneshot ExecStart=/usr/local/bin/traffic-shape.sh RemainAfterExit=yes
[Install] WantedBy=multi-user.target
然后 systemctl daemon-reload && systemctl enable --now traffic-shape.service。
7.
监控流量:vnStat、iftop、nethogs 与日志
长期与实时监控双管齐下:vnstat 记录历史流量,iftop/nethogs 实时分析进程或连接。
安装:apt-get install -y vnstat iftop nethogs。初始化 vnstat:vnstat -u -i ens3;查看:vnstat -m(按月)、vnstat -d(按日)。实时:iftop -i ens3,nethogs ens3。结合 crontab 每小时导出 vnstat 报表到日志便于审计。
8.
测速与验证:iperf3、多线程与真实场景测试
配置后务必测试。使用 iperf3 能测到线路真实带宽。
命令:iperf3 -c server -P 8 -t 60(并行8线程测试60秒)。同时用 curl/wget 下载大文件检测HTTP速率。注意:若provider端限速,服务器内测无法突破该上限,需要联系提供商。
9.
常见问题与优化建议
- 若 tc 无效,先清除旧 qdisc:tc qdisc del dev ens3 root。
- 注意方向:下载限制在入站(egress vs ingress),Linux 对 ingress 限制需用 ifb 接口做镜像。若要限制入站流量,需创建 ifb0 并重定向:tc qdisc add dev ens3 ingress; tc filter add dev ens3 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0,然后在 ifb0 上做 HTB。
- 审查 provider 控制面板是否有流量套餐或端口限制,必要时升级或申请 QoS 设置。
10.
安全与异常防护建议
配合 fail2ban 或 conntrack 限制短时间内大量连接,以免被单IP霸占带宽。
安装 fail2ban 并启用 ssh/http 规则,设置 iptables connlimit:iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP 来限制单IP并发连接。
11.
问:如何把流量控制脚本在重启后自动生效?
答:把所有 tc 与 iptables 命令写入可执行脚本(例如 /usr/local/bin/traffic-shape.sh),然后创建一个 systemd 单元(traffic-shape.service),在 [Unit] 指定 After=network.target,ExecStart 指向脚本,执行 systemctl enable --now traffic-shape.service。这样网络启动后脚本会自动运行;若使用 ifb 重定向也在脚本中完整写出。
12.
问:如果发现实际吞吐低于128Mbps,如何诊断?
答:逐步排查:1) 用 iperf3 本地与远端多线程测试(iperf3 -c server -P 8)。2) 确认 provider 是否在面板限速或线路拥塞。3) 检查 VPS CPU 是否瓶颈(top/htop),加密/SSL 会占用CPU。4) 检查 qdisc 设置是否正确(tc qdisc show dev ens3,tc -s class show)。5) 如果限速在 ingress,确认是否做了 ifb 镜像并正确设置。