使用TC和代理的Linuxstream量整形

我有一个Linux框被用作路由器。 它有2个接口,一个连接到互联网(它使用NAT),一个连接到本地networking服务多台计算机。

我想用'tc'来形成从本地计算机上传到互联网的stream量(上传),并根据IP地址警告每台计算机进入(下载)的stream量。 通常情况下,我会添加一个出口整形器和一个入口警察到外部接口,问题是我有一个鱿鱼代理坐在本地计算机连接到服务器,以访问networking。

如果我用iptables标记数据包离开本地networking接口,那么对于networkingstream量来说没有任何区别,因为当squid拦截并在另一个端口上创build自己的networking连接时,标记会丢失。 同样,监pipe传入的stream量不起作用,因为networkingstream量总是注定要鱿鱼,所以我不能匹配的IP地址。

到目前为止,我已经成功地完成了90%的工作,通过向内部接口添加外出成形器,从而根据IP限制每台本地计算机的下载速度。 这当然不会节省线速度,它只是创build一个队列,以便每台电脑只看到一定的下载速度。 对于上传,我将数据包标记为离开本地networking,并在外部接口的出口使用一个整形器来形成它们,但这不适用于来自鱿鱼的networkingstream量。

有没有其他人遇到类似的问题,或知道如何我可以塑造具有目的地端口80的上传stream量,当鱿鱼是拦截它?

我设法通过在内部接口上使用Ingress策略器来创build一个解决scheme,该策略将多余的数据包从本地计算机丢弃到Squid。 我只能使用可变缓冲区大小来工作。 奇怪。

你必须在TOS里用tcp_outgoing_tos再次标记你的包。 在squid之前和之后匹配IP是唯一的方法。

 acl tosX src xxx1 xxx2 xxx3 tcp_outgoing_tos 0x20 toxX 

那么你必须在tc中使用TOSfilter。