使用tc为多个客户端提供Linuxstream量整形

我需要在通过IPSEC连接的几个客户端之间划分带宽。

我发现这篇文章:

  • https://jve.linuxwall.info/blog/index.php?post/2010/10/16/How-can-I-do-traffic-shaping-in-Linux-by-IP

和这个服务器错误的问题:

  • 我怎样才能通过IP在Linux上进行stream量整形?

但是我的要求稍微复杂一点,我需要一些额外的build议。

如何将MARK分配给新客户

  1. 我不是唯一的,但有几个dynamic连接和接收IP的客户端。 我如何分配防火墙标记/类ID? 我目前的想法是将标记存储在共享内存中,并随每个新客户端增加。

听起来相对复杂。 我可以做到,但可能有一个更简单的解决scheme? 欢迎任何其他想法。

我知道的其他方法是从IP地址做一个散列。 在这种情况下,散列值将是16位(范围为tc类id),而IP包含32位。 不好看。

filter/分类器

2)我想每个VPN客户端有两个类。 一个用于优先级的stream量,另一个用于其他所有 我用两个标记来实现这一点 – MARKFW_ONE和MARKFW_TWO

2.1 SSHstream量:放入优先级队列(ssh,但不是scp):

iptables -t mangle -A INPUT -i $DEV -s $IP -p tcp -m tos --tos 0x10 -j CONNMARK --set-mark ${MARKFW_ONE} 

2.2 ICMP:放入优先队列:

 iptables -t mangle -A INPUT -i $DEV -s $IP -p icmp -j CONNMARK --set-mark ${MARKFW_ONE} 

2.3为了在上传过程中加速下载,请将ACK数据包放入优先级:

 iptables -t mangle -A INPUT -i $DEV -s $IP -p tcp --tcp-flags ALL ACK -j CONNMARK --set-mark ${MARKFW_ONE} 

2.4其他一切:

 iptables -t mangle -A INPUT -i $DEV -s ${IP} -j CONNMARK --set-mark ${MARKFW_TWO} 

最后:

 # Propagate netfilter marks on connections iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark 

问题是:

  • 2.3:看起来我在这里是错的,因为这个规则将标记整个连接,而不是数据包。 在这种情况下,我应该简单地使用-j MARK吗?
  • 2.2:我应该用-j标记replace-j CONNMARK是否为ICMP情况?
  • 2.1 – 2.4。 我可以使用-j CLASSIFY目标而不是标记数据包和连接吗? 我的印象是,我可以使用它的情况下2.2和可能是2.3,但不是在其他情况下,当连接应标记。
  • 2.1:识别sshstream量(而不是scp)是否正确?

提前致谢!