進階設定 預計閱讀 10 分鐘

Clash 區域網路共享代理:啟用 allow-lan,讓手機與電視使用電腦代理

從 mixed-port 原理、allow-lan 與 bind-address 設定,到防火牆放行及其他裝置代理設定,一次掌握完整步驟。

共享代理的連線方式:裝置連線至電腦的 7890 連接埠

Clash 區域網路共享代理的基本連線方式是:手機或電視向電腦的代理連接埠發出要求,再由電腦上的 Clash 或 mihomo 依目前設定比對規則,選擇代理節點或直接連線。遠端裝置使用的是電腦提供的 HTTP 或 SOCKS 代理入口,不是直接匯入電腦上的訂閱。

本文統一使用以下設定範例:電腦的區域網路 IPv4 位址為 192.168.1.20,手機位址為 192.168.1.35,混合連接埠為 7890。實際操作時請使用自己的電腦位址。電腦可以透過網路線連接路由器,手機則透過 Wi-Fi 連線;重點是兩台裝置能互相存取,不要求使用相同的連線方式。

  • mixed-port:在同一個連接埠接受 HTTP 與 SOCKS 代理連線。本文讓手機使用其中的 HTTP 代理入口。
  • allow-lan:允許其他裝置連入代理。只在電腦啟用「系統代理」,通常不代表區域網路中的裝置也能存取。
  • bind-address:決定代理服務要監聽哪些本機位址,須搭配 allow-lan: true 使用。
  • external-controller:管理 API 的監聽位址,不是手機應填寫的代理位址。

先確認電腦位址、網路隔離與本機代理

找出目前使用中網卡的 IPv4 位址

Windows 可前往「設定」→「網路和網際網路」→目前使用的「Wi-Fi」或「乙太網路」→「網路內容」,查看 IPv4 位址,也可以執行下方指令。若電腦同時安裝虛擬機器、VPN 或 TUN 網卡,請選擇連接家用路由器的實體網卡位址,不要直接複製虛擬網卡位址。

ipconfig

macOS 可前往「系統設定」→「網路」→目前的連線→「詳細資訊」→「TCP/IP」查看 IP 位址。Linux 可執行 ip -4 addr,確認目前乙太網路或無線網卡的 inet 欄位。127.0.0.1 是裝置本身的迴圈位址,手機填入後只會連到手機自己。

確認裝置之間可以互相通訊

  • 先暫時關閉手機的行動數據,並連上可與電腦互通的家用 Wi-Fi。
  • 請勿使用路由器的訪客網路。訪客隔離、AP 隔離或無線用戶端隔離可能會阻止裝置存取電腦。
  • 不同子網路之間需要路由及存取規則;例如 192.168.1.0/24 和 192.168.50.0/24,不會只因為連接同一台路由器就必然互通。
  • 先確認電腦上的 Clash 訂閱可用、已選取節點,且規則模式能正常存取目標網站,再排查共享連線。

建議在路由器的 DHCP 設定中為電腦保留固定租約,例如持續指派 192.168.1.20。如果電腦每次連線後取得的位址不同,手機儲存的代理伺服器位址也要一併更新。

設定 allow-lan、bind-address 與 mixed-port

用戶端介面中的開關可能標示為「允許區域網路連線」或「Allow LAN」,混合連接埠則可能位於連接埠設定中。不同用戶端的選單層級不盡相同,請以執行中的設定與監聽狀態確認是否成功。使用 mihomo 設定檔時,以下三個欄位位於 YAML 頂層,不可縮排到 proxies 或 dns 底下。

# 合併至現有設定的頂層,請勿取代整份訂閱
mixed-port: 7890
allow-lan: true
bind-address: "192.168.1.20"

此範例只會在電腦指定的 IPv4 位址上監聽。電腦必須實際擁有該位址,否則可能無法啟動監聽。若需要在多張網卡上監聽,可以使用 bind-address: "*",但這會擴大可連入的網路範圍,應同時收緊防火牆規則。若只綁定 127.0.0.1,就無法接收手機從區域網路發出的連線。

  1. 記下原本的設定,並確認沒有其他代理程序占用 7890。
  2. 透過用戶端提供的設定或設定覆寫入口儲存變更,避免直接修改可能在訂閱更新時遭到取代的暫存檔。
  3. 套用設定;若監聽狀態沒有變化,再依用戶端指示重新啟動核心。
  4. 檢查執行記錄,確認沒有位址綁定失敗或連接埠占用錯誤。

在 Windows PowerShell 中可以檢查監聽位址。輸出中的 LocalAddress 應包含指定的區域網路位址;若設定為監聽所有介面,也可能會看到萬用位址。若只看到 127.0.0.1,表示區域網路入口尚未生效。

Get-NetTCPConnection -State Listen -LocalPort 7890 |
  Select-Object LocalAddress, LocalPort, OwningProcess

Linux 可使用 ss -lntp 'sport = :7890';macOS 可使用 lsof -nP -iTCP:7890 -sTCP:LISTEN。如果用戶端設定會覆寫 YAML 檔案,請回到用戶端的設定入口修改,不要反覆編輯未載入的檔案。

防火牆僅允許可信任區域網路的 TCP 7890 連線

成功監聽只代表程式已準備好接受連線,作業系統防火牆仍可能封鎖外部裝置。本文的 Wi-Fi HTTP 代理測試只需要開放入站 TCP 7890,不必開放所有連接埠,也不必關閉整台電腦的防火牆。

Windows:限制來源網段與網路設定檔

先確認目前網路是可信任的家用網路,並在 Windows 網路內容中將其設為「私人網路」。接著以系統管理員身分開啟 PowerShell,依實際網段修改下方的來源位址。此範例只接受來自 192.168.1.0/24 的連線,且僅在私人網路設定檔下生效。

New-NetFirewallRule `
  -DisplayName "Clash LAN TCP 7890" `
  -Direction Inbound `
  -Action Allow `
  -Protocol TCP `
  -LocalPort 7890 `
  -RemoteAddress 192.168.1.0/24 `
  -Profile Private

若只允許一支手機連線,可以將 -RemoteAddress 改為該手機的 IP 位址,並為手機設定 DHCP 保留位址。停止共享後,可以刪除這條規則:

Remove-NetFirewallRule -DisplayName "Clash LAN TCP 7890"

macOS 與 Linux:檢查應用程式和連接埠規則

macOS 可前往「系統設定」→「網路」→「防火牆」→「選項」,確認實際接收連線的用戶端或核心程式是否允許傳入連線。若已啟用「阻止所有傳入連線」,請先評估並調整這項策略。第三方防火牆也可能另外封鎖連線,不能只憑系統設定就認定已允許連線。

Linux 若已使用 UFW,可以新增限制來源的規則;若未使用 UFW,應在現有的 nftables、firewalld 或其他防火牆架構中設定,不要只為了一次測試就更換防火牆管理工具。

sudo ufw allow from 192.168.1.0/24 to any port 7890 proto tcp

在手機與電視上設定代理伺服器位址

以下設定方式適用於 HTTP 代理。伺服器欄只填 192.168.1.20,連接埠欄填 7890;請勿在伺服器欄加上 http://、路徑或連接埠。只有在應用程式要求完整代理 URL 時,才使用 http://192.168.1.20:7890。

裝置常見設定路徑填寫內容
iPhone / iPad設定 → Wi-Fi → 點選目前網路右側的資訊按鈕 → 設定代理伺服器 → 手動伺服器:192.168.1.20;連接埠:7890
Android 手機設定 → WLAN 或網際網路 → 目前網路 → 編輯網路 → 進階選項 → 代理伺服器 → 手動代理主機名稱:192.168.1.20;代理連接埠:7890
Android TV / Google TV設定 → 網路和網際網路 → 目前網路 → 代理伺服器設定;實際路徑依廠牌而異選擇手動後,填入相同的主機與連接埠

Android 與 iOS 的使用限制

Android 各廠牌可能將代理設定放在「修改網路」或編輯圖示中。IP 設定維持 DHCP 即可,通常不必為了設定代理而改成靜態 IP。iOS 的代理設定只適用於目前的 Wi-Fi,不會自動套用至行動數據,也不會自動複製到其他 Wi-Fi 網路。

部分應用程式會在建立連線時讀取代理設定;修改後可以完全關閉應用程式再重新開啟。如果瀏覽器可以使用、某個應用程式卻不行,請先確認該應用程式是否支援系統 HTTP 代理,不要立刻改成全域模式。

電視沒有代理設定選單怎麼辦

部分電視韌體沒有手動設定 HTTP 代理的入口,或只有瀏覽器會遵循這項設定。此時只啟用電腦的 allow-lan,無法強制電視使用代理。請改用電視支援的用戶端、應用程式內的代理設定,或另行規劃路由器閘道方案;電腦的共享連接埠本身不會改變電視的預設閘道。

分層驗證:測試連接埠、查看記錄、檢查規則

不要只憑某個網頁能否開啟,就判定所有流量都已透過代理。可以先用另一台電腦測試連接埠與代理協定,再用手機瀏覽器測試,同時查看 Clash 的連線記錄。以下指令必須在另一台區域網路裝置上執行,才能一併檢查裝置間的防火牆與網路隔離問題。

# Windows:檢查 TCP 連接埠是否可連線
Test-NetConnection 192.168.1.20 -Port 7890

# macOS、Linux 或其他支援 curl 的裝置:明確使用 HTTP 代理
curl -I --connect-timeout 5 \
  --proxy http://192.168.1.20:7890 \
  https://example.com/

TcpTestSucceeded: True 只表示 TCP 連線成功,不代表節點可用。使用 curl 測試時,HTTPS 會透過 HTTP CONNECT 通道傳輸;正常的共享代理不需要在手機安裝憑證。若出現憑證錯誤,請檢查裝置時間、目標網站與現有憑證設定,不要以關閉憑證驗證作為解決方式。

  1. 連線逾時:依序檢查電腦 IP、監聽位址、防火牆及路由器用戶端隔離設定。
  2. 連線遭拒:確認核心是否正在執行、混合連接埠是否為 7890,以及是否只監聽迴圈位址。
  3. 代理收到要求但無法連線:檢查節點連線狀態、訂閱是否過期、套用的策略群組及 DNS 記錄。
  4. 網頁能開啟但應用程式無法使用:確認應用程式是否忽略系統代理,或是否使用 HTTP 代理無法承載的 UDP 流量。

在規則模式下,共享裝置的要求仍受電腦目前的規則與策略群組控制。符合 DIRECT 的要求會由電腦直接連線,並非所有要求都一定經過節點。桌面用戶端顯示的處理程序名稱也不一定是手機上的實際應用程式,無法據此準確辨識手機應用程式。

TUN、DNS 與共享安全的常見限制

電腦啟用 TUN 不會自動接管手機流量

電腦的 TUN 通常會接管送入本機虛擬網卡的連線。手機即使和電腦連上同一個 Wi-Fi,預設路由仍會指向路由器,不會自動經過電腦的 TUN。本文的共享方式是讓手機明確連線至 192.168.1.20:7890,不必為此額外啟用 TUN。

將電腦改為手機的閘道,涉及 IP 轉送、路由、位址轉換與 DNS,是另一種網路拓撲。若只修改閘道位址而未設定轉送,可能會直接導致手機無法連線。若需要完整的 UDP 支援與裝置層級的流量接管,請使用適合該裝置的 VPN/TUN 用戶端,或妥善規劃閘道方案。

HTTP 代理不代表手機的所有 DNS 查詢都會經過電腦

應用程式將網域名稱交給 HTTP 代理時,代理端可以依自身設定處理解析與路由。但應用程式也可能先在本機解析、使用內建的加密 DNS,或完全略過系統代理。因此,不能只因為已設定 Wi-Fi 代理,就認定手機的所有 DNS 查詢都由 mihomo 處理。排查時請一併檢查目標網域、實際連線記錄與 DNS 設定,不要直接套用適用於 TUN 的 Fake-IP 設定。

共享期間維持最小開放範圍

  • 不要在路由器上將公網連接埠轉送至電腦的 7890,也不要將管理 API 暴露在公網。
  • 需要驗證身分時,可以設定 mihomo 的 authentication,但請先確認裝置的手動代理設定是否支援代理驗證;部分電視不支援。
  • 電腦進入睡眠、關機、切換 Wi-Fi 或核心停止執行後,依賴此代理的裝置可能會無法連線。
  • 停止共享時,請將手機與電視的代理設定恢復為「無」或「關閉」,再停用 Allow LAN,並刪除不再使用的防火牆規則。

穩定使用需同時滿足四個條件:電腦位址固定、代理監聽設定正確、可信任來源可通過防火牆,而且應用程式確實遵循代理設定。先確認瀏覽器能透過 HTTP 代理成功發出單次要求,再逐步擴展到電視與其他應用程式,比同時修改 TUN、DNS 和路由更容易找出問題。更多設定欄位請參閱進階設定;第一次匯入訂閱前,可先閱讀Clash 使用教學。

下載 Clash