旁路由架設 V2Ray 核心:路由器與 Linux 小主機直跑 Xray 的做法

了解主路由與旁路由架構,掌握閘道設定、透明代理、DNS 接管與常見配置問題。

本文重點

架設旁路由,不是把桌面用戶端搬到路由器上就好。還得處理閘道、核心入口、防火牆、DNS 與回程路由。本文適合能登入 Linux 終端機的讀者,並以明確的 IPv4 測試網段說明部署順序:先測試 Xray 出站,再讓單一裝置接入,最後擴大透明代理範圍。文中的設定片段用於分階段驗收,並非可直接複製、接管整個網路的腳本。

一、主路由與旁路由的流量路徑

主路由負責連接網際網路,通常也處理撥號、位址分配與 NAT。旁路由則是在既有區域網路中新增一台轉送設備,讓指定終端先將流量送往旁路由,再由它決定直接連線或透過代理連線。旁路由接上網路線後,不會自動取得其他裝置的流量;必須透過終端閘道、DHCP 選項或主路由的策略路由明確導流。

本文範例中,主路由為 192.168.10.1/24,Linux 小主機為 192.168.10.2/24,測試電腦為 192.168.10.100/24。這些是教學用私有網路位址,部署前請依實際網段調整,並在主路由保留小主機的位址,避免與 DHCP 動態分配的位址衝突。

單一終端使用旁路由

建議

維持主路由的現有設定,只將測試電腦的預設閘道改為 192.168.10.2。小主機的預設閘道仍設為 192.168.10.1。影響範圍小,遇到斷線也容易還原。

適用情境:初次驗證、既有家用網路、逐台遷移

直接在主路由執行

在主路由上執行 Xray,並在同一台設備完成導流。流量路徑較集中,但須確認處理器架構、可用記憶體、儲存空間與防火牆整合方式。

適用情境:可控的路由系統、能維護防火牆的使用者

雙網路介面卡與獨立網段

小主機的上游連接主路由,下游則使用獨立子網路。下游終端統一以小主機作為閘道,回程路徑較清楚,但須另外設定位址分配、轉送與出口 NAT。

適用情境:獨立測試網路、長期閘道部署

結論:先限縮到一台測試電腦

初次部署時,不要直接修改全網的 DHCP 閘道。先讓 192.168.10.100 經由旁路由連線,確認一般網頁、DNS 與區域網路存取都正常,再考慮批次接入。

二、直跑 Xray 前的環境檢查

V2Ray 常被用來泛指這類代理工具,但 Xray 與 V2Fly 是不同的核心專案,兩者的設定能力不可混為一談。本文採用 Xray。v2rayN 是桌面用戶端,v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心;它們的訂閱管理與介面設定,不代表 Linux 上已設定好透明代理。

在路由器上,先確認 CPU 架構與系統 C 函式庫需求;在 Linux 小主機上,則要確認服務管理器、防火牆架構與執行檔路徑。不可將某種架構的執行檔直接搬到另一種架構上,也不應在已有管理腳本的設備上再疊加另一套規則。

# 查看架構、核心與目前的網路狀態
uname -m
uname -r
ip -br address
ip route
timedatectl status

# 以下指令假設 Xray 已安裝於此路徑
/usr/local/bin/xray version
/usr/local/bin/xray run -test -config /etc/xray/config.json

# 查看本文範例使用的連接埠
ss -lntup | grep -E ':(53|10808|12345)\b'
10808
範例用的本機 SOCKS 測試連接埠
12345
範例用的 TCP 透明代理入口連接埠
53
傳統 DNS 使用的 TCP 與 UDP 連接埠

這些數字是設定範例,並非效能測試結果。若連接埠已被占用,須同步調整核心設定與防火牆規則。系統時間也應保持準確;TLS 交握會檢查憑證有效期限,時間錯誤可能造成連線失敗,不一定是路由問題。

三、分五步讓測試終端接入

操作順序應由應用層開始,再逐步處理網路層。先確認核心能主動連線,再確認終端流量能抵達旁路由,最後才設定透明入口。若一次修改閘道、DNS 與防火牆,發生問題時就很難判斷是哪一層出錯。

  1. 記錄原始設定

    記下測試電腦原本的位址、閘道與 DNS,保存小主機的 ip route 輸出,並備份 /etc/xray/config.json。遠端維護時,請保留一條本機管理通道。

  2. 驗證出站連線

    在 /etc/xray/config.json 中設定只監聽 127.0.0.1:10808 的 SOCKS 入口,以及已確認可用的代理出站。先執行設定檔測試,再由小主機主動向目標位址發出請求。

  3. 設定閘道

    在 Windows 測試電腦中,依序前往「設定」→「網路和網際網路」→目前網卡的內容→「IP 指派」→「編輯」,選擇手動設定 IPv4。範例位址為 192.168.10.100,子網路遮罩為 255.255.255.0,閘道為 192.168.10.2。不同版本的欄位位置可能略有差異。

  4. 接入 TCP

    新增 12345 透明代理入口,並在防火牆中只匹配測試電腦來源與實際的 LAN 介面。先處理 TCP,讓內網目的位址維持直連;暫時不要一併接管 UDP 與裝置自身流量。

  5. 接入 DNS

    確認小主機上的 DNS 服務能正常回覆查詢後,再將測試電腦的 DNS 改為 192.168.10.2。驗證 UDP 53、TCP 53 與網域解析結果,最後重新連線網卡,確認設定已生效。

小主機的預設路由必須指向主路由,不能指向自己。在單網卡、相同子網的架構中,直接轉送的封包可能由主路由直接回到終端,形成非對稱路徑。是否採用受限 SNAT,應依回程路由與狀態式防火牆的需求決定;SNAT 會隱藏原始終端位址,不能把它當成隨手啟用的萬用修復方式。

四、透明代理入口與防火牆的搭配方式

透明代理由兩部分構成:防火牆將符合條件的封包送到本機入口,Xray 則讀取原始目的位址並選擇出站。只監聽連接埠不會自動攔截終端流量;只有重新導向規則、卻沒有對應入口,也無法提供可用的代理服務。

接入方式運作機制部署限制
明確指定 SOCKS應用程式主動連線至本機入口適合先驗證出站,不需要透明導流
TCP REDIRECTNAT 重新導向搭配讀取原始目的位址適合分階段驗證 TCP,不代表 UDP 也已接管
TPROXY透明通訊端、封包標記與策略路由可處理 TCP 與 UDP,須搭配相容的核心及防火牆設定

以下是用於直連驗收的最小設定。它提供本機 SOCKS 與 TCP 透明代理入口,但唯一的出站為 freedom,所有請求仍會直接連線。設定中不包含代理節點、DNS 服務或防火牆規則,請勿將它誤當成完整的代理方案。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    },
    {
      "tag": "lan-tcp",
      "listen": "0.0.0.0",
      "port": 12345,
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp",
        "followRedirect": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

TPROXY 不是把 REDIRECT 改個名稱就能使用。通常必須透過封包標記選擇專用路由表,並在該表中設定本機投遞路由;核心入口也須啟用對應的透明通訊端選項。標記值、路由表編號與防火牆優先順序,必須避開系統既有規則。本文不提供不考慮設備環境、可直接套用至全網的規則腳本。

五、DNS 接管須個別驗收

閘道與 DNS 是兩項不同的設定。將終端閘道改為旁路由,不代表它會使用旁路由解析網域名稱。終端可能仍向主路由查詢,也可能使用瀏覽器的加密 DNS。重新導向傳統的 53 連接埠,無法自動接管以 HTTPS 傳送的 DNS 查詢。

建議先在小主機上準備只對可信任 LAN 提供服務的解析器,並明確指定上游路徑。Xray 設定中的 dns 欄位供核心內部解析使用,不代表已在區域網路位址上開放通用 DNS 服務。核心解析、終端查詢與路由匹配都須分別驗證。

檢查項目驗證方式判斷重點
終端 DNS 指向查看網卡目前使用的 DNS 位址確認不只是修改了預設閘道
UDP 查詢dig @192.168.10.2 example.com A確認服務監聽、來源授權與上游連線正常
TCP 查詢dig +tcp @192.168.10.2 example.com A確認 TCP 53 也已納入設定
IPv6 解析dig @192.168.10.2 example.com AAAA確認 IPv6 資料路徑符合預期

透明代理入口收到的流量通常只有目標 IP。若要依網域分流,須先確認網域資訊的來源。嗅探功能可從部分 HTTP 或 TLS 流量擷取資訊,但無法涵蓋所有連線;啟用嗅探也不代表瀏覽器的 DNS 行為已統一。IP 規則與網域規則須依實際入口能力設計。

六、轉送、回程路由與啟動順序

未被透明代理入口攔截的封包,仍須由旁路由正常轉送。Linux 的 IPv4 轉送開關、FORWARD 放行規則與上游回程路由必須同時設定正確。開啟轉送開關不等於允許所有封包通過,也不應因此將防火牆改為全部放行。

# 查看 IPv4 轉送是否已啟用
sysctl net.ipv4.ip_forward

# 查看反向路徑過濾設定;是否調整須依實際拓撲判斷
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.default.rp_filter

# 查看規則與策略路由;請勿在遠端工作階段中直接清除規則
sudo nft list ruleset
ip rule show
ip route show table all

# 僅適用於已建立 xray.service 的 systemd 環境
systemctl status xray --no-pager
journalctl -u xray -n 80 --no-pager

在策略路由或非對稱回程的情況下,嚴格反向路徑過濾可能會丟棄封包,但遇到斷線時不應直接全域停用。先確認封包從哪個介面進入,以及反向路由指向何處,再決定是否對相關介面採用適當策略。使用 nftables 或 iptables 時,應遵循系統現有的管理方式,避免兩套腳本互相覆寫。

七、常見故障與復原順序

排查時固定使用一台終端、一個目標與一種協定。先確認明確指定的 SOCKS 連線是否正常,再檢查透明 TCP,最後檢查 DNS 與 UDP。不要把所有逾時都歸咎於節點問題:封包可能根本沒進入 Xray,也可能已從核心送出,卻在回程時遭防火牆丟棄。

症狀優先檢查項目處理方向
小主機上的 SOCKS 也無法連線出站參數、系統時間、服務日誌先修復應用層,不要修改終端閘道
SOCKS 正常,透明代理連線失敗來源匹配、入口監聽狀態、規則計數確認封包是否抵達 12345 入口
IP 位址可直接連線,網域名稱卻無法連線DNS 監聽與上游、TCP/UDP 53單獨驗證解析服務,不要反覆更換節點
網頁正常,使用 UDP 的應用程式卻連線失敗是否只接管了 TCP補上 UDP 方案後再驗收,不可用 TCP 成功取代
部分連線繞過旁路由IPv6 路由、應用程式自行設定的代理與 DNS檢查完整的雙協定堆疊路徑與應用程式行為
重新開機後全網斷線位址變更、服務啟動狀態、規則持久化依序檢查位址、服務與規則,逐步復原

需要觀察網路封包時,可在小主機上使用 tcpdump -ni eth0 host 192.168.10.100,其中 eth0 必須替換成實際的介面名稱。封包擷取內容可能包含網域名稱與通訊中繼資料,請縮小範圍、縮短執行時間,並在分享前隱藏敏感資訊。搭配規則計數與入口日誌,比只查看瀏覽器錯誤訊息更容易找出問題環節。

結論:保留明確的還原方式

驗收前不要擴大到全網。發生故障時,先將測試電腦的閘道恢復為 192.168.10.1,並還原原本的 DNS;接著只撤銷這次新增的規則,不要清除整個防火牆。確認主路由可正常直接連線後,再逐層恢復旁路由設定。

旁路由的主要用途,是集中處理指定裝置的流量,而不是減少網路設定工作。穩定的方案必須清楚交代入口、出口、DNS、回程路由與重新開機後的行為。如果只想讓單台電腦或 Android 裝置使用代理,先透過用戶端驗證節點與協定,通常比直接接管網路更容易排查。基本概念請參閱概念速查;連線問題可參考進階用法中的連線疑難排解。

下載 v2rayN