由 kaymo » 週五 12月 24, 2004 1:56 pm
不好意思 上面的問題是我問的
但我打錯幾個字 想要修改 卻發現忘記登入
這篇是修改過的 上面那偏麻煩板主刪了 真抱歉
您好 這篇問題是我發問的
我使用TC限制流量
但上下載都會有突然突破限制速度飆高的情形
限制在5Mbit(大約640KB)有時會飆到1MB,限制在64Kbit(大約8KB)有時會飆到25KB
並沒有穩定的限制在640KB 和8KB
測試環境是利用 LAN透過Linux server出去 直接到192.168.51.X段 的任意電腦上 抓檔案和丟檔案 然後觀察流量(使用Net Meter)
我是直接在windows介面複製檔案 貼上 並沒有用特殊軟體抓檔
Linux上的設定 (兩張網卡)
eth0 外網ip :192.168.51.35
eth1 內網ip :10.10.10.11
內網的電腦
eth1內兩台電腦中的其中一台(xp) ip:10.10.10.77 坪寬5Mbit
eth1 內兩台電腦中的其中另一台(2k sever) ip:10.10.10.99 坪寬64Kbit
以下是我的指令
1.先做NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F ---清除TABLES的舊規則
iptables -t nat -F ----清除NAT TABLES的舊規則
iptables -t nat -A POSTROUTING -s 10.10.10.77/32 -o eth0 -j SNAT --to 192.168.51.35 ---替10.10.10.77 作NAT
iptables -t nat -A POSTROUTING -s 10.10.10.99/32 -o eth0 -j SNAT --to 192.168.51.35 ---替10.10.10.99 作NAT
為流量控制做基於FW過濾器的標記
iptables -I PREROUTING -t mangle -p tcp -s 10.10.10.77/32 -j MARK --set-mark 1
iptables -I PREROUTING -t mangle -p tcp -s 10.10.10.99/32 -j MARK --set-mark 2
2.上傳
先為上傳速率做流量控制
KERNEL要求2.4.18以上,所以不够的要升级
由於只能控制網卡傳送封包的速率 所以上傳速率的限制要做在eth0上
刪除舊的陣列
tc qdisc del dev eth0 root
加入一個根陣列 速率用網卡的速率10Mbit
tc qdisc add dev eth0 root handle 100: cbq bandwidth 10Mbit avpkt 1000
加入一個根CLASS
tc class add dev eth0 parent 100:0 classid 100:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded
加入一個子CLASS(10.10.10.77)速率限制為5Mbit
tc class add dev eth0 parent 100:1 classid 100:2 cbq bandwidth 10Mbit rate 5Mbit allot 1513 weight 500Kbit prio 5 maxburst 8 avpkt 1000 bounded
加入一個子CLASS(10.10.10.99)速率限制為64Kbit
tc class add dev eth0 parent 100:1 classid 100:3 cbq bandwidth 10Mbit rate 64Kbit allot 1513 weight 32Kbit prio 5 maxburst 8 avpkt 1000 bounded
設定陣列規則
tc qdisc add dev eth0 parent 100:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 100:3 sfq quantum 1514b perturb 15
把陣列和FW過濾器映射起來 其中handle 1 的1是開使用iptables 做的標記(mark 1),handle 2 的2也是開始用iptables 做的標記(mark 2)
tc filter add dev eth0 parent 100:0 protocol ip prio 1 handle 1 fw classid 100:2
tc filter add dev eth0 parent 100:0 protocol ip prio 2 handle 2 fw classid 100:3
3.下載
接下來限制下載的流量控制 过滤器是用u32
刪除舊的陣列
tc qdisc del dev eth1 root
加入一個根陣列 速率用網卡的速率10Mbit
tc qdisc add dev eth1 root handle 200: cbq bandwidth 10Mbit avpkt 1000
加入一個根CLASS
tc class add dev eth1 parent 200:0 classid 200:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded
加入一個子CLASS(10.10.10.77)速率限制為5Mbit
tc class add dev eth1 parent 200:1 classid 200:2 cbq bandwidth 10Mbit rate 5Mbit allot 1513 weight 500Kbit prio 5 maxburst 8 avpkt 1000 bounded
加入一個子CLASS(10.10.10.99)速率限制為64Kbit
tc class add dev eth1 parent 200:1 classid 200:3 cbq bandwidth 10Mbit rate 64Kbit allot 1513 weight 32Kbit prio 5 maxburst 8 avpkt 1000 bounded
設定陣列規則
tc qdisc add dev eth1 parent 200:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth1 parent 200:3 sfq quantum 1514b perturb 15
把陣列和FW過濾器映射起來
tc filter add dev eth1 parent 200:0 protocol ip prio 25 u32 match ip dst 10.10.10.77/32 flowid 200:2
tc filter add dev eth1 parent 200:0 protocol ip prio 25 u32 match ip dst 10.10.10.99/32 flowid 200:3
這是照著網路上的文章改的 很多指令其實我不太了解 只是依樣畫葫蘆
不知道是指令上錯誤 還是我在環境架設上有問題
才造成限制效果不佳