觀看單一文章
舊 2005-10-04, 08:35 PM   #7
linux_xp
Kree
 
linux_xp 的大頭照
 
註冊日期: 2002-01-19
文章: 2,660
linux_xp 的星途閃耀linux_xp 的星途閃耀linux_xp 的星途閃耀linux_xp 的星途閃耀linux_xp 的星途閃耀linux_xp 的星途閃耀

引用:
作者: kevin0615
我的ADSL 1m/64k ,用上面的範例去修改,一台電腦每次上網開網頁時,另一台電腦在玩天堂2就會delay 2~3秒,可以幫我看一下哪邊有錯。
資訊太少,無法判斷

有幾台電腦需要頻寬管制?
網卡編號,哪個是對外,那個是對內?
頻寬分配表?

針對你的情況,以下為範例 :
(因為資訊不足,所以具體情況,都是用猜的,不一定完全符合你的環境,可能需要修改後才能套用)

STEP.1
首先要查出,對外網卡(管制上傳),對內網卡(管制下載),它們的編號是多少





如圖所示,這種情況的話,eth0 是對內網卡(管制下載),而 eth1 就是對外網卡(管制上傳)。

網卡的編號不是絕對的,可能每台機器都不相同,所以先觀察網卡編號,判斷哪個是「對外網卡」,那個是「對內網卡」。


STEP.2
先構想要如何分配頻寬

1M/64K,總下載 128KB/s,總上傳 8KB/s

假設只有兩台電腦好了,分別為:
192.168.1.1:玩天堂2專用的
192.168.1.2:看網頁用的

那麼規劃出 3 個類別:
---------------------------------------
第一台電腦 - 玩天堂2用類別:線上遊戲要不LAG 最少要保證有4KB/s 上傳能力

第二台電腦 - 看網頁用類別:看網頁首重下載,只要能動即可,速度不重要

default 類別:為保留可能性額外加入的電腦,特地保留這個類別。例如有可能家中原本只有兩台電腦,某天臨時又插入一台需要上網,它就會吃 default 的類別頻寬。但是這個類別只是有備無患,並不一定會用到,所以保證頻寬設0。




STEP.3

tc 指令部份: (編輯任意檔:/etc/rc.d/rc.local )
語法:
#!/bin/sh
#
# Coyote local command init script

#上傳方面
# 清除 eth1 所有佇列規則
tc qdisc del dev eth1 root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev eth1 root handle 10: htb default 30

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth1 parent 10: classid 10:1 htb rate 8kbps ceil 8kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 4kbps ceil 6kbps prio 0
tc class add dev eth1 parent 10:1 classid 10:20 htb rate 2kbps ceil 4kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:30 htb rate 0kbps ceil 2kbps prio 2

# 定義各葉類別的佇列規則
tc qdisc add dev eth1 parent 10:10 handle 101: pfifo
tc qdisc add dev eth1 parent 10:20 handle 102: pfifo
tc qdisc add dev eth1 parent 10:30 handle 103: pfifo
t
# 設定過濾器
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 30 fw classid 10:30


# QoS eth0 下載方面
#

# 清除 eth0所有佇列規則
tc qdisc del dev eth0 root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev eth0 root handle 10: htb default 70

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth0 parent 10: classid 10:1 htb rate 128kbps ceil 128kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 32kbps ceil 120kbps prio 0
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 8kbps ceil 96kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:30 htb rate 0kbps ceil 88kbps prio 2

# 定義各葉類別的佇列規則
tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
tc qdisc add dev eth0 parent 10:20 handle 102: pfifo
tc qdisc add dev eth0 parent 10:30 handle 103: pfifo


# 設定過濾器
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30

STEP.4

iptables 設定方面: (高級防火牆配置 - 編輯自訂防火牆規則)
語法:
# uploads
# 設定上傳方面,先利用 iptables 給封包貼標籤,再交由 fw 過濾器進行過濾
 
iptables -t mangle -A PREROUTING -s 192.168.1.1 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -s 192.168.1.2 -j MARK --set-mark 20

# downloads
# 下載方面

iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j MARK --set-mark 20

大致上就是這樣子
由於提供的資訊不足,所有環境的情況都是假設的
以上範例僅供參考,可能修要修改後才能套用

--------------------------------------------------------------

有時候指令看起來好像很長一大串,很複雜
其實去掉註解,就剩沒幾行了

再仔細去觀察去掉註解的指令串,可以發現
其實很多地方都是重複的,只有幾個數字在改變而已

仔細觀察一下,多實作幾次,就可以熟練了

linux_xp 目前未上線   回覆時引用此篇文章