基於OpenWRT之QOS排程|設定QOS優化家用網路

閱讀時間約 10 分鐘
當大量的網路封包在有限的頻寬中傳輸,總有一些服務的封包會因為搶不過其他封包而造成卡頓,例如玩遊戲時,若同時也在下載其他大型檔案,就會造成遊戲卡頓甚至斷線。這時候客製化QOS來決定哪些封包能優先被傳送,就能有效地提升指定服務的順暢度,進而提升使用者在網路上的體驗。


本篇文章接介紹如何在OpenWRT系統上設置QOS

延伸閱讀

於OpenWRT系統實現OpenVPN客户端


OpenWRT的QOS架構

要掌握QOS的設定方式,首先要了解Linux系統的netfilter、iptables、routing table及tc。

  • iptables : 屬於user space,定義iptable指令集的下法,內建三種以上不同的table可以使用,分別為1)專門進行封包過濾用的filter表、2)進行nat封包網址轉換用的nat表,以及3)進行封包修改用的mangle表。還可將符合條件的封包標記(MARK)起來,再可配合routing table去指定路由,功能非常強大。編譯出來的檔案為.so檔。
    (封包標記的實際用法可參考於OpenWRT系統實現OpenVPN客户端文章裡的配置iptables及iptables分流)
  • netfilter : 屬於Kernel space,定義iptable指令集的匹配規則,若封包匹配此規則,回傳成功。編譯出來檔案為.ko檔。
  • routing table : 定義路由表,當iptables裡的MARK與fwmark相等時,封包就會走fwmark所指定的路由表。
  • tc : 流量控管(Traffic Control),用來調整流量的配置,提供限速等功能。


iptables及netfilter的詳細用法這邊不贅述,有時間會再寫一篇介紹。


流量控管(tc)指令

以下是tc的設定方式,在指定的網卡介面中產生若干個佇列,並定義這些佇列的頻寬、優先權及handle number。假設想要把封包導到handle number為100的佇列,只要在iptables裡使用MARK來將該封包標記為100,當MARK與handle number相等時,封包就會被成功導入handle number佇列。

  1. 將指定要配置的兩張網卡名稱存到變數$DEVe及$DEVt,$DEVe為實體網卡eth0;$DEVt為VPN網卡tun0。
#!/bin/sh
DEVe=`uci get network.wan.ifname`
DEVt=tun0
  1. 清空網卡裡的tc規則
#Flush
tc qdisc del dev $DEVe root > /dev/null 2>&1
tc qdisc del dev $DEVt root > /dev/null 2>&1
  1. 建立需要的QOS佇列種類
#Classify for Up link
tc qdisc add dev $DEVt root handle 1: htb default 11 #root 1
tc qdisc add dev $DEVe root handle 1: htb default 31 #root 1
tc class add dev $DEVt parent 1: classid 1:1 htb rate 8Mbit ceil 8Mbit prio 0 #class 1.1
tc class add dev $DEVt parent 1:1 classid 1:11 htb rate 8Mbit ceil 8Mbit prio 1 #1.1.1 Game
tc class add dev $DEVe parent 1: classid 1:2 htb rate 20Mbit ceil 20Mbit prio 2 #class 1.2
tc class add dev $DEVe parent 1:2 classid 1:21 htb rate 20Mbit ceil 20Mbit prio 3 #1.2.1 youtube, live
tc class add dev $DEVe parent 1: classid 1:3 htb rate 10Mbit ceil 10Mbit prio 4 #class 1.3
tc class add dev $DEVe parent 1:3 classid 1:31 htb rate 1Mbit ceil 1Mbit prio 5 #1.3.1 SpeedTest, default
tc class add dev $DEVe parent 1:3 classid 1:32 htb rate 6Mbit ceil 6Mbit prio 6 #1.3.2 https, mail, smtp
tc class add dev $DEVe parent 1:3 classid 1:33 htb rate 2Mbit ceil 2Mbit prio 7 #1.3.3 ftp-data
tc class add dev $DEVe parent 1:3 classid 1:34 htb rate ${DL134}Kbit ceil ${DL134}Kbit prio 8 #1.3.4 80port
#Classify for Down link
#tc class add dev $DEVe parent 1: classid 1:4 htb rate 500Kbit ceil 500Kbit prio 9 #class 1.4
#tc class add dev $DEVe parent 1:4 classid 1:41 htb rate 500Kbit ceil 500Kbit prio 10 #1.4.1
echo "Class OK"
QOS佇列示意圖

QOS佇列示意圖

  1. 設定QOS的演算法SFQ(隨機公平佇列)的重置時間
#SFQ perturb 10 : reset the algorithm after 10 secs
tc qdisc add dev $DEVt parent 1:11 handle 111: sfq perturb 10
tc qdisc add dev $DEVe parent 1:21 handle 121: sfq perturb 10
tc qdisc add dev $DEVe parent 1:31 handle 131: sfq perturb 50
tc qdisc add dev $DEVe parent 1:32 handle 132: sfq perturb 50
tc qdisc add dev $DEVe parent 1:33 handle 133: sfq perturb 50
tc qdisc add dev $DEVe parent 1:34 handle 134: sfq perturb 50
echo "SFQ OK"
  1. 定義iptables裡,被MARK標記過的封包所對應的QOS佇列
#Filter for UL
tc filter add dev $DEVt parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11 #1.1.1 Game
tc filter add dev $DEVe parent 1:0 protocol ip prio 2 handle 2 fw classid 1:21 #1.2.1 youtube, live
tc filter add dev $DEVe parent 1:0 protocol ip prio 3 handle 3 fw classid 1:31 #1.3.1 default
tc filter add dev $DEVe parent 1:0 protocol ip prio 4 handle 4 fw classid 1:32 #1.3.2 http, https, mail, smtp
tc filter add dev $DEVe parent 1:0 protocol ip prio 5 handle 5 fw classid 1:33 #1.3.3 ftp-data
tc filter add dev $DEVe parent 1:0 protocol ip prio 6 handle 6 fw classid 1:34 #1.3.4 80port
tc filter add dev $DEVe parent 1: prio 7 protocol ip u32 match ip dport 80 0xffff flowid 1:34
echo "filter UL OK"

#Filter for DL
#tc qdisc add dev $DEVe ingress
#tc qdisc add dev $DEVe parent 1:41 handle 141: sfq perturb 50
#tc filter add dev $DEVe parent 1:0 protocol ip prio 7 handle 7 fw police rate 100Mbit burst 100M drop flowid 1:41
#echo "filter DL OK"


設定完成後,再回去確認iptables及routing table是否都有做相對應的設置,接著就能利用tcpdump指令來觀察封包是否有被正確的導入所指定的網卡中。


感謝您耐心閱讀~
本專題將會持續收錄Violet的學習筆記,主題不一。
若有理解不對的地方,歡迎留言指教!
若喜歡我的文章,歡迎贊助支持,您的支持將會成為我繼續創作的動力!

34會員
64內容數
記錄每一次珍貴的旅行,讓回憶變成永恆 這裡沒有華麗的詞藻,卻有最真實的筆記 札記撰寫耗時,願我有動力一直寫下去! ※本沙龍每次只會挑其中一個專題來發佈文章,每隔三週的週五為發佈日,若未發佈文章,下一個發佈日就是三週後,希望大家可以多多支持,也歡迎留言指教,您的留言或愛心都是Violet持續創作的寶貴動力唷~
留言0
查看全部
發表第一個留言支持創作者!
Violet旅遊札記 的其他內容
使用者想操作市面上的路由器,能操作的功能都受限於裝置提供商的限制;但若將路由器刷成類似於Linux的OpenWRT文件系統,不但可解決此問題,還有多達1000以上的功能安裝包可供使用者選擇,非常便於使用者開發。 將路由器韌體刷成OpenWRT系統,其實就是在路由器上安裝OpenWRT的概念,常見的方
使用者想操作市面上的路由器,能操作的功能都受限於裝置提供商的限制;但若將路由器刷成類似於Linux的OpenWRT文件系統,不但可解決此問題,還有多達1000以上的功能安裝包可供使用者選擇,非常便於使用者開發。 將路由器韌體刷成OpenWRT系統,其實就是在路由器上安裝OpenWRT的概念,常見的方
本篇參與的主題策展
在職場中,能力與責任的分配常常成為衝突的根源。‘能者多勞’若未能得到相對應的報酬或升遷,可能會導致工作中的不滿與內部矛盾。如何平衡工作中的能力與回報,保持友善的職場環境,是每位管理者與員工都應該思考的問題。工作者應反思自我價值與工作意義,尋找適合自己的工作方式,也是達到職場成功的重要一環。
職場女性常常需要在追求事業與家庭責任之間做出艱難的抉擇,無法時時刻刻陪伴孩子的自責內疚與身為職業女性追求自我的渴望,內心總是掙扎萬分。身為職場女性,我們該如何看見,不論選擇哪一條路,自己的價值都不會因此而削弱。
最近遇到的一位朋友,算是一個國中的同學,不過畢業後大家都沒啥聯繫,突然偶然的相見、聊天談話,知道我的工作後,也提出了相對的問題,首先~就是護理師這個工作,在他們這些非醫療的人物上,覺得護理師就是可以在醫院吹冷氣,不用曬太陽,一個月薪水4-8萬(含夜班)的好職業.............😅
在職場中,能力與責任的分配常常成為衝突的根源。‘能者多勞’若未能得到相對應的報酬或升遷,可能會導致工作中的不滿與內部矛盾。如何平衡工作中的能力與回報,保持友善的職場環境,是每位管理者與員工都應該思考的問題。工作者應反思自我價值與工作意義,尋找適合自己的工作方式,也是達到職場成功的重要一環。
職場女性常常需要在追求事業與家庭責任之間做出艱難的抉擇,無法時時刻刻陪伴孩子的自責內疚與身為職業女性追求自我的渴望,內心總是掙扎萬分。身為職場女性,我們該如何看見,不論選擇哪一條路,自己的價值都不會因此而削弱。
最近遇到的一位朋友,算是一個國中的同學,不過畢業後大家都沒啥聯繫,突然偶然的相見、聊天談話,知道我的工作後,也提出了相對的問題,首先~就是護理師這個工作,在他們這些非醫療的人物上,覺得護理師就是可以在醫院吹冷氣,不用曬太陽,一個月薪水4-8萬(含夜班)的好職業.............😅
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
倉鼠大戰在加密貨幣遊戲領域嶄露頭角,吸引了上百萬玩家。這款遊戲以其吸引人的遊戲機制和口耳相傳的力量而著稱。文章講述了遊戲的特色、獨特功能,以及玩家可能感興趣的未來發展。
Thumbnail
日南町位於中國山地的中央,西與島根縣、南與岡山縣、西南與廣島縣接壤,是連接山陰、山陽的JR伯備線的要道,南部是構成中國山脈脊樑的千米級山脈,北部是緩坡的半平原高原。縣內三大河流之一的日野川發源於本町,流經城鎮中心,其他大小河流從山谷匯入,鄉村分佈在這些河流流域周圍,大部分村莊和耕地位於海拔280m至
Thumbnail
有一隻貓,常在這一帶商店街遊走,並當成自己的地盤,牠就是小偷貓老大。
前言 我不知道還有沒有人記得2021.3.19中美雙方在阿拉斯加舉行的會談。中美雙方代表在拜登政府上台後舉行的首次高層對話時,有相當長的時間是用來隔空喊話、互相批評。雙方的矛盾之深,觀點之異在會談之初即暴露無遺。也是在這場會談中,第一次見到所謂的「基於規則的國際秩序」,那是楊潔箎在美方兩位代表闡述
只要人站在同一艘船、同一條陣線上
Thumbnail
微前端是一種現代前端架構,旨在將大型前端應用拆分為獨立、可獨立部署的小模組。這與微服務在後端的策略相似。 本文將探討微前端的基本概念,以及如何在基於Gin的後端系統中實施它,從而實現真正的全棧模組化。
Thumbnail
有太多避險基金都是秘密進行,結果無止盡的重複研究。為了消除這個痛點,理查.克雷布創立了 Numer.ai,將股市數據進行加密後轉為單純的數字,並開放給上萬名匿名資料科學家。他們可以根據預測結果的回報獲得適當的獎勵,。現在就一起來看看這間公司如何操作這些預測分析、擁有那些特色吧!
Thumbnail
基於不可抗外力而無法完成指引,應該受罰嗎? 在冰球賽播錯國歌事件中,冰協顯然已經盡其所能執行 “指引”,維護國家尊嚴,但最終遭到被主辦方拒絕等不可抗力而無法完成指引。基於這個事實基礎,港協仍然啟動暫停冰協會籍資格是罔顧事實、不合情理、甚至根本荒謬! 當地的主辦方拒絕執行港協的指引在賽前核對國歌,冰
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
倉鼠大戰在加密貨幣遊戲領域嶄露頭角,吸引了上百萬玩家。這款遊戲以其吸引人的遊戲機制和口耳相傳的力量而著稱。文章講述了遊戲的特色、獨特功能,以及玩家可能感興趣的未來發展。
Thumbnail
日南町位於中國山地的中央,西與島根縣、南與岡山縣、西南與廣島縣接壤,是連接山陰、山陽的JR伯備線的要道,南部是構成中國山脈脊樑的千米級山脈,北部是緩坡的半平原高原。縣內三大河流之一的日野川發源於本町,流經城鎮中心,其他大小河流從山谷匯入,鄉村分佈在這些河流流域周圍,大部分村莊和耕地位於海拔280m至
Thumbnail
有一隻貓,常在這一帶商店街遊走,並當成自己的地盤,牠就是小偷貓老大。
前言 我不知道還有沒有人記得2021.3.19中美雙方在阿拉斯加舉行的會談。中美雙方代表在拜登政府上台後舉行的首次高層對話時,有相當長的時間是用來隔空喊話、互相批評。雙方的矛盾之深,觀點之異在會談之初即暴露無遺。也是在這場會談中,第一次見到所謂的「基於規則的國際秩序」,那是楊潔箎在美方兩位代表闡述
只要人站在同一艘船、同一條陣線上
Thumbnail
微前端是一種現代前端架構,旨在將大型前端應用拆分為獨立、可獨立部署的小模組。這與微服務在後端的策略相似。 本文將探討微前端的基本概念,以及如何在基於Gin的後端系統中實施它,從而實現真正的全棧模組化。
Thumbnail
有太多避險基金都是秘密進行,結果無止盡的重複研究。為了消除這個痛點,理查.克雷布創立了 Numer.ai,將股市數據進行加密後轉為單純的數字,並開放給上萬名匿名資料科學家。他們可以根據預測結果的回報獲得適當的獎勵,。現在就一起來看看這間公司如何操作這些預測分析、擁有那些特色吧!
Thumbnail
基於不可抗外力而無法完成指引,應該受罰嗎? 在冰球賽播錯國歌事件中,冰協顯然已經盡其所能執行 “指引”,維護國家尊嚴,但最終遭到被主辦方拒絕等不可抗力而無法完成指引。基於這個事實基礎,港協仍然啟動暫停冰協會籍資格是罔顧事實、不合情理、甚至根本荒謬! 當地的主辦方拒絕執行港協的指引在賽前核對國歌,冰