![使用 tc 和 iptables 在 Linux 路由器上塑造 Dropbox](https://linux22.com/image/702236/%E4%BD%BF%E7%94%A8%20tc%20%E5%92%8C%20iptables%20%E5%9C%A8%20Linux%20%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E5%A1%91%E9%80%A0%20Dropbox.png)
我局域网上的另一台机器正在上传到 Dropbox,占用了我互联网连接的上传带宽。当这种情况发生时,我对 8.8.8.8 的 ping 需要 3000-6000 毫秒。当 dropbox 没有上传时,我对 8.8.8.8 的 ping 需要 45 毫秒。
我正在尝试简单地减慢并降低 Linux 路由器上往返于 Dropbox 的转发流量的优先级。
我尝试了 2 个略有不同的指南,但都没有成功。我认为造成混乱的一个因素是 Dropbox 流量似乎每隔一两分钟就会加快和减慢。我无法访问执行 Dropbox 上传的机器,所以我不明白为什么流量在几分钟内很高,然后在几秒钟内很低,反复波动。也许是它正在上传许多文件,并且每个文件之间都有暂停。
我根据网上 3 个略有不同的指南进行了 3 次尝试。
据我了解,1:30 是优先级最低的流量类别,这正是我希望 Dropbox 所具有的。
更新: 我对此做了一些修改,以便从我自己的电脑上运行下载。速率限制按预期工作。但是现在我必须测试上传。
尝试 1
#!/bin/bash
tc qdisc add dev br0 root handle 1:0 htb default 1
tc class add dev br0 parent 1:0 classid 1:30 htb rate 64kbps ceil 128kbps prio 0
tc filter add dev br0 parent 1:0 prio 0 protocol ip handle 30 fw flowid 1:30
iptables -I FORWARD -t mangle -s 162.125.0.0/16,199.47.216.0/22,108.160.160.0/20,205.189.0.0/24,64.124.102.192/29,209.99.70.0/24,45.58.64.0/20,208.185.144.160/27 -j MARK --set-mark 30
iptables -I FORWARD -t mangle -d 162.125.0.0/16,199.47.216.0/22,108.160.160.0/20,205.189.0.0/24,64.124.102.192/29,209.99.70.0/24,45.58.64.0/20,208.185.144.160/27 -j MARK --set-mark 30
iptables-save -c
显示相关流量正在被标记
[145:212599] -A FORWARD -d 162.125.0.0/16 -j MARK --set-xmark 0x1e/0xffffffff
[72:2880] -A FORWARD -s 162.125.0.0/16 -j MARK --set-xmark 0x1e/0xffffffff
第二次尝试
#!/bin/bash
#tc qdisc add dev br0 root handle 1: htb
#tc class add dev br0 parent 1: classid 1:30 htb rate 32kbps ceil 64kbps
#tc filter add dev br0 parent 1: prio 0 protocol ip handle 30 fw flowid 1:30
#iptables -I FORWARD -t mangle -s 162.125.0.0/16,199.47.216.0/22,108.160.160.0/20,205.189.0.0/24,64.124.102.192/29,209.99.70.0/24,45.58.64.0/20,208.185.144.160/27 -j MARK --set-mark 30
#iptables -I FORWARD -t mangle -d 162.125.0.0/16,199.47.216.0/22,108.160.160.0/20,205.189.0.0/24,64.124.102.192/29,209.99.70.0/24,45.58.64.0/20,208.185.144.160/27 -j MARK --set-mark 30
第三次尝试
tc qdisc add dev br0 root handle 1: htb default 1
#Second add a class (bucket) with bandwidth restrictions
tc class add dev br0 parent 1: classid 1:30 htb rate 512kbit
#Then add a filter to force packets through the class
tc filter add dev br0 protocol ip parent 1:0 prio 1 handle 1 fw classid 1:30
iptables -I FORWARD -t mangle -s 162.125.0.0/16,199.47.216.0/22,108.160.160.0/20,205.189.0.0/24,64.124.102.192/29,209.99.70.0/24,45.58.64.0/20,208.185.144.160/27 -j MARK --set-mark 0x1
iptables -I FORWARD -t mangle -d 162.125.0.0/16,199.47.216.0/22,108.160.160.0/20,205.189.0.0/24,64.124.102.192/29,209.99.70.0/24,45.58.64.0/20,208.185.144.160/27 -j MARK --set-mark 0x1