Clash 混合埠與區域網路共享代理設定:allow-lan 設定與裝置接入實作

說明 mixed-portallow-lan 兩個欄位的作用,示範如何讓同一區域網路內的手機、電視盒借用一台裝置的 Clash 代理,並提供綁定位址、防火牆放行與安全邊界的注意事項。

為什麼要共享一台裝置的代理

很多人先在一台 Linux 主機或路由器上跑通了 Clash,隨後發現手機、平板、電視盒、遊戲主機上重複安裝客戶端既繁瑣又浪費訂閱流量額度。這類裝置往往系統封閉、缺少可用的代理客戶端,或者本身就不支援匯入 YAML 設定。更現實的做法是把已經跑通的一台裝置當作區域網路內的「代理出口」,其餘裝置只需在系統網路設定裡填一個 IP 和埠號,就能複用同一份節點與規則,不必逐台設定訂閱。要做到這一點,核心只涉及兩個設定欄位:mixed-port 決定監聽哪個埠號,allow-lan 決定這個埠號是否只服務本機。

mixed-port 欄位到底做了什麼

早期版本的 Clash 需要分別用 port 開一個 HTTP 代理埠、socks-port 開一個 SOCKS5 代理埠,兩者互不相通。mixed-port 是後來引入的混合埠,一個埠同時接受 HTTP(S) 代理請求和 SOCKS5 代理請求,客戶端按自己發出的通訊協定自動比對,不需要額外區分。現在主流的 Clash Meta(mihomo)核心預設就是用 mixed-port,設定裡保留 port/socks-port 只是為了相容舊工具鏈。

mixed-port: 7890
allow-lan: false
bind-address: "*"
mode: rule
log-level: info

上面這段是最基礎的骨架。預設狀態下 allow-lanfalse,Clash 只監聽本機回環位址(127.0.0.1),這意味著即便埠開著,區域網路裡的其他裝置也連不進來,這是出於安全考量的預設值,不是 bug。

allow-lan 與 bind-address:打開區域網路存取的開關

allow-lan 決定 Clash 是否接受來自非本機位址的連線請求。把它改成 true 後,Clash 會開始監聽區域網路網卡上的位址,而不再局限於 127.0.0.1。bind-address 則進一步指定監聽哪些網卡位址,預設值 "*" 表示監聽機器上所有可用網路介面,包括有線網卡、Wi-Fi 網卡以及虛擬網卡;如果只想限定某一張網卡,可以填具體的區域網路 IP,例如 192.168.1.20,這樣即便機器還接了其他網路(比如虛擬機器內網、VPN 網卡),代理埠也只在指定網卡上暴露。

mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule

把這兩行改完儲存後,還需要重啟 Clash 核心或讓客戶端重新載入設定,改動才會生效。桌面客戶端一般在設定詳情頁有獨立的「允許區域網路連線」開關,勾選它等同於把 allow-lan 設為 true,底層寫入的仍是這份 YAML。

區域網路裝置接入實作

先確認執行 Clash 的那台裝置在區域網路裡的實際位址,而不是 127.0.0.1 或公網 IP:

ip addr show | grep "inet "
# 或
hostname -I

假設輸出裡看到的區域網路位址是 192.168.1.20,監聽埠是 7890,接下來分別在不同裝置上完成接入:

手機(Android/iOS)

  1. 連接到與 Clash 主機同一個 Wi-Fi。
  2. 進入系統「Wi-Fi 設定」→ 目前網路詳情 → 代理伺服器設定,選擇「手動」。
  3. 伺服器位址填 192.168.1.20,埠號填 7890
  4. 儲存後開啟瀏覽器造訪網站確認是否走了代理,規則模式下可搭配 Clash 面板的連線紀錄確認。

電視盒 / 智慧電視

大多數電視系統的網路設定裡也有類似的手動代理選項,路徑通常在「設定 → 網路 → 進階設定 → 代理」下。部分廠商客製系統不提供代理入口,這類裝置可以考慮改成讓路由器整體轉發,或者退回到在盒子上單獨裝支援匯入設定的客戶端。

Linux / Windows / macOS 裝置

桌面系統裡直接在系統網路設定的代理選項中填區域網路 IP 和埠號即可,瀏覽器如果單獨設定了代理,記得保持位址一致,避免出現系統代理和瀏覽器代理指向不同埠而導致連線混亂。

防火牆放行與連線檢查

改完設定連不上,十有八九是防火牆擋住了埠,而不是 Clash 設定本身出了問題。先在 Clash 主機上放行對應埠:

# ufw(Debian/Ubuntu 系)
sudo ufw allow 7890/tcp

# firewalld(Fedora/RHEL 系)
sudo firewall-cmd --add-port=7890/tcp --permanent
sudo firewall-cmd --reload

放行後,在另一台裝置上用 nctelnet 簡單探測埠是否可達:

nc -zv 192.168.1.20 7890

如果提示連線成功,說明網路層已經打通,若手機端仍無法上網,再回頭檢查代理模式(全域/規則)以及節點是否可用。如果探測直接逾時,大概率是防火牆規則沒生效或者 bind-address 綁定的網卡不對,可以先暫時把 bind-address 設為 "*" 排除範圍問題。

注意

路由器的埠對應(連接埠轉發)功能與本文情境無關,不要為了區域網路共享而把 7890 埠轉發到公網。區域網路共享只需要同一個內網互通,一旦埠暴露到公網,任何知道公網 IP 的人都可能嘗試連接你的代理出口。

安全邊界與存取控制建議

打開 allow-lan 之後,同一區域網路內的所有裝置預設都能連接這個埠,包括訪客 Wi-Fi、蹭網裝置或者被入侵的 IoT 裝置。如果區域網路環境不完全可信,建議疊加以下幾層限制:

  • 在設定裡加入 authentication 欄位,為代理連線設定使用者名稱密碼,未授權的連線會被拒絕。
  • bind-address 精確綁定到某張網卡的具體 IP,而不是籠統的 "*",縮小暴露面。
  • 路由器層面替可信裝置劃分獨立的 VLAN 或訪客隔離,避免訪客網路裡的裝置也能探測到代理埠。
  • 不需要長期共享時,用完及時把 allow-lan 改回 false,而不是一直開著。
mixed-port: 7890
allow-lan: true
bind-address: 192.168.1.20
authentication:
  - "labuser:a-strong-password"

加上 authentication 後,接入裝置的系統代理設定裡通常也需要填入對應的使用者名稱密碼,具體入口因系統而異,填錯會直接被拒絕連線而不是靜默失敗,遇到連不上時記得先核對這一項。

常見接入問題排查

區域網路共享代理翻車,基本逃不出下面幾種情況,按順序自查即可:

  • 手機能連 Wi-Fi 但代理不生效:檢查系統代理設定裡的伺服器位址是不是打錯了一位數字,區域網路 IP 在路由器重啟後可能會變化,建議在路由器上給 Clash 主機綁定靜態 IP 或做 DHCP 保留。
  • 區域網路內一台裝置正常、另一台不行:多半是那台裝置連的是訪客網路或不同網段的 Wi-Fi,和 Clash 主機不在同一子網,自然探測不到埠。
  • 白天能用、重啟路由器後失效:同樣是 IP 漂移導致,固定區域網路位址後一次性解決。
  • 改完設定沒反應:確認改動是儲存到了 Clash 實際載入的那份設定檔,而不是範本或備份檔案,改完後需要重啟核心或在客戶端裡重新載入設定才會生效。

把這幾項逐一核對完,再搭配前面提到的埠探測指令,基本能把區域網路共享代理的連線問題定位清楚。

取得 Clash 客戶端

需要先在一台裝置上跑通 Clash,再考慮區域網路共享;下載頁涵蓋 Linux、Windows、macOS、Android、iOS 客戶端。

前往下載頁 查看使用文件
下載客戶端