-
Notifications
You must be signed in to change notification settings - Fork 433
内网限速
zfl9 edited this page May 25, 2023
·
4 revisions
限速原理很简单,就是将超过规定速率的包给丢掉(限速一般只针对 TCP,UDP 很少有这种需求),由于这些包不会交付给接收方,因此发送方不会收到这些包的 ACK 确认消息,在发送方看来,就是“丢包”了,然后触发 TCP 重传机制,达到限速目的。
一个简单的例子(这些 iptables 规则在 ss-tproxy 主机设置):
## 连接级别
# 192.168.1.0/24网段的主机,每条tcp连接,上传限速100kb/s
iptables -t mangle -I PREROUTING -p tcp -s 192.168.1.0/24 -m hashlimit --hashlimit-name upload --hashlimit-mode srcip,srcport --hashlimit-above 100kb/s -j DROP
# 192.168.1.0/24网段的主机,每条tcp连接,下载限速100kb/s
iptables -t mangle -I POSTROUTING -p tcp -d 192.168.1.0/24 -m hashlimit --hashlimit-name download --hashlimit-mode dstip,dstport --hashlimit-above 100kb/s -j DROP
## 主机级别
# 192.168.1.0/24网段的主机,每个内网ip,上传限速100kb/s
iptables -t mangle -I PREROUTING -p tcp -s 192.168.1.0/24 -m hashlimit --hashlimit-name upload --hashlimit-mode srcip --hashlimit-above 100kb/s -j DROP
# 192.168.1.0/24网段的主机,每个内网ip,下载限速100kb/s
iptables -t mangle -I POSTROUTING -p tcp -d 192.168.1.0/24 -m hashlimit --hashlimit-name download --hashlimit-mode dstip --hashlimit-above 100kb/s -j DROP
如果是要限制从直连网站(白名单)下载的速度,要设置一条 snat 规则,不然限速是不会有效的,因为数据包直接由路由器发到内网客户机了,不会经过 ss-tproxy 主机(如果 ipts_set_snat 已经设为了 true,则不需要这条规则):
iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -j MASQUERADE
可以利用post_start
钩子函数来设置这些规则,post_stop
来清理这些规则(把-I
/-A
改为-D
就是删除)。