常見需求:手上有一臺線路好但 IP 不乾淨的中轉,和一臺原生 IP、直連卻繞遠的落地。想讓流量先走中轉再到落地,兩跳串成一條鏈。mihomo 提供兩種寫法,用途略有不同。
寫法一:relay 分組
最直觀的一種,在 proxy-groups 裡建一個 relay 型別的組,按順序列出要串的節點:
proxy-groups:
- name: Chain
type: relay
proxies:
- Transit-HK
- Landing-JP
流量順序就是列表順序:本機 → Transit-HK → Landing-JP → 目標站點。規則裡把出口指向 Chain 即可,其它什麼都不用改。
relay 組裡放的必須是具體節點,不是別的分組。想讓某一跳可切換,用下面的 dialer-proxy 寫法。
寫法二:節點級的 dialer-proxy
更靈活的做法是在落地節點上加一個 dialer-proxy 欄位,宣告「這個節點的出站連線先經過誰」:
proxies:
- name: Landing-JP
type: vless
server: jp.example.com
port: 443
dialer-proxy: Transit
這裡的 Transit 可以是一個節點名,也可以是一個分組名。寫成分組名時,中轉那一跳就能在組裡自由切換,而落地保持不變——這是 relay 做不到的。
代價要算清楚
- 延遲是加法:兩跳的 RTT 直接相加,鏈越長越慢。測速頁面顯示的是到落地的整條鏈路延遲,別拿它跟單跳節點比。
- 頻寬取瓶頸:整條鏈的速度等於最慢那一跳,中轉限速 20 Mbps,落地再快也是 20。
- 可用性是乘法:任何一跳掛掉整條鏈就斷。
- UDP 要每跳都支援:有一跳不轉發 UDP,整條鏈的 UDP 就沒了。遊戲場景先看UDP 與遊戲最佳化。
所以鏈式代理不是加速手段。只有當中轉確實最佳化了跨境那一段(比如 IPLC、BGP 中轉),疊加起來才可能比直連落地快;否則多一跳就是純虧。
確認鏈路真的生效
- 先分別測兩跳:把 Transit 和 Landing 各自設為出口,確認單獨都能連通。跳過這步,出問題時你分不清是哪一段壞了。
- 串好之後打開「連線」頁面,點開任意一條連線看鏈路資訊,應該能看到兩個節點名依次出現。
- 命令列
curl ip.sb,返回的應該是落地節點的 IP,不是中轉的。
只想給特定網站走鏈式、其它照常,在規則裡單獨指向這個組就行,寫法見自定義規則大全。分組型別本身的區別,參考配置檔案結構詳解。