在大型系统(约 2000 个用户)中进行流量控制的最佳解决方案是什么?

Chr*_*urm 11 networking linux cisco iptables traffic-shaping

以下情况:我们是一群学生管理当地宿舍的互联网连接,共有大约2000名最终用户。

我们有一个流量积分系统,每 MB 下载或上传都会花费积分,新积分按小时添加。目前,我们会在用户用完所有积分后阻止其访问互联网(通过将他置于 Debian 网关路由器上 iptables 中的 REJECT 策略中)。

我们只想限制用户的带宽。做这个的最好方式是什么?

简单的答案是对用户的交换机端口(主要是 Cisco Catalyst 3550)设置速率限制。然而,这是不可取的,因为我们自己的网络内部和到大学网络的流量应该保持无限。有没有办法限制 Cisco IOS 中具有特定目标或源 IP 范围(即出口和入口)的数据包的带宽?我找不到任何东西。

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

  • tc 或 tcng - 似乎两者都具有相当神秘的语法,并且都没有提供用于执行每个 IP 流量控制的良好功能。为这么多人准备的专用 QDisc 可能会大大降低路由器的速度。此外,关于两者的文档已经过时了。

  • shorewall - 似乎有一个相当简洁的配置语法,但是,我不确定它是否可以处理这么多的流量和用户,以及它是否适用于 per-IP 流量限制

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

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

如果您需要有关我们系统的任何其他信息,请随时询问。

提前致谢。


编辑:我已经用iptables和实现了系统tc

每个用户都有一个 /28 子网、一个 VPN IP(都来自 10.0.0.0/8)和一个外部 IP,所有这些都通过一个 iptables 链进行控制。这条链只有一个规则,一个简单的RETURN.

每五分钟,一个 Python 脚本读出这些规则的字节计数器。它会重置计数器并更新我们 PostgreSQL 数据库中用户的流量点帐户。

如果用户的点数余额低于某个阈值,则会为该用户创建两个 tc 类(一个用于传入,一个用于我们网关路由器上的传出接口),IP 将输入到属于这些类的 tc 过滤器中。这些课程受 HTB 限速。

与以前的系统相比fprobe-ulogulog-acctd这要快得多,因为字节计数是由 iptables 完成的。

对于我们的用户来说,网络速度已大大提高。

sys*_*138 0

我不得不问我们正在使用什么,但我们的 ResTek 人员在互联网边界有一个设备,可以执行服务质量功能。它对未分类的流具有默认优先级,并根据规则对其他流量进行优先级排序。这是真正卖点的优先级功能,因为他们还运行一个基于 Squid 的缓存集群,该集群在边界设备中被列为最高优先级。然后,网络上的人们可以选择以标准(有点糟糕)优先级上网冲浪,或者使用代理并获得非常快速的响应。当然,它们还接受游戏服务器优先级请求,因为它们对延迟敏感但带宽较低。

处理游戏服务器请求有相当多的工作,但随着越来越多的游戏远离私有服务器,这些工作正在慢慢被搁置。总的来说,我听说这对他们来说效果很好。它们可以防止 BitTorrent 之类的内容淹没所有其他流量,并且仍然保持人们的 YouTube 加载速度很快。