以下情况:我们是一群学生,负责管理本地居民大厅的Internet连接,共有大约2000个最终用户。
我们有一个交通点系统,每个MB降低或上传的成本点,按小时添加新的点。目前,当用户花完所有积分后,我们便将其阻止(通过将其放入Debian网关路由器iptables中的REJECT策略中)。
我们只想限制用户的带宽。做这个的最好方式是什么?
简单的答案是在用户的交换机端口(主要是Cisco Catalyst 3550)上设置速率限制。但是,这是不可取的,因为我们自己网络内部和大学网络之间的流量应保持无限。在Cisco IOS中,是否有一种方法仅对具有特定目标或源IP范围(因此,出站和入站)的数据包限制带宽?我什么都找不到。
另一种方法是控制网关路由器上的流量。我想到了几种解决方案:
tc或tcng-似乎两者都具有相当奥秘的语法,而且都没有提供用于进行按IP流量控制的良好功能。专用于这么多人的QDisc可能会大大降低路由器的速度。此外,两者的文档都已经过时了。
Shorewall-似乎具有相当整齐的配置语法,但是,我不确定它是否可以处理这么多的流量和用户,是否适合每个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-ulog
而且ulog-acctd
这是更快的字节计数由iptables的完成。
对于我们的用户,网络速度已大大提高。