使用 tc 和 iptables 在 Linux 路由器上塑造 Dropbox

使用 tc 和 iptables 在 Linux 路由器上塑造 Dropbox

我局域网上的另一台机器正在上传到 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

答案1

如果您让它在下载端的流量上工作,那么您的配置就很好了。流量整形只适用于出口流量。这是因为整形控制接口的发送缓冲区,而对接收端(入口流量)没有影响。

有两种可能的解决方案:一种是使用伊夫林(在链接的帖子中提到),或者在另一个接口(不面向您的客户端)上配置出口整形。澄清第二点:

Clients <=> (download limit) [Server] (upload limit) <=> [Edge router]

您希望通过在不同的接口上应用下载和上传限制来控制“服务器”上的流量,如下所示。上传的数据是流向第二个接口(非面向客户端)的出站流量。

以下是类似的帖子:帖子1, 和帖子2

相关内容