架設旁路由,不是把桌面用戶端搬到路由器上就好。還得處理閘道、核心入口、防火牆、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'
這些數字是設定範例,並非效能測試結果。若連接埠已被占用,須同步調整核心設定與防火牆規則。系統時間也應保持準確;TLS 交握會檢查憑證有效期限,時間錯誤可能造成連線失敗,不一定是路由問題。
三、分五步讓測試終端接入
操作順序應由應用層開始,再逐步處理網路層。先確認核心能主動連線,再確認終端流量能抵達旁路由,最後才設定透明入口。若一次修改閘道、DNS 與防火牆,發生問題時就很難判斷是哪一層出錯。
-
記錄原始設定
記下測試電腦原本的位址、閘道與 DNS,保存小主機的
ip route輸出,並備份/etc/xray/config.json。遠端維護時,請保留一條本機管理通道。 -
驗證出站連線
在
/etc/xray/config.json中設定只監聽 127.0.0.1:10808 的 SOCKS 入口,以及已確認可用的代理出站。先執行設定檔測試,再由小主機主動向目標位址發出請求。 -
設定閘道
在 Windows 測試電腦中,依序前往「設定」→「網路和網際網路」→目前網卡的內容→「IP 指派」→「編輯」,選擇手動設定 IPv4。範例位址為 192.168.10.100,子網路遮罩為 255.255.255.0,閘道為 192.168.10.2。不同版本的欄位位置可能略有差異。
-
接入 TCP
新增 12345 透明代理入口,並在防火牆中只匹配測試電腦來源與實際的 LAN 介面。先處理 TCP,讓內網目的位址維持直連;暫時不要一併接管 UDP 與裝置自身流量。
-
接入 DNS
確認小主機上的 DNS 服務能正常回覆查詢後,再將測試電腦的 DNS 改為 192.168.10.2。驗證 UDP 53、TCP 53 與網域解析結果,最後重新連線網卡,確認設定已生效。
小主機的預設路由必須指向主路由,不能指向自己。在單網卡、相同子網的架構中,直接轉送的封包可能由主路由直接回到終端,形成非對稱路徑。是否採用受限 SNAT,應依回程路由與狀態式防火牆的需求決定;SNAT 會隱藏原始終端位址,不能把它當成隨手啟用的萬用修復方式。
四、透明代理入口與防火牆的搭配方式
透明代理由兩部分構成:防火牆將符合條件的封包送到本機入口,Xray 則讀取原始目的位址並選擇出站。只監聽連接埠不會自動攔截終端流量;只有重新導向規則、卻沒有對應入口,也無法提供可用的代理服務。
| 接入方式 | 運作機制 | 部署限制 |
|---|---|---|
| 明確指定 SOCKS | 應用程式主動連線至本機入口 | 適合先驗證出站,不需要透明導流 |
| TCP REDIRECT | NAT 重新導向搭配讀取原始目的位址 | 適合分階段驗證 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": {}
}
]
}
- 隔離入口:12345 監聽所有 IPv4 介面,只為接收 LAN 重新導向的流量。防火牆必須限制可信任的來源,並阻擋 WAN 存取;10808 仍只開放給本機使用。
- 排除目的位址:本機管理位址、區域網路網段、回送位址、鏈路本地、多點傳送與廣播目的位址,都不應納入一般代理重新導向。實際使用的其他內部網段也須明確排除。
- 排除代理伺服器:代理出站的伺服器位址必須保持可連線。若後續接管設備自身流量,也須透過程序身分或標記排除 Xray 出站,以免形成遞迴代理。
- 限制接管範圍:第一階段只匹配 LAN 入站介面與 192.168.10.100。不要一開始就處理所有來源、所有協定或 OUTPUT 鏈的全部流量。
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 時,應遵循系統現有的管理方式,避免兩套腳本互相覆寫。
- 啟動依賴:核心必須能連上網路;若 DNS 上游經由代理出站,也要避免代理伺服器網域的解析反過來依賴尚未啟動的代理。
- 持久化:透過互動方式啟用的轉送設定與防火牆規則,重新開機後可能會消失。應透過系統設定檔與既有防火牆服務保存,而非只留在終端機的歷史紀錄中。
- 故障處理:核心停止後,仍生效的重新導向規則可能會把流量送往無人監聽的連接埠。必須明確決定故障時要停止連線,還是撤銷接管並恢復直連。
- 資源監控:觀察 CPU、記憶體、連線數與日誌成長情況,不要只看單次開啟網頁的速度。路由器儲存空間有限,不適合長期保留詳細存取日誌。
七、常見故障與復原順序
排查時固定使用一台終端、一個目標與一種協定。先確認明確指定的 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 裝置使用代理,先透過用戶端驗證節點與協定,通常比直接接管網路更容易排查。基本概念請參閱概念速查;連線問題可參考進階用法中的連線疑難排解。