為何在 Linux 優先選 TUN,而不是只設 HTTP 代理
許多桌面環境提供「系統代理」或桌面整合套件,可把 Chromium/Firefox 導向本機 HTTP(S) 代理埠。然而大量程式仍會直接發起 TCP/UDP 連線,不讀取 http_proxy 環境變數;遊戲啟動器、部分 Electron 應用、以及幾乎所有未特別適配的 CLI 工具,都屬於這一類。若您只把瀏覽器設好,卻在終端機看到 git clone 逾時,多半就是這個結構性落差。
TUN 模式在核心層建立虛擬介面,把符合策略的出站流量交給 Mihomo 的規則引擎;搭配 dns-hijack 後,DNS 查詢也能與規則一致,降低「解析走國內、連線卻想走代理」的分裂症狀。若您已熟悉 Windows/macOS 圖形客戶端裡的 TUN 開關,可對照閱讀 Clash Verge Rev TUN 模式完整開啟教程,概念相通,差別在於 Linux 上通常以設定檔+系統服務落地。
前置:核心能力、帳號與目錄
Mihomo 的 TUN 實作需要建立虛擬網路介面並改寫路由,實務上常以 root 執行,或透過 systemd 賦予 CAP_NET_ADMIN 等能力。請先確認您使用的發行版已載入 tun 模組(多數桌面內建),並避免在 SSH 工作階段中沒有備援管理路徑的情況下遠端調整路由,以免鎖在自己外面。
建議固定目錄結構,例如執行檔放在 /usr/local/bin/mihomo,設定與資料放在 /etc/mihomo/(內含 config.yaml、Geo 資料與快取)。實際路徑可依組織規範調整,但整篇教學應自洽:下文 ExecStart 與 -d 參數需指向同一資料目錄。
權限提醒:以 root 執行長駐程式前,請確認二進位檔來源可信、校驗檔案雜湊,並僅開放必要的監聽埠與管理 API。
1取得並安裝 Mihomo 二進位檔
Mihomo 上游以開源形式發布,您可從官方 Release 取得對應 linux-amd64、linux-armv8 等建置。下載後將檔案命名為 mihomo、設定執行位元,並複製到 /usr/local/bin/。若發行版提供套件或您慣用容器,亦可採相同設定檔思路,但本章以「單機二進位+systemd」為主軸,方便對照日誌與除錯。
若您的訂閱來自非標準格式,可先透過 Subconverter 訂閱轉換指南 轉成標準 Clash YAML,再併入 proxies 與 proxy-groups 區段,避免把敏感連結貼到不明第三方網頁。
2撰寫最小可用的 config.yaml
以下為示意骨架:請將其中的埠號、策略組名稱、訂閱與規則替換為您實際環境。重點是 mode: rule、完整的 dns 區段,以及 tun.enable: true。
# Minimal Mihomo config example — replace placeholders
port: 7890
socks-port: 7891
mixed-port: 7893
mode: rule
log-level: info
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
nameserver:
- 223.5.5.5
fallback:
- tls://8.8.8.8:853
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
# proxies / proxy-groups / rules — add your subscription and rulesets
stack 可視硬體與核心版本切換為 mixed 或 gVisor;若遇到特定 UDP 應用異常,再逐一嘗試。dns-hijack 搭配 dns.enable 有助於讓查詢與連線規則對齊;細部 Fake-IP、DoH 與 fallback 策略可延伸閱讀 Meta 核心 DNS 防洩漏終極指南。
3建立 systemd 服務並設定開機自啟
在 /etc/systemd/system/mihomo.service 建立單元檔,使程序在開機後自動啟動、異常時自動重啟。下列範例假設以 root 執行、工作目錄為 /etc/mihomo:
[Unit]
Description=Mihomo (Clash.Meta) Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
若您希望以非 root使用者執行,需一併處理 TUN 節點權限、路由寫入與裝置檔 ACL,實作細節因發行版而異;對多數希望「複製貼上即可用」的讀者,root 服務仍是最常見路徑。完成單元檔後執行 systemctl daemon-reload,再以 systemctl enable --now mihomo 啟用並立即啟動。
建議:首次啟動請用 journalctl -u mihomo -f 觀察日誌,確認設定檔語法、訂閱拉取與 TUN 建立是否成功。
4驗證 TUN 與終端機流量
服務啟動後,以 ip route 或 ip tuntap 檢視是否出現 Mihomo 建立的介面與策略路由。接著在同一台機器的終端機執行:
curl -s https://ipinfo.io/ip
git ls-remote https://github.com/MetaCubeX/mihomo.git HEAD
若出口 IP 與節點預期一致、Git 可存取,代表 TUN 已接管典型 CLI 流量。瀏覽器無需再手動指定 Proxy 即可走規則(仍可依需求保留「僅瀏覽器走本機埠」的雙軌,但不必要)。
5桌面分流:規則順序與區域網路繞過
「基礎分流」的核心是規則由上而下匹配:先放行區域網與本機位址,再匹配域名清單與 GEOIP,最後落到 MATCH。建議至少加入私有網段直連,避免印表機、NAS 與路由器管理頁被誤送代理:
rules:
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT
- MATCH,YourProxyGroup
實務上會再疊加遠端規則集(Rule Provider)與細部域名策略;選型可比較 ACL4SSR 與 Loyalsoldier 規則集深度對比。重點是每次只改一類變數:先確定 TUN 與 DNS 正常,再擴充分流規則,否則難以判斷瓶頸何在。
常見問題與排查順序
服務啟動失敗或無法建立 TUN
檢查是否已有其他程式佔用相同 TUN/路由策略(例如第二套 VPN 用戶端),並檢視日誌中的權限錯誤。若曾手動執行過 Mihomo,確認沒有殘留程序鎖定設定檔或埠位。
能連線但域名解析異常
確認 dns.enable、tun.dns-hijack 與系統解析器沒有形成迴圈轉發。必要時暫時改為 redir-host 模式比對症狀,並參考本站 DNS 專文調整 fallback。
與 NetworkManager 或桌面 VPN 衝突
部分桌面環境會在喚醒或切換無線網路時重寫路由表。若遇斷線,可嘗試在事件後重啟 mihomo 服務,或調整 auto-detect-interface 相關設定,並避免同時開啟兩套「全流量」堆疊而不清楚優先順序。
文件與圖形客戶端
純 CLI 部署適合伺服器與進階使用者;若您希望以圖形介面管理訂閱與規則,仍可從 本站下載頁 取得 Windows/macOS/Linux 圖形客戶端,並搭配 設定說明文件 理解共用名詞。GitHub 適合查閱授權、Issue 與版本變更;安裝包取得請以本站為主路徑,與開源倉庫分開看待即可。
結語
在 Linux 上把 Mihomo 跑成常駐服務並啟用 TUN,本質是把三件事做對:可信的二進位與設定、可重啟的 systemd 生命週期、與 DNS/規則一致的分流邏輯。相比只在 shell 裡匯出 http_proxy,TUN 讓瀏覽器與終端機回到同一套路由語言,長期維護成本反而更低。
若您同時使用路由器上的閘道方案,請注意不要讓兩層全流量堆疊互相打架;單機實驗時,先在一條路徑上驗證無誤,再疊加複雜度。相較於零散工具鏈,基於 Meta 系核心的 Clash 生態在規則表達與工具支援上更一致;若您尚未在 Linux 桌面體驗過這種「開機即就緒」的代理流程,值得從一個最小設定檔與一個 systemd 單元開始。