【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

第 1 頁,共 2 頁 1 2 末頁末頁
顯示結果從第 1 筆 到 10 筆,共計 11 筆
  1. #1
    果然翁 apage 的大頭照
    註冊日期
    2004-09-26
    討論區文章
    246

    【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 ( kernel 2.6.14)

    這是小弟參考網路上資料所實作的心得,
    當然做好之後也有回覆原文,不過卻沒多少回應,
    因此想說自己來宣傳一下,

    於是我開始重編核心...以下是成功的步驟略述:

    1. 到 http://www.kernel.org/ 找 Kernel 最新版
    2. 下載並解壓縮
    3. 到 http://l7-filter.sourceforge.net/L7-HOWTO-Netfilter 下載 Layer 7 patch
    4. 解壓縮 kernel 與 Layer 7 patch
    5. 將解壓縮的 patch copy 到 kernel 目錄下,輸入 patch 與 Kernel 的合體指令:patch -p1 < patch_name
    6.接著在 kernel 的目錄下輸入:
    a.make mrproper
    b.make clean
    c.cp /boot/之前的config ./(如果沒有也無所謂,直接下步)
    d.make menuconfig
    7.選擇核心選項,如果因為核心功能沒開啟而造成以後的失敗,那可是很可惜的,所以請多多留意選項。記住 network 裡面有 qos 與 Layer 7 選項都要選成[*],保險一點乾脆 network 功能統統都弄成[*]也沒差
    8.選好後儲存離開
    9.開始編譯
    a.make bzImage
    b.make modules
    c.make modules_install
    d.make install
    10.順利的話重開機即可順利運作。
    (可將編譯時的訊息儲存到 txt 中,將可更容易看到一些錯誤訊息幫助 debug)

    接著要重新安裝 iptables
    只要一邊照著下面安裝就可以了,
    1.make KERNEL_DIR=/你的 kernel 擺放路徑
    2.make install KERNEL_DIR=/你的 kernel 擺放路徑
    若編譯過後 iptables 底下
    並沒有 libipt_layer7.so 的話,
    (重新安裝後此檔會出現在 iptables 在 /user/local/lib,iptables執行檔則是 /usr/local/sbin)
    需要先編輯 kernel 目錄底下的:
    /net/ipv4/netfilter/ipt_layer7.c
    底下,並搜尋到:
    static int num_packets = ?? (並不是真的寫 ?? 只是我忘了它原本是多少了。)
    這個 ?? 應該是原本的預設值,把它改為 8 再重新編譯 iptables 即可。

    接著就可以開始定義規則了,以下是我定義的規則檔:

    (公司是使用 12M/1M ADSL線路)
    語法:
    #/bin/sh
    #清除規則
    echo 開始執行QOS..................
    echo 1.清除規則
    tc qdisc del dev eth0 root 2>/dev/null
    tc qdisc del dev eth1 root 2>/dev/null
    echo 2.定義最頂層
    #定義上傳最頂層根部規則
    tc qdisc add dev eth0 root handle 10: htb default 20
    #定義10:1總上傳頻寬
    tc class add dev eth0 parent 10: classid 10:1 htb rate 100kbps ceil 100kbps
    #這裡是各種分類
    echo 3.開始分類
    #定義10:20 FTP 上傳
    tc class add dev eth0 parent 10:1 classid 10:10 htb rate 30kbps ceil 50kbps prio 0
    #定義10:10 網頁瀏覽上傳頻寬
    tc class add dev eth0 parent 10:1 classid 10:20 htb rate 30kbps ceil 50kbps prio 1
    #定義20:40 MSN傳送檔案速度
    tc class add dev eth0 parent 10:1 classid 10:30 htb rate 25kbps ceil 38kbps prio 2
    #定義10:30 P2P 上傳
    tc class add dev eth0 parent 10:1 classid 10:40 htb rate 25kbps ceil 38kbps prio 3
    echo 4.佇列宣告
    #定義佇列規則
    #給上傳
    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 qdisc add dev eth0 parent 10:40 handle 104: pfifo
    echo 5.定義標籤
    #過濾器
    #設定貼有"10"標籤的封包歸類於"10:10"(以此類推)
    #給上傳
    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
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
    echo 6.清除 iptables mangle
    #清除 mangle 內所有規則
    /usr/local/sbin/iptables -F -t mangle
    
    echo ...........................完成!!
    程式執行結果:如果語法沒錯的話將會看到以下畫面:
    (是我拿來 debug 用的啦)
    語法:
    開始執行QOS..................
    1.清除規則
    2.定義最頂層
    3.開始分類
    4.佇列宣告
    5.定義標籤
    6.清除 iptables mangle
    ...........................完成!!
    接著開始執行 iptables 語法,貼上標籤之後就可實際運作!
    語法:
    #layer7 QOS
    #P2P
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto edonkey -j MARK --set-mark 40
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 40
    /usr/local/sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto edonkey -j MARK --set-mark 40
    /usr/local/sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 40
    #上傳
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j MARK --set-mark 10
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto ftp -j MARK --set-mark 20
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto msn-filetransfer -j MARK --set-mark 30
    是在 nforce 2 的板子 Athlon XP 2500+
    1G RAM Linux版本為 Cent OS 4.2 上面運作成功,
    把 P2P 上傳成功限制住了,但會有些小誤差,
    例如限定 25k 上傳就會在 22k 與 28k 前後飄..
    不知道是不是網路卡不好還是 CPU 不夠力的關係,
    因為我只是用幾個智邦與螃蟹的網路卡做的..
    若有人也實作成功的,歡迎意見交流一下...

    後記:編譯核心選項時,可以把一些沒用到的項目都刪除,
    像是 wireless 或是 IPV6 之類等等用不到的都可以移除,
    不要笨笨的甚麼都選...



  2. #2
    散人 rushoun 的大頭照
    註冊日期
    2001-07-29
    討論區文章
    5,920
    先收下了,後面再慢慢看,謝謝了!
    ========================================
    用智慧處理事情,用慈悲對待他人。(節錄 聖嚴法師與人文對話一書內容)

  3. #3
    果然翁 apage 的大頭照
    註冊日期
    2004-09-26
    討論區文章
    246
    晚上看了看有關 iptables 實作 vpn 的書,覺得步驟差不多,等下次有空來玩玩 VPN 的好了...

  4. #4
    會員
    註冊日期
    2005-04-18
    所在地區
    專線,ADSL,FTTB,FTTH
    討論區文章
    125

    回覆: 【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

    L7使用在頻寬控管上確實有效,統計表出來的確會有一些誤差.但這是UDP封包判斷上的有時會有漏網之魚.不過無傷大雅


    還有這是您的實際範例,也是一般書籍或討論區的標準範例
    #P2P
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto edonkey -j MARK --set-mark 40
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 40
    /usr/local/sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto edonkey -j MARK --set-mark 40
    /usr/local/sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 40
    #上傳
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j MARK --set-mark 10
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto ftp -j MARK --set-mark 20
    /usr/local/sbin/iptables -t mangle -A PREROUTING -m layer7 --l7proto msn-filetransfer -j MARK --set-mark 30


    PCZONE上所有討論QOS實作上的進階問題,為何無人提出
    大家也可到酷學園.鳥哥大大上看看,也為何無人提出


    如您的範例而言均是針對所有的IP做P2P或者某些服務使用共同的頻寬.
    很有可能漏網之魚的封包會吃掉您的未定義所有頻寬(通常有可能是全部頻寬)

    如果再增加某些單獨IP上網時的頻寬限制,如果您把這些IP放在
    PREROUTING 及 POSTROUTING的最下面時,您實際再測試看看
    會發生什麼結果.....很有可能P2P或者某些服務配的頻寬會失效.

    這個問題連市場上很多號稱多WAN有頻寬管理的設備上也都沒有這項的功能,何況還加上L7功能頻寬管理.

    本人著作文章
    http://www.pczone.com.tw/showthread.php?t=110123
    此文章於 2006-06-07 10:24 AM 被 needmaster 編輯。

  5. #5
    會員
    註冊日期
    2006-05-15
    所在地區
    ADSL 8m
    討論區文章
    10

    回覆: 【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

    好文章啊
    對於要diy的人很實用



  6. #6
    灌水會員
    註冊日期
    2006-01-26
    所在地區
    不是很快也不算慢,可以上網就對了。
    討論區文章
    481

    回覆: 【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

    收下,再研究看看!

  7. #7
    會員
    註冊日期
    2006-05-17
    所在地區
    ADSL 2M/512
    討論區文章
    1

    回覆: 【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

    有一個問題想請教
    第二層的類別中如果超過十個以上時
    classid要如何設定呢?
    10:10~10:90以後要如何設呢???

    10:100之後不是要給第三層用的嗎???
    語法:
    echo 3.開始分類
    #定義10:20 FTP 上傳
    tc class add dev eth0 parent 10:1 classid 10:10 htb rate 30kbps ceil 50kbps prio 0
    #定義10:10 網頁瀏覽上傳頻寬
    tc class add dev eth0 parent 10:1 classid 10:20 htb rate 30kbps ceil 50kbps prio 1
    #定義20:40 MSN傳送檔案速度
    tc class add dev eth0 parent 10:1 classid 10:30 htb rate 25kbps ceil 38kbps prio 2
    #定義10:30 P2P 上傳
    tc class add dev eth0 parent 10:1 classid 10:40 htb rate 25kbps ceil 38kbps prio 3
    echo 4.佇列宣告
    #定義佇列規則
    #給上傳
    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 qdisc add dev eth0 parent 10:40 handle 104: pfifo
    echo 5.定義標籤
    #過濾器
    #設定貼有"10"標籤的封包歸類於"10:10"(以此類推)
    #給上傳
    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
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
    以上類別的訂定可否改為
    語法:
    echo 3.開始分類
    #定義10:20 FTP 上傳
    tc class add dev eth0 parent 10:1 classid 10:10 htb rate 30kbps ceil 50kbps prio 0
    #定義10:10 網頁瀏覽上傳頻寬
    tc class add dev eth0 parent 10:1 classid 10:11 htb rate 30kbps ceil 50kbps prio 1
    #定義20:40 MSN傳送檔案速度
    tc class add dev eth0 parent 10:1 classid 10:12 htb rate 25kbps ceil 38kbps prio 2
    #定義10:30 P2P 上傳
    tc class add dev eth0 parent 10:1 classid 10:13 htb rate 25kbps ceil 38kbps prio 3
    echo 4.佇列宣告
    #定義佇列規則
    #給上傳
    tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
    tc qdisc add dev eth0 parent 10:11 handle 102: pfifo
    tc qdisc add dev eth0 parent 10:12 handle 103: pfifo
    tc qdisc add dev eth0 parent 10:13 handle 104: pfifo
    echo 5.定義標籤
    #過濾器
    #設定貼有"10"標籤的封包歸類於"10:10"(以此類推)
    #給上傳
    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:11
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:12
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:13

  8. #8
    會員
    註冊日期
    2006-10-26
    所在地區
    TANET
    討論區文章
    2

    回覆: 【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

    請問我執行iptables指令後出現下列訊息
    "can't initialize iptables table 'mangle':Table does not exist"
    請問哪裡出了問題呢?

  9. #9
    果然翁 apage 的大頭照
    註冊日期
    2004-09-26
    討論區文章
    246

    回覆: 【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

    引用 作者:asrga 瀏覽文章
    有一個問題想請教
    第二層的類別中如果超過十個以上時
    classid要如何設定呢?
    10:10~10:90以後要如何設呢???
    抱歉這麼晚才回覆,不過我的確沒時間去試驗這個問題,
    因為公司的機器不允許我隨時改東西...
    我想就由有空的人試驗,應該馬上就知道答案了吧...

  10. #10
    會員
    註冊日期
    2009-07-12
    討論區文章
    1

    回覆: 【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄 (Kernel 2.6.14)

    這個好~先收下了~
    感謝分享~



類似的主題

  1. 【教學】Coyote Linux 頻寬管制 (QoS) 設定教學
    作者:linux_xp 所在討論版:-- 網 路 技 術 版
    回覆: 111
    最後發表: 2011-04-08, 02:33 PM
  2. Linux Cluster 叢集系統實作成功紀錄
    作者:jeantean 所在討論版:-- 網 路 技 術 版
    回覆: 2
    最後發表: 2009-05-16, 09:32 AM
  3. 【問題】Layer ? 以上支援VoIP QOS
    作者:karo 所在討論版:-- 網 路 硬 體 版
    回覆: 6
    最後發表: 2008-09-03, 06:44 PM
  4. Gentoo Linux 下跑 2.4 Kernel + NPTL
    作者:dou0228 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 5
    最後發表: 2004-04-09, 12:04 PM
  5. 關於FREEBSD or linux 的kernel 的大小?
    作者:chengmou 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 3
    最後發表: 2002-01-13, 02:39 PM

 

layer 7 附加檔

linux voip qos

qos youtube mikrotik

qos heimi

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •