在同一台 VPS 上按 VLESS 端口限速

目录

如果一台 VPS 上有多个 VLESS 节点,并且每个节点使用不同端口,就可以用 Linux 的 tc 按端口控制带宽。

例如:

TEXT
1节点 A → 10001
2节点 B → 20002

我们只限制 10001

TEXT
1下载:500 Kbps
2上传:10 Mbps

20002 不做处理,保持原速度。

原理

客户端连接 10001 时:

TEXT
1客户端 → VPS:10001

进入 VPS 的流量可以通过:

TEXT
1dst_port 10001

识别。

VPS 返回数据时:

TEXT
1VPS:10001 → 客户端

可以通过:

TEXT
1src_port 10001

识别。

因此 tc 可以只处理 10001,而不会影响 20002

配置

先确认公网网卡:

BASH
1ip route get 1.1.1.1

如果看到:

TEXT
1dev eth0

说明网卡是 eth0

添加 tc

BASH
1tc qdisc add dev eth0 clsact

限制 10001 的下载到 500 Kbps:

BASH
1tc filter add dev eth0 egress protocol ip pref 10 flower \
2ip_proto tcp src_port 10001 \
3action police rate 500kbit burst 256k conform-exceed drop

限制上传到 10 Mbps:

BASH
1tc filter add dev eth0 ingress protocol ip pref 10 flower \
2ip_proto tcp dst_port 10001 \
3action police rate 10mbit burst 256k conform-exceed drop

最终效果:

TEXT
110001
2下载 ≤ 500 Kbps
3上传 ≤ 10 Mbps
4
520002
6不限制

查看规则

BASH
1tc filter show dev eth0 egress
2tc filter show dev eth0 ingress

取消限速

直接删除:

BASH
1tc qdisc del dev eth0 clsact

即可恢复。

注意

tc police 是通过丢弃超出速率的数据包来实现限速,所以实际测速可能低于设置值。

例如设置:

TEXT
1500 Kbps

实际可能只有:

TEXT
1200~500 Kbps

如果觉得太慢,可以改成:

TEXT
1700 Kbps

或者:

TEXT
11 Mbps

核心思路就是:

TEXT
1不同 VLESS 节点
23使用不同端口
45tc 根据端口识别流量
67给指定端口设置带宽