基於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的學習筆記,主題不一。
若有理解不對的地方,歡迎留言指教!
若喜歡我的文章,歡迎贊助支持,您的支持將會成為我繼續創作的動力!

留言
avatar-img
留言分享你的想法!
avatar-img
Violet旅遊札記
37會員
72內容數
記錄每一次珍貴的旅行,讓回憶變成永恆 這裡沒有華麗的詞藻,卻有最真實的筆記 札記撰寫耗時,願我有動力一直寫下去! ※本沙龍每次只會挑其中一個專題來發佈文章,每隔三週的週五為發佈日,若未發佈文章,下一個發佈日就是三週後,希望大家可以多多支持,也歡迎留言指教,您的留言或愛心都是Violet持續創作的寶貴動力唷~
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
玩完PVE到搭個NAS,今次用OpenMediaVault。 又係Debian base,太懶,係咁禁Next,一大隻Partition過,結果中晒伏。 Storage/File Systems 搵唔到 / 個file system,Google左輪,搵唔到。試下搞下fstab,除左會開
Thumbnail
玩完PVE到搭個NAS,今次用OpenMediaVault。 又係Debian base,太懶,係咁禁Next,一大隻Partition過,結果中晒伏。 Storage/File Systems 搵唔到 / 個file system,Google左輪,搵唔到。試下搞下fstab,除左會開
Thumbnail
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
Thumbnail
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
Thumbnail
本教程將引導您在 Ubuntu 系統上啟用 SSH、配置防火牆規則以允許入站連接,並更改預設 SSH 連接埠以增強安全性。包括更新系統、安裝OpenSSH伺服器、更改連接埠、設定防火牆、檢查規則和重新啟動服務等步驟。
Thumbnail
本教程將引導您在 Ubuntu 系統上啟用 SSH、配置防火牆規則以允許入站連接,並更改預設 SSH 連接埠以增強安全性。包括更新系統、安裝OpenSSH伺服器、更改連接埠、設定防火牆、檢查規則和重新啟動服務等步驟。
Thumbnail
當大量的網路封包在有限的頻寬中傳輸,總有一些服務的封包會因為搶不過其他封包而造成卡頓,例如玩遊戲時,若同時也在下載其他大型檔案,就會造成遊戲卡頓甚至斷線。這時候客製化QOS來決定哪些封包能優先被傳送,就能有效地提升指定服務的順暢度,進而提升使用者在網路上的體驗。 本篇文章接介紹如何在OpenW
Thumbnail
當大量的網路封包在有限的頻寬中傳輸,總有一些服務的封包會因為搶不過其他封包而造成卡頓,例如玩遊戲時,若同時也在下載其他大型檔案,就會造成遊戲卡頓甚至斷線。這時候客製化QOS來決定哪些封包能優先被傳送,就能有效地提升指定服務的順暢度,進而提升使用者在網路上的體驗。 本篇文章接介紹如何在OpenW
Thumbnail
燒錄方式可用兩種: 拆開直接用USB to TTL燒 以OTA方式燒錄 以OTA方式燒錄,請先去程式碼加上web server,並OTA一次,之後輸入設備IP進入網頁,再選擇此處的檔案燒錄 此燒錄檔會開啟以下功能: device name後綴mac address web server
Thumbnail
燒錄方式可用兩種: 拆開直接用USB to TTL燒 以OTA方式燒錄 以OTA方式燒錄,請先去程式碼加上web server,並OTA一次,之後輸入設備IP進入網頁,再選擇此處的檔案燒錄 此燒錄檔會開啟以下功能: device name後綴mac address web server
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News