不幸的是,我在系统管理和配置 Linux 系统方面没有太多经验,所以请不要对我太苛刻;我还在学习;)
网络设置:
172.21.0.1-具有流量整形的服务器。
172.21.0.2-第二台服务器,存储客户端通过 HTTP 请求的文件。
172.21.0.6 和 172.21.0.7 - 两个客户端设备。
我正在尝试为 WireGuard 客户端配置流量整形:
tc qdisc add dev wg0 parent root handle 1:0 hfsc default 10
# Root class
tc class add dev wg0 parent 1: classid 1:1 hfsc sc rate 1gbit ul rate 1gbit
# Reserved traffic
# Guaranteed bandwidth of 500 Mbit/s and a maximum of 1 Gbit/s
tc class add dev wg0 parent 1:1 classid 1:10 hfsc sc rate 500mbit ul rate 1gbit
# Client traffic
# Guaranteed bandwidth of 500 Mbit/s and a maximum of 1 Gbit/s
tc class add dev wg0 parent 1:1 classid 1:20 hfsc sc rate 500mbit ul rate 1gbit
# Shaping for individual client 6
tc class add dev wg0 parent 1:20 classid 1:3006 hfsc sc rate 100kbit ul rate 100kbit
tc filter add dev wg0 protocol ip parent 1:0 prio 1 u32 match ip dst 172.21.0.6/32 flowid 1:3006
# Shaping for individual client 7
tc class add dev wg0 parent 1:20 classid 1:3007 hfsc sc rate 100kbit ul rate 100kbit
tc filter add dev wg0 protocol ip parent 1:0 prio 1 u32 match ip dst 172.21.0.7/32 flowid 1:3007
tc -pretty 过滤器显示 dev wg0
filter parent 1: protocol ip pref 2 u32 chain 0
filter parent 1: protocol ip pref 2 u32 chain 0 fh 800: ht divisor 1
filter parent 1: protocol ip pref 2 u32 chain 0 fh 800::801 order 2049 key ht 800 bkt 0 *flowid 1:3006 not_in_hw
match IP dst 172.21.0.6/32
filter parent 1: protocol ip pref 2 u32 chain 0 fh 800::802 order 2050 key ht 800 bkt 0 *flowid 1:3007 not_in_hw
match IP dst 172.21.0.7/32
tc-graph 类显示 dev wg0
+---(1:) hfsc
+---(1:1) hfsc sc m1 0bit d 0us m2 1Gbit ul m1 0bit d 0us m2 1Gbit
+---(1:10) hfsc sc m1 0bit d 0us m2 500Mbit ul m1 0bit d 0us m2 1Gbit
+---(1:20) hfsc sc m1 0bit d 0us m2 500Mbit ul m1 0bit d 0us m2 1Gbit
+---(1:3007) hfsc sc m1 0bit d 0us m2 100Kbit ul m1 0bit d 0us m2 100Kbit
+---(1:3006) hfsc sc m1 0bit d 0us m2 100Kbit ul m1 0bit d 0us m2 100Kbit
|
| |
当尝试同时从两个客户端下载文件时,只有一个获得 100kbit,而另一个获得 0kbit :(
我做错了什么?服务器:在 KVM 上运行的 Debian 12。
PS:100kbit/s 的限制只是为了测试流量整形器的功能。
我也希望得到有关如何重写配置的建议。也许我的做法完全错误,也许有更优化的方法(例如为整个子网设置一个类,这样所有 WireGuard 客户端都会获得单独的 100kbit 限制)。
在我看来,您的规则表面上看起来没有问题。
尝试传递
-s
以tc
获取统计数据并查看您的数据包是否实际传递到正确的类别。您应该测试整个网络链的行为,看看是否可以隔离发生问题的条件。
考虑更换您的棒子的其他区域来消除这些问题,比如任何具有其自身限制的网络服务器。