那么,我已经通过了IP如何在Linux上进行stream量整形? 在serverfault和我想要实现的是几乎相同。
Internet--------Linux Router----Switch-----Clients
我遵循Julien Vehent的教程 ,可以限制从Linux router到client IP的stream量, 36.7KB/s为36.7KB/s但每当我从client复制到server任何文件我得到6.0MB/s
我试图达到的是
Internet------------------------>Client @ 1.0MB/s即如果我从Internet下载任何文件到client machine将是@1.0MB/s
以下是我所遵循的脚本
#! /bin/bash NETCARD=eth1 MAXBANDWIDTH=10000 # reinit tc qdisc del dev $NETCARD root handle 1 tc qdisc add dev $NETCARD root handle 1: htb default 9999 # create the default class tc class add dev $NETCARD parent 1:0 classid 1:9999 htb rate $(( $MAXBANDWIDTH ))kbit ceil $(( $MAXBANDWIDTH ))kbit burst 5k prio 9999 # control bandwidth per IP declare -A ipctrl # define list of IP and bandwidth (in kilo bits per seconds) below ipctrl[10.239.107.15]="256" ##MY CLIENT MACHINE IP## #ipctrl[192.168.1.2]="128" #ipctrl[192.168.1.3]="512" #ipctrl[192.168.1.4]="32" mark=0 for ip in "${!ipctrl[@]}" do mark=$(( mark + 1 )) bandwidth=${ipctrl[$ip]} # traffic shaping rule tc class add dev $NETCARD parent 1:0 classid 1:$mark htb rate $(( $bandwidth ))kbit ceil $(( $bandwidth ))kbit burst 5k prio $mark # netfilter packet marking rule iptables -t mangle -A INPUT -i $NETCARD -s $ip -j CONNMARK --set-mark $mark iptables -t mangle -A INPUT -i $NETCARD -d $ip -j CONNMARK --set-mark $mark # filter that bind the two tc filter add dev $NETCARD parent 1:0 protocol ip prio $mark handle $mark fw flowid 1:$mark echo "IP $ip is attached to mark $mark and limited to $bandwidth kbps" done #propagate netfilter marks on connections iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark
这个脚本工作正常,虽然它是相当古老的。 其他许多人使用它,例如: https : //forums.plex.tv/discussion/173977/limiting-bandwidth-per-user
注意tc不能很好地处理inputstream量,除非你使用ifb虚拟设备并通过它来路由数据包。 这是好得多,build议使用IP表中的OUTPUT链。
在互联网上有大量的tc脚本可以用来解释这一点。
你的问题还不清楚,因为你还提到“Linux路由器”。 但是你的acsii diagraem在你的“networking拓扑结构”中没有显示这样的事情
这是否意味着您正尝试在多宿主主机上运行上述脚本? 这将永远不会为你想要做的。 如果是这种情况,你应该学习如何正确使用iptables以及tc。 最值得注意的是哪个链表IP使用。
这并不难完成。