適合已接觸訂閱、準備閱讀核心設定的使用者。先執行僅監聽本機的 SOCKS 入站設定,以直連與拒絕兩種出站驗證設定結構,再了解標籤引用、規則順序及 DNS 的作用範圍。範例不含遠端代理節點;完成測試後,再將伺服器提供的協定參數加入出站設定,避免混淆 JSON 語法、節點連線與分流問題。
一、先儲存一份可獨立測試的 config.json
以下採用 V2Ray 傳統 JSON 設定格式,適用於支援此格式的 V2Fly 核心。先執行 v2ray version 確認實際執行的程式,再查看 v2ray help。V2Fly 與 Xray 的欄位雖有部分相同,但擴充功能和命令列參數並不完全一致;請勿直接將其他核心的設定視為通用格式。
將以下內容以 UTF-8 編碼儲存為 config.json。此設定會在 127.0.0.1:10808 提供 SOCKS 入口,拒絕連線至 example.org 及其子網域,其他請求則預設直連。此處的「可用」是指入口、路由和出站連線都能運作,不代表已具備連線遠端代理的能力。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "socks-local",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "blocked",
"protocol": "blackhole",
"settings": {}
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"inboundTag": ["socks-local"],
"domain": ["domain:example.org"],
"outboundTag": "blocked"
}
]
},
"dns": {
"servers": [
"1.1.1.1",
"8.8.8.8"
]
}
}
- 物件以大括號括住,陣列以中括號括住;
inbounds和outbounds即使只有一個項目,也仍須使用陣列。 - 鍵名和字串使用英文雙引號;數字
10808、布林值false則不加引號。 - 最後一個欄位後不加逗號。為方便使用不同工具檢查,本文範例不使用註解或尾隨逗號。
- 頂層欄位的排列順序不會決定請求流向;真正有順序影響的是路由規則陣列,以及預設出站的位置。
二、log:先確認錯誤訊息要去哪裡看
log 負責輸出記錄,不處理代理或分流。範例只設定 loglevel,未指定記錄檔路徑;從終端手動啟動時,直接查看程序輸出即可。如果透過服務啟動,請查看該服務的記錄,而不是到任意目錄尋找預設記錄檔。
| 欄位或值 | 用途 | 使用建議 |
|---|---|---|
loglevel: warning | 只保留警告、錯誤等較高層級的訊息 | 適合日常執行,一般連線不一定會產生記錄 |
loglevel: info | 提供更多執行資訊 | 適合短時間檢查連線與設定行為 |
loglevel: debug | 提供更詳細的診斷資訊 | 重現問題後,恢復原本的層級 |
access / error | 分別指定存取記錄與錯誤記錄的位置 | 設為檔案路徑時,先確認目錄已存在且程序有寫入權限 |
啟動失敗時,先查看第一則明確的錯誤訊息:解析錯誤通常會指出欄位或位置;address already in use 表示監聽連接埠已被占用;權限錯誤則應檢查設定檔和記錄目錄。反覆修改節點位址,無法解決本機連接埠衝突。
三、inbounds:應用程式連線至本機入口
inbounds 描述核心如何接收請求。範例中的 protocol: socks 是應用程式與本機核心之間使用的 SOCKS 協定,並非遠端伺服器協定。瀏覽器或終端機必須明確設定使用此入口;單純啟動程序不會自動變更系統代理,也不會接管所有應用程式的流量。
本機 SOCKS 入站
- 標籤
socks-local- 監聽位址
127.0.0.1- 監聽連接埠
10808- 協定
socks
僅接受本機連線;測試用的應用程式必須選擇 SOCKS 代理,而非 HTTP 代理。
預設直連出站
- 標籤
direct- 協定
freedom- 協定設定
{}- 陣列位置
- 第 1 項
未符合任何規則時使用此出站;此設定會直接連線至目標,不經遠端代理伺服器。
listen 決定哪些裝置能連入,port 則指定入口連接埠。此處使用迴送位址,其他區域網路裝置無法透過這台電腦的內部網路位址連線。請勿為了疑難排解而隨手改成 0.0.0.0,卻仍保留未設定驗證的狀態;這會擴大監聽範圍。
settings.auth 設為 noauth,代表本機 SOCKS 不需要使用者名稱與密碼;udp: false 則表示此範例不提供 SOCKS UDP 轉送。本篇只以 TCP 請求驗證流程,不能據此判定遊戲、語音或其他 UDP 應用程式是否可用。
四、outbounds:分清協定參數與出站標籤
outbounds 描述請求離開核心的方式。範例中的 freedom 代表直連,blackhole 用來拒絕或丟棄請求。兩者都不是遠端節點,因此不需要填寫伺服器位址、使用者識別碼或傳輸安全參數。
- 先看 protocol。它決定
settings可使用哪些協定欄位。請勿將 SOCKS 入站的驗證欄位複製到 VMess 出站。 - 再看 settings。此欄位放置對應協定的連線參數。新增實際代理節點時,應以伺服器提供的資訊和目前核心的文件為準,不要猜測預設值。
- 最後看 tag。這是設定內部引用的名稱。範例中的
direct和blocked都是自訂標籤,並非系統保留的協定名稱。 - 確認 streamSettings。需要時,可在出站物件中設定傳輸方式和傳輸安全參數;它與協定的
settings是同一層級的欄位,不應任意巢狀放置。
VMess 與 VLESS 是不同的代理協定,不能只修改 protocol 就完成轉換。使用 VLESS 時,也要確認實際核心版本及其支援範圍。尤其是 Xray 特有的傳輸擴充功能,不能因欄位看起來相似,就原封不動地搬進 V2Fly 設定。
結論:保留直連基準,再加入實際節點
先確認 10808 入口可通過直連測試,再新增代理出站並用規則指向它。如此一來,新增設定失敗時,就能優先檢查協定與伺服器參數,不必同時懷疑入口設定。
五、routing:依規則順序將請求交給出站
請求進入核心後,路由模組會依據目標網域、目標 IP、連接埠、入站標籤等條件選擇出站。範例的處理流程如下;此設定沒有虛擬網卡,也不會自動設定系統代理。
範例規則要求請求來自 socks-local,且目標網域符合 domain:example.org,接著交由 blocked 處理。同一條規則中的這兩項條件必須同時符合;若 domain 陣列列出多個網域,符合其中一個即可滿足網域條件。
| 設定項目 | 引用對象或意義 | 常見錯誤 |
|---|---|---|
inboundTag | 比對入站物件的 tag | 把協定名稱 socks 誤當成入站標籤 |
outboundTag | 指向出站物件的 tag | 填入不存在的標籤,或大小寫不一致 |
domain:example.org | 比對此網域及其子網域 | 誤以為只會比對完全相同的主機名稱 |
full:example.org | 只比對完整網域名稱 | 預期此設定也會涵蓋所有子網域 |
rules 陣列 | 由上而下檢查,符合規則後選擇對應出站 | 將涵蓋範圍較大的規則放在特殊規則之前 |
若沒有符合任何規則,預設使用 outbounds 的第一個項目。本文第一項是 direct,因此一般請求會直連;若將代理出站移至第一項,未符合規則的請求也會改走該出站。排查「為什麼所有網站都走同一個出口」時,除了檢查規則,也要確認陣列的第一個項目。
domainStrategy: AsIs 表示路由階段會依現有的目標資訊進行比對,不會為了符合 IP 規則而主動解析網域。如果應用程式傳給 SOCKS 的已是 IP,單靠這條網域規則就無法還原原始網域。本例未設定嗅探,因此測試時必須讓應用程式將網域交給 SOCKS 入口。
六、dns:設定解析伺服器不等於接管系統 DNS
頂層 dns 設定的是核心內建的 DNS 模組。範例列出 1.1.1.1 與 8.8.8.8 兩台伺服器,但加入這段設定不會變更作業系統的 DNS,也不代表所有應用程式的查詢都會自動進入核心。
- 應用程式預先解析:應用程式先取得目標 IP,再將 IP 傳給 SOCKS。此時核心通常看不到原始網域,網域分流可能因此無法命中。
- 應用程式傳送網域:應用程式將網域作為 SOCKS 目標傳送,路由模組便能直接比對網域條件。
- 路由觸發解析:使用需要解析的路由策略時,路由模組可能會呼叫內建 DNS,以便繼續比對 IP 規則。
- 出站解析:直連出站也受自身的網域解析策略影響;使用預設的
AsIs時,不應假設一定會查詢頂層列出的伺服器。
因此,此範例的 DNS 區段主要用來展示結構,不保證每次測試都會呼叫它。路由的 domainStrategy 與直連出站的 settings.domainStrategy 屬於不同層級:前者影響規則的比對方式,後者影響直連出站如何處理目標位址。不要只因為欄位名稱相同,就認為修改其中一個能改變所有解析流程。
結論:先確認由哪個環節解析網域
網域規則未命中時,先使用 socks5h://127.0.0.1:10808 重試,讓 curl 將目標網域交給 SOCKS。確認請求的傳遞方式後,再決定是否調整 DNS 或路由策略。
七、測試設定並驗證兩種請求
使用支援 test 和 run 子命令的 V2Fly 版本時,可在設定檔所在目錄執行以下命令。Windows 若要從目前目錄呼叫程式,請將程式名稱寫成 .\v2ray.exe;其他版本則先依本機說明確認參數。啟動前,請避免桌面用戶端同時占用 10808。
v2ray version
v2ray help
v2ray test -c config.json
v2ray run -c config.json
test 成功只表示目前核心接受這份設定,不代表網路連線正常。請保持核心執行,並在另一個終端機執行以下命令。Windows 可使用 curl.exe,避免終端機別名覆蓋命令名稱。
curl --connect-timeout 10 --max-time 20 --proxy socks5h://127.0.0.1:10808 -I https://example.com/
curl --connect-timeout 10 --max-time 20 --proxy socks5h://127.0.0.1:10808 -I https://example.org/
- 第一組驗證直連。只要目前網路能連上目標,第一個命令就應收到 HTTP 回應標頭。實際狀態碼由目標網站決定,不必固定為
200。 - 第二組驗證拒絕連線。第二個請求應無法取得正常的 HTTPS 回應。實際錯誤會因 curl 和核心版本而異,不能只根據某一句錯誤訊息判斷結果。
- 確認時間限制。命令將連線逾時設為 10 秒、總逾時設為 20 秒,避免長時間等待;這不是延遲測量,也不代表效能評估。
- 逐項調整設定。先將拒絕規則的
outboundTag改為direct,重新測試並重新啟動。若第二個請求恢復回應,就能確認標籤引用與規則確實有參與處理。
修改磁碟上的 JSON 後,不要假設執行中的程序會自動重新載入。依照本文的手動執行方式,應先停止舊程序,再測試設定並重新啟動。如果在 v2rayN 使用訂閱節點,用戶端可能會重新產生執行設定;請區分用戶端產生的檔案和自行維護的自訂設定,修改前先保留副本。
八、常見設定問題與處理方式
設定測試通過了,為什麼瀏覽器還是沒走這個入口?
設定測試不會設定系統代理。先執行本文的 curl 命令確認入口正常,再檢查瀏覽器設定的代理類型和連接埠。此設定中的 10808 是 SOCKS 連接埠,不能直接填入只接受 HTTP 代理的設定欄位。
為什麼設定了 blocked,網站還是能開啟?
先確認請求確實經過 127.0.0.1:10808,再使用 socks5h 傳送網域。接著檢查 inboundTag 是否為 socks-local,以及前面是否已有更早符合的規則。修改後重新啟動程序再測試。
啟動時顯示 10808 已被占用,該怎麼處理?
關閉舊的核心程序,或將入站的 port 改為未占用的 10818,並同步將測試命令的連接埠改為 10818。請勿只修改應用程式端的連接埠,卻保留核心原本的監聽連接埠;兩端必須一致。
訂閱連結可以直接放進 outbounds 嗎?
不行。訂閱是用戶端取得節點資訊的管道,outbounds 則需要核心能辨識的結構化物件。請先在 v2rayN 匯入訂閱,再查看它為目前節點產生的設定;分享疑難排解片段前,請移除訂閱網址、伺服器驗證資訊及其他敏感參數。
最後依序確認:JSON 可解析、核心可啟動、入站可連線、規則可命中、出站可連到目標。每次只調整一個層級,並保留可正常運作的基準設定檔。日後即使加入 VMess、VLESS 或更複雜的 DNS 分流,也能將問題範圍縮小到特定欄位,不必反覆整份替換設定來試錯。
選擇用戶端與平台
依裝置作業系統選擇安裝套件。桌面端使用 v2rayN;Android 裝置可依核心需求選擇 v2rayNG 或 v2flyNG。先按照教學完成基本連線,再回到本文核對設定結構與規則引用。