我的网络中有 200 个用户,这些用户位于两个 AD 组中,无法为每个组设置特定的 IP 范围。我想为每个组设置可以在组用户之间共享的带宽量。
我可以使用鱿鱼管理 IP 的带宽,也可以使用 iptables+tc 管理 IP 的带宽,但我想为在该 IP 的用户之间共享的 IP 组设置带宽。我怎样才能做到这一点?
答案1
一旦你知道哪个IP属于哪个组,我就可以回答如何管理带宽。您可以使用分层令牌桶分配三组。
- A组10人
- B组20人
- 30 网络中非 AD 设备的未知流量
#Create egress shaping
$TC qdisc add dev eth0 root handle 1: htb default 20 r2q 50
$TC class add dev eth0 parent 1: classid 1:1 htb rate 19mbit ceil 19mbit
$TC class add dev eth0 parent 1:1 classid 1:10 htb rate 9mbit ceil 15mbit prio 1
$TC class add dev eth0 parent 1:1 classid 1:20 htb rate 8mbit ceil 15mbit prio 1
$TC class add dev eth0 parent 1:1 classid 1:30 htb rate 2mbit ceil 10mbit prio 2
#Send everything unknown to classid 1:30. The filter has low priority
#(higher numbers are filtered later)
$TC filter add dev eth0 parent 1: prio 20 protocol all u32 match u32 0 0 flowid 1:30
在上面的脚本中,如果其他组不使用带宽,则这些组可以将带宽借给其他组。如果你不想要这套天花板与相同的值速度。
现在您可以编写一个脚本,动态地将 IP 发送到 1:10 或 1:20 类。也许您必须挂钩一些 dhcp 或广告事件。
A 组的脚本如下所示:
$TC filter replace dev eth0 parent 1: protocol ip prio 3 u32 match \
ip dst $THEIP/32 flowid 1:10
请记住,您只能控制您发送的内容。因此,如果您的路由器有接口 eth0 和 eth1,您也必须管理 eth1 上的带宽。
并考虑将 SFQ 叶 QDISC 附加到类中。 SFQ 太棒了!
$TC qdisc add dev eth0 parent 1:10 handle 110: sfq perturb 10
$TC qdisc add dev eth0 parent 1:20 handle 120: sfq perturb 10
$TC qdisc add dev eth0 parent 1:30 handle 130: sfq perturb 10
将 IP 映射到组
找出哪个 IP 属于哪个组很大程度上取决于您使用的软件。如果您的软件不支持事件,您可以编写一个脚本来解析日志并决定在某个组上分配 IP。