如果一台 VPS 上有多个 VLESS 节点,并且每个节点使用不同端口,就可以用 Linux 的 tc 按端口控制带宽。
例如:
1节点 A → 10001
2节点 B → 20002我们只限制 10001:
1下载:500 Kbps
2上传:10 Mbps20002 不做处理,保持原速度。
原理
客户端连接 10001 时:
1客户端 → VPS:10001进入 VPS 的流量可以通过:
1dst_port 10001识别。
VPS 返回数据时:
1VPS:10001 → 客户端可以通过:
1src_port 10001识别。
因此 tc 可以只处理 10001,而不会影响 20002。
配置
先确认公网网卡:
1ip route get 1.1.1.1如果看到:
1dev eth0说明网卡是 eth0。
添加 tc:
1tc qdisc add dev eth0 clsact限制 10001 的下载到 500 Kbps:
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:
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最终效果:
110001
2下载 ≤ 500 Kbps
3上传 ≤ 10 Mbps
4
520002
6不限制查看规则
1tc filter show dev eth0 egress
2tc filter show dev eth0 ingress取消限速
直接删除:
1tc qdisc del dev eth0 clsact即可恢复。
注意
tc police 是通过丢弃超出速率的数据包来实现限速,所以实际测速可能低于设置值。
例如设置:
1500 Kbps实际可能只有:
1200~500 Kbps如果觉得太慢,可以改成:
1700 Kbps或者:
11 Mbps核心思路就是:
1不同 VLESS 节点
2↓
3使用不同端口
4↓
5tc 根据端口识别流量
6↓
7给指定端口设置带宽