本文重點

先確認 v2rayN 的本機監聽連接埠,再檢查 macOS 目前網路服務的代理設定;瀏覽器可單獨排除擴充功能干擾,終端機則用 curl 和環境變數分別測試。適合用來逐層定位用戶端已連線、但不同應用程式表現不一的狀況。

先釐清:用戶端、系統代理與應用程式

v2rayN 顯示已選取節點,不代表每個程式都會使用該節點。應用程式必須將請求交給本機代理連接埠,v2rayN 才能處理後續連線。macOS 系統代理主要提供給遵循系統網路設定的應用程式;終端機工具可能改讀環境變數,也可能需要明確指定代理。

應用程式請求代理設定本機連接埠v2rayN 核心目標網站

開始排查前,請在 v2rayN 查看本機 HTTP 與 SOCKS 監聽位址,並確認核心正在執行。下方數值僅供示範,不代表你的安裝一定使用這些連接埠;後續命令與系統設定都應改用用戶端目前顯示的實際值。

127.0.0.1
本機監聽位址範例
10809
HTTP 連接埠範例
10808
SOCKS 連接埠範例

先判斷問題範圍

瀏覽器與終端機都連線失敗,先檢查核心與本機連接埠;只有瀏覽器失敗,先檢查系統代理與擴充功能;只有終端機失敗,先確認命令是否會讀取代理設定。尚未確認監聽連接埠前,不要反覆切換節點。

檢查 macOS 目前網路服務的代理設定

先在 v2rayN 的系統代理選單確認已選取「自動設定系統代理」,再到 macOS 確認設定套用在目前使用的網路服務。系統介面位置會因 macOS 版本及 Wi-Fi、乙太網路等連線方式而異;較新的介面通常可從「系統設定」→「網路」→目前的網路服務→「詳細資訊」→「代理伺服器」進入。

  1. 確認核心正在執行

    查看 v2rayN 主畫面的狀態與記錄。若核心尚未啟動,即使系統已填入代理位址,也無法連上本機連接埠。

  2. 查看監聽連接埠

    在 v2rayN 的「設定」→「參數設定」中確認本機代理連接埠,並以目前介面及記錄顯示的監聽結果為準。請分清 HTTP 與 SOCKS 連接埠,不要填錯。

  3. 選取系統代理

    在 v2rayN 的系統代理選單選取「自動設定系統代理」,接著開啟 macOS「系統設定」→「網路」→目前的網路服務→「詳細資訊」→「代理伺服器」,確認位址與連接埠。

  4. 確認網路服務

    若目前使用乙太網路,不要只檢查 Wi-Fi 的代理選項。切換網路連線後,請重新查看目前使用的服務;也要留意是否啟用了舊的自動代理設定或其他手動代理。

手動設定時,HTTP 代理與安全網頁代理應使用實際的 HTTP 監聽連接埠;SOCKS 代理則應使用實際的 SOCKS 監聽連接埠。範例位址 127.0.0.1 僅代表這台 Mac 本身,不可將遠端節點位址填入系統代理欄位。若用戶端產生的是自動代理設定,請確認其狀態,不要把設定位址誤當成一般 HTTP 代理伺服器。

也可以在終端機執行以下唯讀命令,查看系統目前提供的代理設定。若輸出中出現舊位址或舊連接埠,請先回到目前網路服務的設定頁修正,再重新啟動要測試的應用程式。

scutil --proxy
networksetup -listallnetworkservices
networksetup -getwebproxy "Wi-Fi"
networksetup -getsocksfirewallproxy "Wi-Fi"

瀏覽器無法連線:排除獨立代理與擴充功能衝突

瀏覽器能開啟網頁,只能表示目前的連線路徑可用,不能因此判定它正在使用 v2rayN。反過來說,瀏覽器無法開啟網頁、其他應用程式卻正常,也不一定是節點故障。請先使用同一個明確網址重複測試,並記下是所有網站都無法連線,還是只有特定網站有問題。

若瀏覽器顯示代理伺服器拒絕連線,請優先確認系統代理中的本機位址、連接埠與核心監聽狀態。若頁面已建立連線,卻只有特定網站出現憑證錯誤或無法存取,應將問題視為該網站或瀏覽器的個別狀況排查,不要關閉憑證驗證來掩蓋錯誤。

使用獨立請求交叉測試

瀏覽器測試結果不明確時,可使用下一節的 curl -x 明確指定相同的本機連接埠。若明確指定代理的請求成功、瀏覽器仍失敗,排查範圍就能縮小到瀏覽器設定、擴充功能與 macOS 目前的網路服務。

終端機無法連線:分別測試明確代理與環境變數

終端機並非單一的網路用戶端:curl、套件管理工具和其他命令各有讀取代理設定的方式。先略過系統設定,直接讓 curl 連線至 v2rayN 的 HTTP 連接埠範例。若你的 HTTP 連接埠不是 10809,務必先替換命令中的數字。

curl -v -x http://127.0.0.1:10809 -I https://example.com

留意輸出中的代理位址、HTTP CONNECT 階段,以及最後的回應或錯誤。若連線遭拒,通常表示該連接埠沒有程式監聽,或連接埠填錯;若請求已到達代理卻遲遲沒有回應,請繼續檢查 v2rayN 記錄、節點設定與目標網站。-I 只會要求回應標頭,部分網站對這類請求的處理方式不同,可改用不含 -I 的命令重新測試。

  1. 明確指定代理

    先執行上方的 curl -x 命令。這可確認本機 HTTP 連接埠能否處理請求,不受 shell 是否設定代理變數影響。

  2. 檢查環境變數

    執行 env | grep -i proxy,檢查是否留有舊位址、錯誤連接埠,或讓目標網域略過代理的 NO_PROXY 設定。

  3. 設定目前工作階段

    明確指定代理的請求成功後,再依照下方範例為目前的終端機工作階段設定變數,並執行不含 -x 的 curl 比較結果。

  4. 逐一測試工具

    其他命令仍無法使用時,請檢查該工具自己的代理選項或設定檔。不要直接把 curl 的行為套用到所有命令列程式。

env | grep -i proxy
export http_proxy=http://127.0.0.1:10809
export https_proxy=http://127.0.0.1:10809
curl -v -I https://example.com

https_proxy 的值使用 http://,不代表目標網站改用未加密的 HTTP;這裡表示的是連線至本機 HTTP 代理的方式,HTTPS 目標通常會透過 CONNECT 建立通道。若只提供 SOCKS 連接埠,可對支援 SOCKS 的工具使用相應選項,例如 curl --socks5-hostname 127.0.0.1:10808 -I https://example.com;其中 --socks5-hostname 會讓網域名稱交由 SOCKS 代理解析。

依錯誤訊息定位:連接埠、位址與憑證

錯誤原文有助於判斷請求停在哪一層。以下範例中的位址和連接埠仍使用前文的示範值;不同系統或工具的錯誤文字可能略有差異,請搭配實際命令輸出與 v2rayN 記錄判斷。

錯誤:curl: (7) Failed to connect to 127.0.0.1 port 10809: Connection refused

原因與解決方式:請求尚未進入代理處理階段。確認 v2rayN 核心是否正在執行、HTTP 實際監聽連接埠是否為 10809,以及命令中是否誤用了 SOCKS 連接埠。

錯誤:curl: (5) Could not resolve proxy: proxy.invalid

原因與解決方式:命令或環境變數指向無法解析的代理主機名稱。檢查 env | grep -i proxy 與工具本身的設定,並將舊代理位址改為實際的本機監聽位址。

錯誤:curl: (60) SSL certificate problem: unable to get local issuer certificate

原因與解決方式:連線已進入憑證驗證階段,不能只憑這項錯誤就判定本機代理連接埠故障。請檢查系統時間、目標網站憑證及相關網路環境,保持憑證驗證功能開啟後再測試。

若 curl -x 成功,但不含 -x 的相同命令失敗,請優先檢查環境變數、NO_PROXY 與命令本身的代理設定。若兩種呼叫方式都失敗,先查看 v2rayN 記錄是否有這次請求;若沒有記錄,請優先重新檢查監聽位址與連接埠。

切換網路或修改系統代理後,請重新送出請求並查看記錄。不要把先前的連線記錄當成本次測試結果;也避免一次修改節點、瀏覽器擴充功能和 shell 設定,否則即使恢復連線,也難以判斷是哪個步驟發揮作用。

還原設定並分層重新測試

排查完成後,請保留一套清楚的設定方式:瀏覽器視需要使用 macOS 系統代理,終端機工具則視需要使用自己的代理參數或環境變數。若只是暫時測試,不必將示範連接埠永久寫入所有終端機工作階段。

依照這個順序,就能分別確認「本機連接埠是否可用」、「應用程式是否讀取系統設定」及「命令是否自行設定代理」。若連接埠與明確代理請求都正常,就不必從頭重新設定節點;若明確代理請求仍失敗,再回頭檢查用戶端記錄與節點設定。