OpenWrt 旁路由架設 Xray 核心:透明代理與路由分流設定指南

整理在 OpenWrt 旁路由部署 Xray 的重點,包括主路由閘道設定、透明代理、流量分流規則與區域網路設備的接入方式。

本文重點

本文適合能登入 OpenWrt,並了解 IP 路由與基本 JSON 的使用者。先用一台測試裝置確認旁路由閘道,再區分明確代理與透明代理,最後規劃 DNS、核心路由與防火牆規則。文中的 IP 位址與連接埠僅用於說明網路架構,並非可直接套用於正式環境的完整部署指令碼。

先釐清旁路由與主路由的流量路徑

旁路由並非接上網路線就能接管所有網路流量。區域網路裝置必須將流量送往旁路由,或由主路由明確設定策略,將指定流量轉送過去。本文採用單網路埠、相同網段的旁路由架構:主路由負責連線至寬頻網路並提供 DHCP,OpenWrt 接收指定裝置的流量,判斷要直接連線或交由 Xray 對外連線。

裝置或項目範例值用途
主路由 LAN192.168.10.1/24連線至上游網路,並保留 DHCP 服務
OpenWrt LAN192.168.10.2/24作為測試裝置的 IPv4 閘道
OpenWrt 預設閘道192.168.10.1讓旁路由本身連線至上游網路
測試裝置192.168.10.100/24手動指定閘道,暫不修改全網 DHCP 設定
測試裝置閘道192.168.10.2將非本地網段的流量送往旁路由

上行路徑為「裝置 → OpenWrt → 主路由 → 上游網路」。同一子網內的裝置通常會透過第二層網路直接互通,不會因為變更預設閘道就自動經過旁路由。OpenWrt 的預設閘道仍應指向主路由;不要同時將主路由的預設閘道改為旁路由,否則可能形成轉送迴圈。

區分 Xray 核心、用戶端與透明代理

Xray 是處理入站連線、路由與出站連線的核心,不包含 OpenWrt 網路管理介面。v2rayN 是桌面用戶端;v2rayNG 是採用 Xray 核心的 Android 用戶端;v2flyNG 則採用 v2fly 核心。這些用戶端的訂閱管理介面不等同於 OpenWrt 服務設定,訂閱網址也不能直接當作 Xray 的 JSON 設定檔。

先測試明確代理

建議

先讓一台裝置明確連線至旁路由上的 SOCKS 入站端點。確認遠端出站連線正常後,再新增透明轉送規則,減少同時排查協定設定與核心轉送的變因。

適用情境:首次部署、驗證節點參數、排查出站錯誤

再接入透明代理

裝置只需指定閘道,由 OpenWrt 防火牆與策略路由將選定的 TCP、UDP 流量送入 Xray。應用程式通常不必另外設定代理位址,但轉送路徑會更複雜。

適用情境:已完成基本驗證,需接入多台區域網路裝置

明確代理只適用於主動連線代理連接埠的應用程式;透明代理則需在網路層攔截流量。只啟動 Xray、只開放一個入站連接埠,或只修改裝置閘道,都不足以完成透明代理。還需要 Linux 轉送、防火牆比對、策略路由與正確的回程處理。

依序檢查 OpenWrt 基本設定

以下選單名稱以常見的 LuCI 繁體中文介面為例,實際翻譯與佈景主題可能略有不同。OpenWrt 22.03 起預設使用 firewall4 與 nftables,舊版則常見 firewall3 與 iptables。請先確認目前系統版本,再選擇相應的規則寫法;不要將兩套指令混在同一個啟動指令碼中。

  1. 確認系統資訊

    開啟「狀態」→「概覽」,記下韌體版本與目標平台;登入終端機後執行 ubus call system board 和 uname -m。核心程式必須符合裝置架構與執行環境,不能將桌面安裝套件放進路由器執行。

  2. 設定位址

    前往「網路」→「介面」→「LAN」→「編輯」→「一般設定」,將通訊協定設為「靜態位址」,並設定範例位址 192.168.10.2、子網路遮罩 255.255.255.0 及 IPv4 閘道 192.168.10.1。請依實際網段替換設定後再儲存並套用。

  3. 停用重複的 DHCP 服務

    前往「網路」→「介面」→「LAN」→「編輯」→「DHCP 伺服器」→「一般設定」,勾選「忽略此介面」,讓主路由繼續負責指派位址。此步驟適用於本文採用的相同網段架構,不適用於由 OpenWrt 獨立管理下游網段的方案。

  4. 確認本機可連線至網路

    在「系統」→「系統」確認時間與時區,並檢查預設路由、網域名稱解析及上游連線狀態。系統時間若有明顯誤差,可能影響 TLS 連線;本機尚未正常連網時,請勿先調整透明代理規則。

  5. 啟動核心並進行測試

    從適用於目前韌體的可信任軟體來源安裝或部署 Xray,執行 xray version 確認實際版本。使用 xray run -test -config /etc/xray/config.json 檢查設定;此處的檔案路徑為本文範例,請確認服務實際讀取的路徑及啟動指令碼。

測試通過只代表設定檔可解析,不代表能連線至遠端。請繼續確認伺服器位址、連接埠、協定、傳輸方式與 TLS 參數。使用 VMess 或 VLESS 時,請逐項比對服務提供者提供的設定,不要只憑協定名稱猜測 security、flow 或傳輸設定。

ubus call system board
uname -m
ip -4 route show
sysctl net.ipv4.ip_forward
xray version
xray run -test -config /etc/xray/config.json

以上指令僅供檢視與測試,不會替你設定防火牆。請依轉送需求啟用 net.ipv4.ip_forward,並確認防火牆允許所需的 LAN 轉送。排錯時不要直接停用整個防火牆,也不要將代理入站端點公開至上游介面。

規劃透明入站、流量標記與迴圈排除

透明代理常見的入口方式有 REDIRECT 與 TPROXY。REDIRECT 常用於 TCP 重新導向,不能將 TCP 設定直接當成完整的 UDP 方案;TPROXY 可處理 TCP 與 UDP,但需搭配相應的核心模組、防火牆規則及策略路由。本文以 TPROXY 說明各層的關係,不提供不分韌體版本的「一鍵規則」。

12345
本文範例透明入站連接埠
53
一般 DNS 服務連接埠
100
可選的策略路由表編號

以上數值僅供規劃參考,並非效能測試結果。連接埠 12345 必須與防火牆的 TPROXY 目標連接埠一致;路由表 100 只是可選編號,使用前請先確認沒有被其他服務占用。標記值也須統一規劃,避免與既有多線連線或策略路由規則衝突。

{
  "inbounds": [
    {
      "tag": "lan-tproxy",
      "listen": "0.0.0.0",
      "port": 12345,
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "followRedirect": true
      },
      "streamSettings": {
        "sockopt": {
          "tproxy": "tproxy"
        }
      }
    }
  ]
}

分開設定防火牆分流與 Xray 路由

OpenWrt 防火牆決定「哪些封包會進入 Xray」;Xray 的 routing.rules 則決定「封包進入核心後要走哪個出站」。若連線已在防火牆層略過,Xray 就無法看到它,再精確的網域規則也不會生效。建議防火牆只負責必要的位址排除與接入範圍,網域與服務分類則集中在核心路由中管理。

處理位置設定內容驗證方式
OpenWrt 防火牆選擇來源裝置、排除保留位址、轉送至透明代理連接埠查看規則計數與 LAN 入站流量
Linux 策略路由標記比對、本機路由表查看 ip rule 與對應的路由表
Xray 路由比對網域、目標位址、連接埠及入站標籤查看存取記錄中的入站與出站標籤
Xray 出站遠端協定參數、直連與拒絕動作分別測試直連目標與代理目標

Xray 路由會依規則順序比對,第一條符合的規則會決定出站。請將明確的區域網路目標與特殊例外放在範圍較廣的規則之前,避免大範圍規則先攔截流量,導致後續細項條件失效。outboundTag 必須與實際出站的 tag 完全相同;不要只複製路由規則,卻漏掉相應的出站設定。

另外規劃 DNS 與 IPv6 接入

只修改 IPv4 閘道,不代表 DNS 和 IPv6 流量也會經過旁路由。裝置可能仍將 DNS 請求傳送至主路由,也可能透過主路由公告的 IPv6 預設路由直接連線至上游。若要讓測試裝置透過旁路由解析網域,可將 DNS 指向 192.168.10.2,但前提是該位址確實提供可用的 DNS 服務。

  1. 指定單一入口。常見做法是讓 OpenWrt 的 dnsmasq 接收 LAN 上連接埠 53 的請求,再依明確的策略轉送。請先檢查連接埠是否已被占用,避免另一個 DNS 程序監聽相同的位址與連接埠。
  2. 避免解析迴圈。若 dnsmasq 將請求轉送至本機另一個 DNS 服務,後者的上游就不能再指回 dnsmasq。若代理伺服器使用網域名稱,還需準備一條不依賴尚未建立的代理連線的初始解析路徑。
  3. 區分核心 DNS。Xray 的 dns 設定用於核心相關的解析,不代表區域網路裝置會自動改用這項服務。裝置的請求必須經過實際的 DNS 監聽與轉送路徑。
  4. 檢查加密 DNS。瀏覽器或應用程式內建的加密 DNS 不一定遵循系統 DNS 設定。測試時請確認使用哪一條解析路徑,不要只憑一次 nslookup 就判斷所有應用程式的行為。
  5. 確認 IPv6 設定。分別檢查裝置的 IPv4 與 IPv6 預設路由。若要接管 IPv6,需另外規劃路由公告、IPv6 防火牆及透明轉送;若暫不接管,請在測試裝置上明確限制測試範圍。

先用一台裝置驗證,再擴大接入範圍

將測試裝置設為 192.168.10.100,並將閘道設為 192.168.10.2。先確認可連線至主路由管理頁面、區域網路裝置及一般直連目標,再測試需要代理的目標。網頁透過 TCP 成功開啟後,請另外測試 UDP 應用程式與 DNS;能開啟一個網頁,並不代表整條透明代理路徑已完整運作。

變更閘道後無法上網,該先檢查什麼?

先將閘道改回主路由以恢復連線,再檢查 OpenWrt 的預設路由、net.ipv4.ip_forward 與 LAN 轉送策略。若停用透明攔截後仍無法連線,請優先排查基本轉送與回程路徑,不要先修改遠端協定參數。

明確代理可用,透明代理卻無法運作?

比對防火牆規則命中計數、透明入站連接埠與策略路由表,並確認 TPROXY 所需模組及服務權限。只用同一台裝置測試同一個目標,並確認 Xray 是否出現相應的入站記錄;若沒有記錄,請先檢查流量入口。

網頁能開,語音或遊戲卻無法連線?

分別檢查是否攔截 UDP、入站設定是否包含 udp、遠端連線是否支援所需的 UDP 轉送,以及防火牆是否允許回應封包。啟用 TCP 重新導向並不代表也已啟用 UDP 透明代理。

為什麼有些裝置的流量沒有經過旁路由?

檢查該裝置目前的預設閘道、IPv6 路由及防火牆的來源位址比對設定。手動設定閘道只會影響已修改的裝置;要擴大接入範圍,請先完成驗證,再透過主路由的 DHCP 閘道選項統一發佈,並讓裝置重新取得租約。

完成單一裝置的驗證後,再考慮透過主路由的 DHCP 選項 3 發佈旁路由的 IPv4 閘道,並透過選項 6 發佈已確認可用的 DNS 位址;實際設定方式依主路由韌體而異。請保留還原原有閘道的設定紀錄,並留意裝置可能仍在使用舊租約。若沒有復原方式,請勿一次修改整個網路的設定。

繼續閱讀進階手冊,確認路由規則順序與 DNS 設定;若對概念有疑問,可先參閱術語表,區分入站、出站與系統代理。部署旁路由的關鍵是逐層驗證:先確認基本網路連線,再確認核心出站,最後接入透明轉送。

下載v2rayN依平台選擇用戶端