VPS 端口拥堵怎么办?教你三招精准限速,告别超限扣费
VPS 端口拥堵怎么办?教你三招精准限速,告别超限扣费
玩 VPS 的朋友最近是不是经常遇到这种糟心事:
VPS 端口拥堵会导致服务卡顿,甚至产生超额费用
- 搭了个服务挂出去,结果被突发流量打爆,不仅不仅网站卡顿,月底还收到了流量超限的账单;
- 一台机器上挂着好几个服务,某个吃带宽的大户直接把其他服务的路给堵死了;
- 想给朋友开个临时高速通道,但又怕他把全家桶都拖上来。
这时候,"端口限速"就成了保命技能。与其眼睁睁看着流量余额见底,不如提前给 VPS 的血管装个"流量调节器"。今天就来聊聊如何给特定端口精准限速,不仅能救急,还能省下不少银子。
一、 新手福音:Wondershaper 一键限速
如果你不想折腾复杂的内核参数,Wondershaper 绝对是最简单的选择。它本质上是一个 tc 命令的脚本封装,专门为了让懒人能用一行命令搞定限速而生。
1. 安装
大多数 Debain/Ubuntu 系列的系统直接用 apt 装就行:
sudo apt update
sudo apt install wondershaper
在终端中使用 Wondershaper 命令进行限速
如果是 CentOS/RHEL 系列,可能需要先装 EPEL 源,或者直接下载源码跑。
2. 使用姿势
假设你想把 eth0 网卡的总下载速度限制在 1000kbps,上传限制在 500kbps,命令如下:
sudo wondershaper eth0 1000 500
注意: 这里的单位是 kbps(千比特每秒),换算成 KB(字节)要除以 8。比如 1000kbps 大概就是 125KB/s,速度并不快,设置时千万别手抖写小了。
3. 消除限制
如果觉得限得太死影响体验,随时可以清除:
sudo wondershaper clear eth0
缺点: Wondershaper 默认是针对整个网卡限速,不能直接指定特定端口。不过对于单服务机器,这个方法最稳。
二、 进阶实战:TC 命令精准控制端口
想要针对特定端口(比如 80 端口做网页,8388 端口做代理)进行不同限速,这就得动用 Linux 内核的大杀器——tc(Traffic Control)。虽然代码看着有点劝退,但套用模板其实很简单。
场景设定
网卡 eth0,我们要对 目标端口 8080 进行限速:下载速度限制在 2Mbit/s(约 250KB/s),上传限制在 1Mbit/s(约 125KB/s)。
1. 创建根队列 (qdisc)
首先我们要为网卡创建一个 HTB(层次化令牌桶)队列:
# 创建根队列,默认 handle 为 1:
tc qdisc add dev eth0 root handle 1: htb default 20
2. 创建根类
定义总带宽上限(这个要设得比你实际带宽略大,以免影响其他端口):
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit ceil 1000mbit
这里假设你的机器是千兆环境。
3. 创建限速类
这就是我们要针对 8080 端口施展魔法的地方:
# 下行限制 2mbit (classid 1:10)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit prio 0
# 上行限制 1mbit (classid 1:20,也可结合过滤器设置)
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1mbit ceil 1mbit prio 1
4. 添加过滤器
把流量引导到对应的类里。这里要用到 u32 过滤器匹配目的端口 8080:
# 匹配 8080 端口的下载 流量,分给 1:10 类
tc filter add dev eth0 protocol ip parent 1:0 prio 0 u32 match ip dport 8080 0xffff flowid 1:10
# 如果要限制上传,匹配源端口 8080
tc filter add dev eth0 protocol ip parent 1:0 prio 0 u32 match ip sport 8080 0xffff flowid 1:20
这样就完成了。虽然参数多,但你只需要把 eth0、2mbit、8080 替换成你自己的就行。
5. 清除规则
改错了规则导致连不上 VPS?别慌,一键清除:
tc qdisc del dev eth0 root
三、 备选方案:Iptables 配合 Hashlimit
除了 tc,大家熟知的 iptables 其实也能做简单的流量整形,虽然精度不如 tc,但在某些简单的防刷场景下出奇制胜。
核心模块是 hashlimit。比如你想限制某个 IP 每秒只能建立 10 个连接到 80 端口,防止被 CC 攻击:
iptables -A INPUT -p tcp --dport 80 -m hashlimit \
--hashlimit-name http_limit \
--hashlimit-above 10/sec \
--hashlimit-burst 20 \
--hashlimit-mode srcip \
--hashlimit-htable-expire 10000 \
-j DROP
不过 iptables 主要优势在于连接数和包频率控制,如果是为了压制带宽占用,还是推荐藏品前两个方案。
总结一下
- 简单粗暴选 Wondershaper:适合小白,全盘限速,脚本简单,但不够灵活。
- 精准控制选 tc:虽然命令长,但能针对端口、IP 做细致划分,是专业运维的首选。
- 安全防护选 iptables:更侧重于防攻击和并发限制,带宽限速仅供参考。
最后提醒大家,VPS 的带宽是金贵的。在做任何限速测试后,一定要验证一下配置是否符合预期,别误伤了自己的正常业务。如果你有更骚气的限速脚本或 Docker 镜像推荐,也不妨分享一下!

评论已关闭