Linux 路由器與旁路由部署概覽:核心直跑的接管邊界

部署前選型指南:釐清閘道、DNS、轉發與核心分工,比較主路由與旁路由的流量路徑,並整理權限、資源用量與回退準備。

本文速覽

這篇概覽適合準備在 Linux 主機上直接執行 V2Ray 或 Xray 核心,並讓區域網路裝置透過該主機轉送流量的讀者。重點不是複製一份規則,而是先判斷主路由、旁路由、DNS 與透明接管各自負責什麼,最後建立一套可測試、可觀察、可回退的部署順序。

先釐清「核心直跑」接管了什麼

這裡的「核心」是指執行於使用者空間的 V2Ray 或 Xray 代理核心,不是把代理功能編譯進 Linux 核心。代理核心負責接收送入入站連接埠的連線,依照路由規則選擇直連、阻擋或遠端出站;Linux 本身仍負責網卡、位址、路由表、連線追蹤、轉發與防火牆。

因此,程式顯示「執行中」只代表程序已啟動,不表示區域網路流量一定經過它。要完成閘道接管,封包必須先抵達這台 Linux 主機,再由 nftables 或 iptables 將目標流量送入透明代理入口。回傳流量也必須沿著可預期的路徑回到原裝置,否則就會出現連線建立後立即中斷、部分網站能開但其他應用程式逾時等現象。

旁路由試運作

建議

保留原主路由撥號與 DHCP,只讓一台測試裝置將預設閘道與 DNS 指向 Linux 主機。影響範圍小,方便確認轉發、DNS 與代理規則。

適合:首次部署、逐台遷移、需要快速回退

主路由接管

Linux 主機負責預設閘道、位址分配與轉發,所有終端自然都會經過它。路徑直接,但設定錯誤會影響整個區域網路。

適合:網路結構明確、已有備用管理入口

顯式代理

終端手動填寫 HTTP 或 SOCKS 位址,不變更預設閘道。可先驗證節點與出站,但不能代表透明接管已完成。

適合:驗證核心出站、排除防火牆變數

結論:先接管一台測試裝置

不要第一步就修改整個網路的 DHCP。先固定一台終端的位址、閘道與 DNS,確認直連、代理、網域名稱解析與回退都正常,再擴大接管範圍。

閘道、DNS、轉發與代理核心的職責

預設閘道回答的是「封包的下一跳要去哪裡」。DNS 回答的是「網域名稱要解析成什麼位址」。Linux 轉發負責讓從一個介面進入的封包能從另一個介面離開,而代理核心只處理真正送到其入站的連線。這四個部分彼此配合,但任何一部分正常,都不能替另外三部分證明部署成功。

例如,終端可以透過 Linux 上的 DNS 服務取得正確位址,卻仍把封包送往原路由;也可能預設閘道已改成 Linux,但系統未啟用 IPv4 轉發,導致終端連區域網路外的位址都失敗。另一個常見情況是轉發正常、透明入口也在監聽,但防火牆未排除閘道自身、區域網路網段或遠端伺服器位址,最後形成迴圈。

53
區域網路 DNS 常用監聽連接埠
12345
本文透明入站範例連接埠
100
策略路由表示例編號
1
net.ipv4.ip_forward 目標值
閘道部署中的職責邊界
元件 主要職責 單獨正常時不能證明什麼
預設閘道 將終端的非本地流量送到 Linux 主機。 不能證明 Linux 已轉發或代理該流量。
DNS 接收查詢並回傳網域名稱解析結果。 不能證明後續 TCP、UDP 連線採用相同路徑。
防火牆與策略路由 標記、重新導向或透明接收選定的封包。 不能證明代理核心的出站參數可用。
V2Ray 或 Xray 核心 處理入站連線,並執行網域名稱、IP 與協定路由規則。 不能證明終端流量已抵達透明入口。

主路由與旁路由的流量路徑差異

主路由模式下,Linux 通常同時持有區域網路介面與上游介面,終端透過 DHCP 自動取得它作為預設閘道。封包從區域網路介面進入,經過路由判斷、防火牆與代理規則後,再從上游介面送出。路徑統一,分流規則容易集中維護,但 DHCP、NAT 或轉發中的一次錯誤,就可能讓整個網路失去外部連線。

旁路由模式下,原路由仍負責上網與位址分配,Linux 主機位於同一個區域網路。只有將預設閘道明確指向旁路由的終端才會經過它。若終端閘道仍是原路由,只把 DNS 改成旁路由,旁路由通常只能看到 DNS 查詢,看不到後續連線,透明代理規則自然不會命中。

還要檢查回程。旁路由將封包轉發給原路由後,原路由需要知道回應如何返回終端。常見做法是在旁路由出口進行來源位址轉換,或在原路由上新增指向測試網段的靜態路由。前者部署簡單,但原路由看到的是旁路由位址;後者保留來源位址,要求網路設備具備明確的路由設定能力。

結論:DNS 位址不能取代預設閘道

如果目標是透明接管,測試終端的預設閘道必須真正指向 Linux 主機;只修改 DNS 適合驗證解析,不足以驗證流量接管。

依照可回退順序完成部署

部署時應將「節點是否可用」與「閘道是否接管」拆成兩次測試。先用顯式代理驗證核心設定與遠端連線,再啟用 Linux 轉發與透明規則。如此一旦出錯,就能快速判斷問題出在代理出站還是本地網路路徑。

  1. 記錄原有網路

    儲存測試終端原本的 IP、子網路遮罩、預設閘道與 DNS。旁路由也要固定區域網路位址,避免 DHCP 租約變動後失去管理入口。

  2. 驗證核心出站

    先讓 V2Ray 或 Xray 監聽僅供測試使用的 HTTP/SOCKS 連接埠,例如 10808,並在單一應用程式中明確填寫該位址。此時不要啟用透明轉發。

  3. 確認核心類型

    若使用 Windows 測試終端交叉驗證同一份節點參數,可在 v2rayN 開啟「設定」→「參數設定」→「Core 類型」,確認所選核心與協定設定相符。

  4. 啟用系統轉發

    檢查 net.ipv4.ip_forward 是否為 1,再確認 FORWARD 鏈允許測試網段通過。先維持一般路由可用,不急著加入透明規則。

  5. 接入透明入口

    為 TProxy 設定封包標記、策略路由與本地路由表,將選定的 TCP/UDP 流量送入 12345,並排除區域網路、群播、廣播、閘道自身與遠端伺服器位址。

  6. 逐步擴大範圍

    先測試一個固定 IP,再按裝置群組擴大。每次只變更閘道、DNS 或規則中的一項,並保留停用透明規則後恢復一般轉發的操作入口。

以下命令用於檢視狀態,不會替你產生防火牆規則。輸出中應重點確認轉發值、策略規則、路由表與監聽連接埠是否和自己的設定一致。若系統使用 nftables,就應直接檢視實際規則集,而不是只檢查相容層顯示的內容。

sysctl net.ipv4.ip_forward
ip rule show
ip route show table 100
nft list ruleset
ss -lntup | grep -E '(:53|:10808|:12345)'

TProxy、重新導向與 TUN 應如何選擇

透明接管不只有一種實作方式。TCP 重新導向規則容易理解,但原始目標與 UDP 處理能力會受實作方式限制。TProxy 能在保留目標資訊的同時接收 TCP 與 UDP,更適合需要結合網域名稱、IP 與傳輸層進行分流的閘道;不過它依賴防火牆標記、策略路由與代理核心透明入站設定,排錯步驟更多。

TUN 會讓代理核心建立虛擬網路介面,從路由層接收流量。它能減少部分防火牆重新導向邏輯,但仍需正確設定路由、DNS、介面權限與避讓規則。若預設路由錯誤地再次指向 TUN,遠端伺服器連線也可能被送回代理自身,形成迴圈。

三種接管方式的部署重點
方式 適用範圍 主要檢查項目
TCP 重新導向 先驗證 TCP 網頁存取與基本分流。 重新導向鏈、目標連接埠、區域網路與保留位址排除。
TProxy 需要同時處理 TCP、UDP 並保留原始目標。 封包標記、策略規則、table 100、本地路由與入站權限。
TUN 希望由虛擬介面統一承接路由流量。 介面權限、預設路由、MTU、DNS 與遠端位址避讓。

部署初期不建議同時疊加 TProxy 與 TUN。兩條接管鏈並存時,同一連線可能被重複處理,日誌中只看到不斷重新連線,卻很難從表面判斷流量在哪一步迴圈。先選擇一種方式跑通 TCP、UDP 與 DNS,再決定是否需要切換方案。

DNS 與路由分流要分別驗證

以網域名稱為基礎的分流需要可靠的網域資訊來源。代理核心可能從入站協定、DNS 結果或流量探測中取得網域名稱,但這些來源不一定等價。若終端已將網域名稱解析成 IP,再以透明流量進入閘道,核心看到的可能只有目標 IP,此時只設定網域規則不一定會命中。

DNS 還要避免自我迴圈。例如,Linux 上的本地 DNS 將查詢轉給代理核心,而核心設定的上游網域名稱又需要呼叫同一個本地 DNS,查詢就會反覆回到原入口。較穩妥的做法是明確區分區域網路監聽位址、核心內部查詢與上游解析路徑,並在日誌中確認每次查詢都只有可解釋的請求與回應。

旁路由能解析網域名稱,但網頁仍直連?

先查看測試終端的預設閘道。若閘道仍是原路由,只有 DNS 查詢經過旁路由。將一台測試裝置的預設閘道改為 Linux 位址,再檢查透明入口計數是否增加。

啟用規則後所有連線都逾時?

先停用透明規則,確認一般轉發恢復;再檢查遠端伺服器位址、Linux 本機流量與區域網路網段是否已排除。接著核對連接埠 12345 是否確實在監聽。

TCP 正常但 UDP 不通?

確認透明入站已啟用 UDP,防火牆規則符合 UDP,並檢查 TProxy 標記與 table 100 的本地路由。只設定 TCP 重新導向不會自動接管 UDP。

日誌中反覆出現重新連線?

檢查代理遠端連線是否再次進入透明入口。暫時排除遠端伺服器 IP,並查看路由表確認核心自身的出站沒有指回 TUN 或 TProxy 鏈。

停止核心後整個網路都無法存取?

這表示防火牆仍將流量送往已關閉的入口。回退時應同時撤銷透明規則與策略路由,恢復一般 FORWARD 與原本的 DNS,而不是只停止程序。

資源用量、驗收指標與回退準備

閘道負載不能只看閒置時的記憶體。加密連線數量、UDP 工作階段、日誌層級、DNS 快取與規則規模都會影響資源使用。還要觀察軟中斷、單核心使用率與網卡吞吐量,因為低功耗裝置可能在總 CPU 看似不高時,已有一個核心達到瓶頸。

一組用於建立基準的實測環境為:四核心 N5105、4 GB 記憶體、Linux 6.1、千兆有線介面,單台終端持續傳輸 500 Mbps,並維持約 800 條連線。執行透明代理後,代理核心常駐記憶體約 118 MB,整機 CPU 在 18% 至 27% 間變化。這個結果只用來說明記錄方法,協定、加密方式、規則數量與硬體不同都會改變數值。

500 Mbps
基準持續傳輸吞吐量
800
測試期間約略並行連線數
118 MB
代理核心常駐記憶體約值
18–27%
測試樣機整機 CPU 區間

驗收時至少記錄直連基準、顯式代理與透明接管三組結果,並分別測試首次解析耗時、持續吞吐量、連線建立、UDP 與規則命中。若透明接管明顯比顯式代理慢,應優先檢查 MTU、重複接管、DNS 等待與單核心瓶頸,而不是直接更換協定名稱。

  1. 備份啟用前的路由表、防火牆規則、DNS 設定與系統轉發值。
  2. 準備一條命令或服務操作,同時撤銷透明規則與策略路由。
  3. 保留原主路由的 DHCP 設定,旁路由試運作期間不要立即刪除。
  4. 設定日誌輪替,避免除錯日誌長期寫入而占滿磁碟。
  5. 重新啟動 Linux 主機後重新驗收,確認規則載入順序不會早於網路介面就緒。

部署前的最終判斷

如果目標只是讓少量應用程式使用代理,顯式代理通常更容易觀察,也不需要改變整個區域網路路徑。如果目標是接管電視、終端工具或不便逐一設定代理的裝置,閘道模式才有明顯價值,但代價是需要同時維護路由、DNS、防火牆與代理核心。

首次部署更適合從旁路由和單台測試終端開始:先驗證 10808 顯式代理,再開啟系統轉發,最後將透明入口接到 12345。確認規則命中、DNS 路徑、TCP、UDP、IPv4 與回退操作後,才考慮遷移 DHCP 或讓 Linux 成為主路由。

用戶端與安裝入口

需要先在桌面裝置驗證節點參數時,可前往下載頁選擇 v2rayN;完成基礎連線後,再依照教學檢查匯入、核心類型與代理生效狀態。

下載v2rayN