大型系统(约2000用户)的stream量控制的最佳解决scheme是什么?

以下情况:我们是一个为当地居民大厅pipe理互联网连接的学生,总共有大约2000名terminal用户。

我们有一个交通点系统,每个MB下载或上传成本点,新的点加小时。 目前,我们阻止用户的互联网访问,当他把所有的点(通过在我们的Debian网关路由器上的iptables中的放弃他的REJECT政策)。

我们只想限制用户的带宽。 什么是最好的方法来做到这一点?

简单的答案是设置用户的交换机端口(主要是Cisco Catalyst 3550s)的速率限制。 然而,这是不可取的,因为我们自己的networking和大学networking内的stream量应该是无限的。 是否有一种方法可以限制仅在具有特定目的地或源IP范围的数据包(在出口和入口都在Cisco IOS中)的带宽? 我找不到任何东西。

另一种方法是控制网关路由器上的stream量。 我想到了几个解决scheme:

  • tc或tcng – 似乎都有一个相当神秘的语法,既不提供执行每IPstream量控制的好function。 对于这么多人来说,专用的QDisc可能会让路由器变慢。 而且,两者的文档都相当过时。

  • shorewall – 似乎有一个相当整齐的configuration语法,但是,我不确定它是否可以处理这个数量的stream量和用户,是否适合每个IPstream量限制

  • pfSense – 看起来像一个旨在用于我们的目的的操作系统。 但是,这将需要我们重新安装我们的网关路由器。 我们没有其他的BSD系统,pfSense需要非常好的stream量统计function(我们目前在那里使用fprobe-ulog和ulog-acctd)。

你有什么经验? 哪种解决scheme适合我们的需求,最容易维护? 你有其他想法吗?

如果您需要关于我们的系统的任何其他信息,请不要犹豫,问。

提前致谢。


编辑 :我用iptablestc实现了系统。

每个用户都有一个/ 28个子网,一个VPN IP(来自10.0.0.0/8)和一个外部IP,全部通过一个iptables链来操纵。 这条链只有一个规则,一个简单的RETURN

每5分钟一个Python脚本读出这些规则的字节计数器。 它重置计数器并更新PostgreSQL数据库中用户的stream量点账户。

如果用户的点余额减less到某个阈值以下,则为该用户创build两个tc类(一个用于input,一个用于网关路由器上的输出接口),IP被input到属于这些类的tcfilter中。 这些课程由HTB限制速度。

与之前使用fprobe-ulogulog-acctd系统相比,字节计数由iptables完成的速度要快得多。

networking速度已经为我们的用户大大改善。

我不确定你是否有兴趣重新configuration整个设置(即replaceDebian),或者在网关后面放置类似的东西是否可行,但FreeBSD在ipfw中有一个称为dummynet的特性 。 由于听起来像你不想获得一个专门的硬件stream量整形器,这可能是一个select。 我们目前使用它来通过我们的代理网关阻塞SMTPstream量入站和出站,以防止老化的NFS后端系统不堪重负,随后变得无法响应。

通过对规则集进行一些脚本和智能configuration,能够控制数千个单独的IP地址将是可行的。

我将不得不问我们正在使用的是什么,但是我们的ResTek人员在互联网边界有一台能够提供高质量服务的设备。 它具有未分类stream的默认优先级,并根据规则优先处理其他stream量。 这是真正的优先销售function,因为它们还运行着一个基于Squid的caching群集,该群集在边界设备中被列为最高优先级。 在他们的networking上的人们可以select以标准(甚至有点儿糟糕)的优先级来浏览网页,或者使用代理并获得非常快速的响应。 他们也会接受游戏服务器的优先级请求,因为他们对延迟敏感,但是带宽低,这是理所当然的。

有相当数量的处理游戏服务器请求的工作,但随着越来越多的游戏离开私人服务器,这些请求正在慢慢走向正轨。 总的来说,我听说它对他们很好。 他们可以使像BitTorrent这样的东西免除所有其他stream量,并且仍然保持人们的YouTube加载时间快。

有了这么多的用户,大多数简单的软件都会开始崩溃。

考虑看看packeteer和类似的设备。 现在,他们几乎要花更多的钱,而只是购买更多的带宽(在美国和欧洲,我们在澳大利亚的穷人仍然是非常高的利率)。

dummynet是一个非常好的build议在我看来。 但我相信iptables也可以进行stream量整形 ,所以你可以在你的debian盒子上做。

tc应该可以正常工作..我相信你想要做的是改变你当前的iptables规则来标记而不是拒绝stream量,那么你可以使用less量的tc规则来将stream量整形应用到那些标记的stream。

另外,看ipsetpipe理限制用户列表http://ipset.netfilter.org/

交通面板似乎是一个解决scheme。 其他function包括:

  • 限制每个连接的最大HTTP速度
  • 限制每个本地networking主机的Web资源总量
  • logging每台本地networking主机的networkingstream量
  • 限制每个本地networking主机的最大stream量速度
  • 限制每台本地networking主机的总stream量

其实,从来没有尝试过这个东西,但看起来没问题。