預設情況下,用戶端開的那個連接埠只有本機連得上,別的裝置連過來會被直接拒絕。這是個合理的預設值,也是一行就能改掉的預設值。改完之後,同一網段裡任何一台能填代理位址的裝置都能共用這條線路——Android 電視、遊戲主機、iPad、另一台什麼都沒裝的筆電,都算。
這個開關變的是監聽位址
選項一般叫「允許區域網路連線」或者 Allow LAN,設定裡對應 allow-lan: true。關著的時候核心只監聽 127.0.0.1,除了本機誰也連不上;打開之後監聽位址變成 0.0.0.0,任何網路卡上進來的連線都收。主機上要是有好幾張網路卡——例如插著網路線同時又有虛擬機器的虛擬網路卡——可以用 bind-address 把範圍收回到指定的那一個位址,其餘網路卡照舊關著。
接上去只要三步
- 在主機的用戶端裡打開允許區域網路連線,順手記下混合連接埠號碼,預設多半是 7890。
- 查主機在內網裡的位址。要找 192.168. 或者 10. 開頭的那個,不是「查我的 IP」網頁給你看的那個外網位址。
- 到另一台裝置上填手動 HTTP 代理:伺服器寫主機位址,連接埠寫剛才記的那個。Android 和大部分電視盒子在 Wi-Fi 的進階設定裡,iOS 在這個網路詳情頁的最下面,遊戲主機在網路設定的手動設定裡。
- 有件事值得先知道:很多電視盒子和遊戲主機只給一個 HTTP 代理的欄位,翻遍設定也找不到 SOCKS。混合連接埠兩種協定都收,填同一個號碼就行,不用再去找別的。
ipconfig
ip -4 addr show
ifconfig | grep inet
看著都對,就是連不上
十次有九次是防火牆。用戶端第一次監聽外部位址時,Windows 會跳一個框問你允許在專用網路、公用網路還是兩者上通訊。這個框經常在沒人看清的時候就被點掉了,或者只勾了公用網路而家裡的 Wi-Fi 被系統歸成專用。結果是主機自己用得好好的,別的裝置一台都連不上,用戶端介面上還什麼異常都看不出來。去防火牆的輸入規則裡找到用戶端或者核心那一條,確認它在你目前所處的網路類型下是允許的。macOS 上對應的位置在系統設定的防火牆那一節;Linux 上要看你用的是 ufw 還是 firewalld。
先驗連接埠,再懷疑裝置
curl -x http://127.0.0.1:7890 -I https://www.cloudflare.com
curl -x http://192.168.1.10:7890 -I https://www.cloudflare.com
第一條在主機上跑,第二條在另一台電腦上跑,位址換成你自己的。主機通、別的機器不通,那就是防火牆,或者兩台根本不在同一個網段——常見的家用網路裡,兩邊位址的前三段應該是一樣的。兩條都不通,那是用戶端或者節點的事,和區域網路共享無關。沒有 curl 的裝置就用瀏覽器隨便開個頁面,圖片出得來就是通了。
開之前先想清楚誰能連
- 同網段的裝置都能連,代理不認人。想加道門檻就在設定裡寫
authentication,值是一串「使用者名稱:密碼」,之後裝置端填代理時會多兩欄要填。宿舍、分租、公司這類環境下這不是選配。 - DHCP 早晚會換位址。主機重開一次,或者租約到期,位址一變,之前設好的裝置集體失聯。在路由器上給主機做位址保留,或者直接設成靜態,省掉後面反覆重填。
- 有些裝置根本沒有代理設定,很多智慧家電和老電視就是這樣。讓整個網段什麼都不設定就走代理是完全另一回事——閘道裝置、旁路由、透明代理,難度和影響範圍都大得多,不在這篇範圍裡。
allow-lan 不認人:同網段裡任何一台裝置都能拿你的代理當免費出口,產生的流量和存取紀錄都記在你頭上。真到了非開不可的場合,bind-address 加 authentication 是底線而不是加分項——更多時候,正確答案是別開。