带宽限制Linux到外部子网

我期待为我的企业启动一个新的开源镜像,但也有兴趣为外部客户开放它。 但是,由于显而易见的原因,我想将传出带宽限制在不在本地子网中的任何一个(例如,stream向其中一个边界路由器的stream量)。

我原来是在看Apache apache mod_bw,但是也可能有FTP访问这个镜像。 我已经看到了一些使用'tc'的有希望的选项,但是看起来它会匹配基于子网的模式。 但我想否定这一点 – 我有一个(5或6)内部子网的列表,应该没有任何限制,其他一切都应该通过stream量整形器。 复杂的事情有点是我也需要匹配v4和v6子网。

我正在做这个试验,但是我基本上需要反过来 ,所以“不要塑造这些子网,把策略应用到其他的一切”。 也许是2class,一个是限速器,一个是没有的? 我仍然不清楚处理顺序是如何处理'tc' – find匹配后处理终止,还是一直持续到结束? (例如,最终将抓住所有东西 ,或者只是没有匹配的东西?)

据我所知,'tc match'不能用于ipv6。 你将不得不使用'-j CLASSIFY'的iptables。

在iptables中,find匹配后继续处理。 但是,使用tc,flowid将数据包redirect到类并停止处理。

关于树,我想你想要的是:

  • 根qdisc
  • 所有的带宽类(这样叶类可以借)
  • 两类,例如20%(外部)和80%(内部)的带宽保证,最大100%:保证不能超过100%
  • 一个叶子qdisc(pfifo,fq,fq_codel)每个类

虽然,我不知道你的架构。 如果你使用的是NAT,你的iptables规则必须是准确的(没有范围)。 如果您使用的是反向代理,则无法区分内部和外部stream量。

如果您有反向代理,则可以使用以下方法:

  1. 在7级的形状(mod_bw和等效的ftp),因为你将能够看到X-Forwarded-For头
  2. 在你的边界路由器/防火墙(使用公共IP的那个)上设置整形器,因为你可以查看公共IP(记住你总是在上传链接上工作)

根据您的这种能力,最好的select是第二种,因为您可以根据您的WAN带宽而不是networking服务器上的1或10Gb网卡准确定型。 即使没有反向代理,这也是您的最佳select。

关于类的select,您应该使用htb或hfsc来更好地使用dynamic带宽和root qdisc中的“default”选项。