我如何限制每个用户的带宽?

我如何限制每个用户的带宽?

总结一下:我和几个朋友有一个专用服务器,运行带有 Web GUI 的 torrent 客户端。每个用户都在服务器上以他们的用户名运行客户端,因此下载会进入他们的用户目录,只有他们才能访问自己的文件等。

如何监控和限制每个用户每月的带宽?

我在想也许应该有一种方法可以使用 iptables。通过监控用户 X 的所有进程使用的带宽。如果他们使用的带宽超过了每月允许的 Y GB 带宽,他们就会收到一条消息,告知他们 torrent 客户端的网络被阻止,或者客户端被彻底杀死。我也考虑过 squid,但考虑到它会使用多个 torrent 客户端,这可能会占用大量服务器资源……

我正在使用 debian lenny。

我不知道该怎么做...

这有可能吗?即使只是部分解决方案,我也心存感激……

答案1

您可以使用‘tc’流量整形命令。

为每个朋友分配一个不同的端口用于 BitTorrent。使用 iptables 标记每个端口的 TCP 数据包。

iptables -t mangle -A FORWARD -p tcp --sport 6881 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -p tcp --dport 6881 -j MARK --set-mark 100

然后使用tc命令设置每个用户的最大带宽和速率。

在月底,您可以删除或添加“tc”命令来重置计数。

您可以通过以下方式监控每个用户的使用情况:

tc filter show dev ethX

如果您使用 Debian 安装 shorewall,那么无需使用 iptables 即可轻松进行流量整形。您只需在 /etc/shorewall 目录中编辑 tcdevices、tcclasses 和 tcrules。更多信息请见此处:http://www.shorewall.net/traffic_shaping.htm

正如其他人所建议的那样,通过用户名标记数据包可能比通过端口标记数据包更好,这样就可以更改端口而无需更新 iptables。

答案2

只是想补充一下上面的问题。

您可以使用 iptables 与用户匹配来为数据包着色,如下所示:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100

然后使用“tc”根据每个用户进行限制。

答案3

您可以尝试使用--quotaiptables 中的选项,该选项允许您设置传输限制(以字节为单位)。由于您正在运行多个 torrent 客户端,每个客户端都使用不同的用户名,因此您可以将其与该--uid-owner选项结合使用,正如 katriel 所建议的那样。

通过这种方式,您可以在每个时间段(天/周/月等)强制执行传输限制,而不必限制用户的下载速度。

为了使数据包计数器持久,您必须定期保存它们(例如,通过 cron 作业),以便在需要重新启动服务器或刷新防火墙规则时可以恢复它们。

答案4

我知道这是一篇旧帖子,但今天我偶然发现了它,想找到答案,最终我拼凑出了一个对我来说非常有效的方法。我的下行链路速度为 25Mbs,上行链路速度为 2.5Mbs,有 4 个人和 5 台服务器共享此链路。对于服务器来说,上行链路带宽至关重要,但对于 4 个人来说,下行链路很有用,因此没有人会独占所有带宽。

我正在运行 centos 6.3 作为路由器,但这些命令应该可以在任何 Linux 上运行。eth0 是我到提供商的上行链路,eth1 是我的局域网,通过 24 端口交换机和 wifi 接入点,我将下载限制为 25 Mbs 中的 5(大约 500KB/秒),我将上传限制为 200Kbit(大约 25KB/秒)

tc qdisc add dev eth0 root handle 1:0 htb default 99
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 200Kbit ceil 200Kbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10

tc qdisc add dev eth1 root handle 2:0 htb default 99
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 5Mbit ceil 5Mbit prio 2
tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10

然后限制用户,每个用户使用 2 条 iptables 行

限制上传:

iptables -t mangle -A POSTROUTING -o eth0 -p tcp -s 192.168.0.100 -j CLASSIFY --set-class 1:11

限制下载

iptables -t mangle -A POSTROUTING -o eth1 -p tcp -d 192.168.0.100 -j CLASSIFY --set-class 2:11

只需更改你的 IP 地址和 ETH 端口,以匹配你想要限制的对象

相关内容