顯示具有 SQM 標籤的文章。 顯示所有文章
顯示具有 SQM 標籤的文章。 顯示所有文章

2026年9月9日 星期三

routeros x86 使用cake 必須知道的問題

 

前提,這是以官方的資訊來設定,但也有些旁門,但我建議用官方的做法,旁門,有時候沒有被流量塑型到,也是設定不下300次的經驗


1. 

queue type 中

a. overhead and mpu 這二個選項,多問chatgpt ,gemin claucd 他們的答案有時候不一樣,要給你的環境,是fttb or pppoe . 固定ip 和 pppoe 封包不一樣. 

b.trr 要設定100 不然在臺灣,設定 30 會有youtube 上傳,變得至少慢10倍的問題

c. diffserv 設定diffserv4 的話,在mangle 也要設定相對,不然,你設定了,但沒有封包符合,等於沒意義,mangle 可以設定 dns or http的封包優先. 


nat 祖傳的部份, , wash 不打勾。

很多ai 都會給你答案

下載的部份,一樣,ai 給的大部份一樣

d.重點  bnadwidth limit 不要設定,這個 給 simple queues 這個設定來做

不然你會出現,設定了,沒有意義,把sqm 上傳會破,等於拿不到A 或是只是突然拿到A 


2.  simple 的設定。

1.上下頻寬就自己填,沒什麼大問題

2.重點。Dst. 的部份,AI 會告訴你有的沒有的,但你只要知道,通常網路設定,小企業等級,Dst. 設定是你的Wan port 

如果沒有設定,會造成你  winbox 只能使用mac address  的方式登入,而且至少5套AI 都找不到答案



gemin 剛好問對問題,給了我答案


【客觀事實:MikroTik 官方文件對 dst 屬性的規範】

在 MikroTik 官方文件(Manual:Queue / Simple Queues)中,關於 dst 的預設值與定義如下:

  1. 官方手冊預設值:

    • dst 的預設值是 留空(dst="")。

    • 官方範例在多數單純拓撲(如僅有單一 WAN、單一 LAN 的家用環境)中,確實通常不填寫 dst。

  2. 官方對「留空(未指定)」的行為定義:

    • 當 dst 留空時,代表目的地為 0.0.0.0/0(任意對象)。

    • Simple Queue 的方向性計算是:

      • 上行(Upload):來自 target 的封包(src = target)。

      • 下行(Download):送往 target 的封包(dst = target)。

【架構深度剖析:為什麼官方說可以不設,你在「xxxx」上不設卻會死鎖?】

官方「不需要設定 dst」的前提是:路由器只負責單純的轉發(Forwarding),不包含同網段本機服務與容器。而在你的主機「8964」上,不設定 dst 會直接引發嚴重的核心衝突:

1. 路由器本機管理流量(IP-WinBox)被誤判為「下載流量」

  • 你的路由器本機 IP 為 192.168.11.1,管理 PC 位於 192.168.11.x。

  • 當 PC 連線 WinBox(TCP 8291)時,路由器在 Local Output 鏈回傳 ACK 封包:

    $$\text{Source: } 192.168.11.1:8291 \quad\longrightarrow\quad \text{Destination: } 192.168.11.x$$
  • 這個封包的目的地是 192.168.11.x,完全符合 target=192.168.11.0/24!

  • 當 dst 留空時:排程器將這條內網的回應封包認定為「網際網路下載流量」,強行塞進 cake-veetime-down 佇列!

  • 後果:cake-veetime-down 配置了 cake-wash=yes、diffserv4 與 triple-isolate。內網極低延遲(<0.5ms)的高頻 TCP 8291 握手封包遭到 CAKE 洗刷標記並強制排隊,直接導致 TCP 握手超時破裂,IP-WinBox 斷線死鎖(只能走 L2 的 MAC-WinBox 逃生)。

2. LAN 存取本機 Docker 服務被外網頻寬限速(誤殺)

  • 你的「8964」運行了大量 Docker 容器(AdGuard Home 在 172.17.0.xx,Immich 在 192.168.11.xx,HA 在 192.168.11.xx)。

  • 當內網 PC 備份相片到 Immich 或串流 Jellyfin 時,若 dst 留空,這些本應在 LAN 內部以 2.5G/10G 線速傳輸的流量,全部會被扣進 CAKE 佇列,被限縮至 45M/90M。

【工程結論:為什麼必須設定 dst=ether3-wan?】

當明確宣告 dst=ether3-wan 時:

  • 上行:只有從 target 發出、且確定從 ether3-wan 出口路由至外網的封包才算上行。

  • 下行:只有從 ether3-wan 進入、送達 target 的封包才算下載。

  • 本地與內網旁路:內網 PC 與路由器本機(192.168.11.x)通訊時,出口介面是 bridge-lan 而非 ether3-wan,完全不符合佇列條件,直接 Bypass 繞過 CAKE。IP-WinBox 恢復微秒級原生線速,連線穩定不斷線。

總結:官方文件說「不需設定」是針對最陽春的拓撲;在具備本機容器、高頻本機服務與多介面轉發的專業環境下,dst=ether3-wan 是劃定外網邊界的關鍵參數。


重點

1. Dst 要設定 wan port 

2.頻寬要在 max limit ,即 simple queues 的選項中設定,不然沒意義

3. types設定 設定 diffserv4  在mangle 也要有相對的設定,不然設定也沒有意義。

exp 設定tos  ef 是 adguardhome 的 ip 或是也可以設定port  ,或是設定 tcp syn













 

2025年11月12日 星期三

routeros cake 封包最佳化


 簡單 實用

 

 

/queue type
add name=cake-down kind=cake cake-bandwidth=95M cake-diffserv=diffserv4 cake-mpu=64 cake-overhead=18
add name=cake-up kind=cake cake-bandwidth=48M cake-diffserv=diffserv4 cake-mpu=64 cake-overhead=18
 

 cake-bandwidth:略低於實際 ISP 速度,避免 bufferbloat

cake-diffserv=diffserv4:小封包優先(DNS/VoIP/遊戲)

cake-mpu=64:保護小封包低延遲

cake-overhead=18:補正 Ethernet/PPPoE 標頭  

  95m 和48m 是我這邊的,你自己要改

 

mss clamp  wan/lan  

# LAN → WAN
add action=change-mss chain=forward out-interface=wanport protocol=tcp tcp-flags=syn new-mss=clamp-to-pmtu comment="LAN→WAN Auto MSS"

# WAN → LAN
add action=change-mss chain=forward in-interface=wanport protocol=tcp tcp-flags=syn new-mss=clamp-to-pmtu comment="WAN→LAN Auto MSS"


  • 雙向 LAN ↔ WAN 自動調整 MSS

    放在 forward chain 最上方

    重要,二條不能合併成一條。chatgpt 原本說能,後來設定沒有效果 

     




  • 2.3 Packet Marking(上下行封包標記給 queue tree) 

     

    /ip firewall mangle 

    add action=mark-packet chain=forward in-interface=wanport new-packet-mark=download passthrough=yes comment="download: WAN→LAN"
    add action=mark-packet chain=forward out-interface=wanport new-packet-mark=upload passthrough=yes comment="upload: LAN→WAN"
     

     

    passthrough=yes 確保封包能被後續規則處理

    download/upload 對應 queue tree 的 packet-mark

    in-interface 要改你們自己的

     

     

    邏輯

    a.建立 mangle 

     b.建立 queue types

    使用 Kind cake 自動智慧化 "SQM"  

    c.用 queues > tree 設定 global 上下




    更新

     /queue type
    add cake-ack-filter=filter cake-autorate-ingress=yes cake-diffserv=diffserv8 cake-mpu=64 cake-overhead=18 \
        kind=cake name=cake-down
    add cake-ack-filter=filter cake-autorate-ingress=yes cake-diffserv=diffserv8 cake-mpu=64 cake-overhead=18 \
        kind=cake name=cake-up

    前提 cpu 效能高


    以上是 chatgpt 

    以下是 G3 最佳化

    cake-flowmode 是 CAKE 演算法的核心,決定了路由器如何將流量分類並進行「隔離」。

    簡單來說,這決定了是「讓每台電腦公平」,還是「讓每個應用程式(連線)公平」。

    以下是各個模式的詳細說明與適用場景:

    1. triple-isolate (三重隔離) —— ★★★ 強烈推薦 (預設值)

    這是 CAKE 最強大的模式,也是我建議您使用的模式。

    • 運作方式:它會同時檢查「來源 IP」、「目的 IP」以及「通訊協定 (5-tuple)」。它將流量分為「大流量 (Bulk)」和「小流量 (Sparse)」。

    • 效果:

      • 即使是同一台電腦,正在全速下載 BT (大流量),同時在玩遊戲或 Ping (小流量)。

      • CAKE 會識別出這兩個是不同的「流」,並讓遊戲的小封包優先通過,不被自己的下載塞住。

    • 適合:您的需求(極限使用 + 保護小流星)。它能防止單一應用程式霸佔所有頻寬。


    2. dual-srchost (雙重來源主機)

    • 運作方式:主要根據 來源 IP (Source IP) 來進行公平分配,同時也會看目的 IP。

    • 效果:強制讓發送端「每台設備」獲得公平的頻寬,不管該設備開了多少條連線。

    • 適合:上傳 (Upload) 方向。

      • 防止家中某一台手機在備份照片到雲端時,把其他人的上傳頻寬全部吃光。

    3. dual-dsthost (雙重目的主機)

    • 運作方式:主要根據 目的 IP (Destination IP) 來進行公平分配,同時也會看來源 IP。

    • 效果:強制讓接收端「每台設備」獲得公平的頻寬。

    • 適合:下載 (Download) 方向。

      • 防止某一台電腦在下載 Steam 遊戲時,導致其他人在看 Netflix 變模糊。它會強迫下載者讓出一部分頻寬給其他人。


    4. flowblind (流量盲) —— ❌ 不推薦

    • 運作方式:不區分流量是誰發的、去哪裡的。先進先出 (FIFO) 或簡單的隨機分配。

    • 後果:如果有一個 BT 下載開了 500 個連線,它就會搶贏只有 1 個連線的網頁瀏覽。

    • 適合:幾乎不適合現代家用/商用網路,除非你想節省極微小的 CPU 資源。


    5. src-ip (僅來源 IP) & dst-ip (僅目的 IP)

    • 運作方式:這是 dual- 模式的簡化版,只看單一方向的 IP hash。

    • 缺點:在大量 NAT 環境下,雜湊 (Hash) 可能會碰撞,導致某些運氣不好的 IP 被誤判在一起排隊。

    • 建議:既然你是 x86,效能足夠,直接用 dual- 系列或 triple-isolate 即可,不需要用這種簡化版。


    總結:針對您的選擇建議

    您提到**「不需要平均分配,極限使用網路即可,但不要塞住小流星」**。

    這句話的技術翻譯就是:不要針對「設備 (Host)」做死板的公平限制,而是要針對「連線行為 (Flow)」做智慧管理。

    • 最佳選擇:triple-isolate

      • 原因:它允許單一設備跑滿 100% 頻寬(如果沒有其他人在用)。但只要有新的「小流星」(例如遊戲封包)進來,它會被識別為一個新的「稀疏流 (Sparse Flow)」,直接插隊優先處理。

    指令再次確認 (針對您的需求):

    Mikrotik
    /queue type
    set [ find name=cake-aggressive-down ] cake-flowmode=triple-isolate
    set [ find name=cake-aggressive-up ] cake-flowmode=triple-isolate

     

    /queue type
    add cake-diffserv=diffserv4 cake-memlimit=256.0MiB cake-mpu=64 cake-nat=yes cake-overhead=18
    cake-rtt-scheme=internet kind=cake name=cake-aggressive-down
    add cake-ack-filter=filter cake-diffserv=diffserv4 cake-memlimit=256.0MiB cake-mpu=64 cake-nat=
    yes cake-overhead=18 cake-rtt-scheme=internet cake-wash=yes kind=cake name=cake-aggressive-up

     

    套用在 simple 就可以了
    記得 overhead 每個都不一樣,pppoe 我的是 dhcp server 配發 wan ip


    這部份設定好,就已經有SQM 最佳了,不用管其他

     

     

    配合 mangle 小封包優先  
    add action=change-dscp chain=postrouting comment="Boost Small TCP ACK \E5\8A\A0\E9\80\9F TCP ACK (
    \E5\B0\8F\E5\B0\81\E5\8C\85) - \E9\98\B2\E6\AD\A2\E4\B8\8A\E5\82\B3\E6\BB\BF\E8\BC\89\E6\99\82
    \E4\B8\8B\E8\BC\89\E5\B4\A9\E7\9B\A4" new-dscp=46 out-interface-list=WAN packet-size=0-128
    protocol=tcp tcp-flags=ack


    Boost TCP SYN 加速 TCP SYN - 優先處理連線建立 (Handshake)
    add action=change-dscp chain=postrouting comment="Boost TCP SYN \E5\8A\A0\E9\80\9F TCP SYN - \E5

    \84\AA\E5\85\88\E8\99\95\E7\90\86\E9\80\A3\E7\B7\9A\E5\BB\BA\E7\AB\8B (Handshake)" new-dscp=
    46 out-interface-list=WAN protocol=tcp tcp-flags=syn

    沒得改了
    小封包優先 不塞車

    花了大概6小時一斷測試