TCP / UDP 通訊協定映射
通訊協定映射 可替 SSH、資料庫、DNS 等非 HTTP 服務新增 TCP/UDP Listen Port。它不會讀取網域 Host 或 URL Path,而是將特定對外連接埠的 Byte Stream 轉送至 host:port。
此功能只作為公網直連 子網域模式 的補充。Web 服務仍應使用子網域映射;路徑相容規則請參閱路徑映射。
在 映射管理 → 協議 管理 TCP / UDP 規則;分頁是否顯示取決於目前模式及協議映射功能開關。
生效條件
通訊協定映射 只屬於公網直連的子網域路由。側邊欄入口會在下列情況顯示:
系統設定 → 模式為子網域模式。系統設定 → 功能 → 通訊協定映射已啟用,或目前仍有已儲存規則需要管理。
關閉功能開關會停止所有通訊協定映射 Listener,但不會刪除規則;只要仍有規則,管理入口就會保留並顯示停用提示,讓管理員修正或刪除設定。停用期間不能執行「同步閘道」,重新啟用後才會依剩餘規則恢復 Listener。切離子網域模式時,此功能也會自動停用並停止 Listener,規則同樣會保留。
內網穿透 → 子網域映射 雖然同樣使用 Host 路由,但不提供通訊協定映射。若要讓 FRP 或 Cloudflare 承載其他通訊協定,必須在對應平台另外設定,不能共用 fn-knock 的 HTTP Host 入口。
路由模型
TCP :2222 -> 192.168.1.20:22
TCP :13306 -> 127.0.0.1:3306
UDP :53 -> 127.0.0.1:53網域只負責解析至入口 IP,不參與通訊協定分流。用戶端可連線至 nas.example.com:2222,最終命中哪條規則只取決於 Transport Protocol 與連接埠。
規則欄位
| 欄位 | 說明 |
|---|---|
傳輸通訊協定 | TCP、UDP,可同時選取;儲存後拆成兩條規則 |
對外連接埠 | 用戶端連線使用的連接埠,範圍為 1-65535 |
備註 | 選填說明,用來區分及搜尋用途相近的映射 |
Target | 純 host:port,不可包含 http:// 或路徑 |
要求驗證 | 連線前依來源 IP 查詢 fn-knock 授權狀態 |
同一個連接埠可各有一條 TCP 與 UDP 規則,例如 53/tcp 與 53/udp;相同通訊協定、相同連接埠不可重複。
對外連接埠不能轉送至本機相同連接埠。例如 TCP :3306 -> 127.0.0.1:3306 會形成本機轉送迴圈,因此儲存與啟用時都會遭拒。檢查範圍包括 localhost、Loopback、未指定 Address,以及 fn-knock 裝置目前的本機 Interface Address;請修改對外或 Target 連接埠。
服務啟動時若發現同連接埠本機迴圈、對外連接埠已被其他程序佔用,或既有映射無法安全套用,系統會自動停用整項通訊協定映射,避免單一錯誤規則阻擋管理後台與其他閘道功能。已儲存規則不會刪除,側邊欄入口也會保留;頁面會顯示可辨識的通訊協定、連接埠、Target 與原始錯誤。
請先刪除或修正問題規則,再回到 系統設定 → 功能 重新啟用。連接埠衝突時,找出正在監聽的程序;無法定位規則時,逐一檢查最近變更的映射。問題未解決前,反覆同步閘道或重新啟動不會修復它。
Target 必須能從 fn-knock 所在環境連線。在 Docker 中,127.0.0.1 代表 Container 本身;Host 或區域網路 Target 必須使用 Container 可連線的 IP。
清單搜尋會比對通訊協定、對外連接埠、備註、Target、服務識別結果與驗證狀態。備註可直接在清單中修改;通訊協定、連接埠、Target 或驗證狀態仍需透過編輯映射調整。
服務識別與嚴格通訊協定驗證
新建通訊協定映射儲存後會維持啟用,初始顯示為 未啟用嚴格驗證。儲存後請從該規則的更多操作執行 偵測;系統會主動連線 Target。取得高信賴度、且支援嚴格驗證的服務識別結果時,會記錄服務類型並切換為 嚴格通訊協定驗證;只能識別服務、但不支援嚴格驗證時,會保留識別結果並維持未啟用嚴格驗證。偵測失敗或結果不明確時,映射也會保持啟用,不會因探測結果而自動停用。
上游驗證可能讓 HTTP Probe 只能看到 401,無法可靠區分一般 HTTP 與 WebDAV 等具體服務。此時請從更多操作選擇 指定服務類型,核對 Target 實際執行的服務。該服務支援嚴格驗證時可執行 確認並啟用驗證;只能識別的類型也可以儲存,但嚴格驗證會保持關閉。選錯可嚴格驗證的類型會讓合法連線因通訊協定不符而遭拒;清除手動指定的服務類型會關閉嚴格驗證,但不會停用映射。
修改規則的 Transport、對外連接埠或 Target 會清除原本的服務識別結果並關閉嚴格驗證,但映射仍保持啟用。需要依賴嚴格通訊協定過濾時,請對新的 Target 重新偵測或指定服務類型。只有這三個欄位都不變、僅修改備註或登入要求時,已驗證的服務識別結果才會保留。
既有且尚未包含服務識別資訊的規則,可能顯示為舊規則或未啟用嚴格驗證;更新程式不會自動指定服務類型。請逐筆確認 Target 後執行 偵測;在此之前,映射仍可保持啟用並以未啟用嚴格驗證的方式轉送。
流量詳情與活躍 IP
清單的 流量 欄位依每條 TCP/UDP + 對外連接埠 分別統計。展開詳情後,可查看即時流入/流出速率、目前連線數、累計流量,以及最近 15 分鐘、1 小時、6 小時、1 天或 7 天的歷史流量。
同一面板也會列出近期活躍的來源 IP。可直接加入黑名單、移出黑名單或標記為本機 IP;這些操作會修改全域黑名單與本機 IP 規則,變更共用規則前請先閱讀一般黑名單。
歷史流量以通訊協定閘道實際觀察到的位元組為準,適合維運與疑難排解,不應作為計費依據。UDP 沒有連線狀態,因此來源只會在短時間內顯示為活躍;Process 重新啟動或清理原則也可能縮短可用歷史範圍。
驗證機制會檢查來源 IP 與憑據範圍
SSH、MySQL、Redis 等用戶端不會開啟 fn-knock 登入頁面。啟用 要求驗證 後,使用順序如下:
- 在瀏覽器中開啟 fn-knock 的 Web 入口並完成登入。
- 若
系統設定 → 工作階段 → 登入後 IP 授權未停用,登入流程會替目前公網出口 IP 建立協定存取授權;否則請手動新增該 IP/CIDR。 - 再從相同出口 IP,使用通訊協定用戶端連線至對外連接埠。
憑據使用 所有範圍 時,協定授權可套用至所有已啟用驗證的協定映射。使用 自訂範圍 時,必須在 驗證設定 → 權限 中選取精確的 TCP/UDP + 對外連接埠;系統只會為所選映射授權目前來源 IP,未選取的協定或連接埠仍會拒絕。修改憑據範圍後,既有工作階段的協定授權也會同步調整。
出口 IP 變更、授權到期、登入後 IP 授權停用,或用戶端改走其他網路時,連線會被直接拒絕,必須重新登入或更新手動授權。瀏覽器 Cookie 本身不會隨 TCP/UDP 連線傳送;通訊協定入口會檢查來源 IP、通訊協定與對外連接埠。手動 IP/CIDR 授權仍是獨立放行路徑。工作階段與 IP 變化請參閱工作階段管理與 IP 軌跡,驗證方式與自訂範圍請參閱身分驗證總覽。
通訊協定用戶端沒有瀏覽器 Cookie,因此閘道會將目前工作階段確認過的來源 IP 與通訊協定授權關聯。工作階段仍有效時,其目前來源 IP 在整個通訊協定授權有效期內都可繼續使用;因行動網路產生的其他漂移 IP 只在設定的漂移時間窗內有效。工作階段或通訊協定授權到期後都會拒絕連線,不會因為曾經登入過就永久保留舊 IP。
停用 要求驗證 會將該 Listen Port 公開轉送。Target Service 本身的 SSH Key、資料庫密碼、TLS 與最小權限仍必須妥善設定。
依來源設定免登入
對已開啟 要求驗證 的映射,可從更多操作進入 設定免登入,讓指定來源不必先完成 Web 登入。條件支援精確來源 IP、CIDR 與來源地區;同一規則群組內的條件以 AND 同時符合,不同群組則以 OR 比對。未命中的來源仍會走原本的登入驗證流程。
地區條件會在儲存時編譯成固定 CIDR 集合,不會隨位址庫更新自動改寫;位址庫變更後需要重新儲存政策。範圍過大的 CIDR,或只由否定條件組成的寬泛規則,會要求二次確認。每筆映射最多可儲存 16 個規則群組,每組最多 16 個條件。
免登入只會跳過 fn-knock 的登入檢查,不會跳過服務識別與嚴格通訊協定驗證,也不能取代 Target 自身的帳號、金鑰或 TLS。關閉映射的 要求驗證 時,所有來源原本就能直接連線,已啟用的免登入政策會停用,規則可保留為草稿;之後重新開啟驗證時,請再次核對政策狀態。
全域開放時間
在協定映射頁面的 新增映射 右側開啟更多操作,選擇 定時啟用或停用,即可為所有 TCP/UDP 規則設定同一個每日開放時間窗。時間使用 HH:mm,依伺服器本機時間每天重複;啟用與停用時間不可相同。跨午夜設定會自動延續至隔日,例如 22:00-06:00。
定時關閉與關閉協定映射功能不同:
- 關閉功能開關時,所有協定 Listener 都會停止;
- 定時關閉時,連接埠仍保持 Listen,但會拒絕新的 TCP 連線並丟棄 UDP 封包;
- 進入關閉時段前已建立的 TCP Session 不會被強制中斷;
- 到達開放時間後會繼續接受新連線,不需要重新同步閘道。
這是作用於所有協定映射的執行時間規則,無法為單一連接埠設定不同時段。後台會依伺服器時間顯示目前為 定時開放中 或 定時關閉中;瀏覽器或伺服器時區設定錯誤時,顯示與實際存取時間窗都可能不符,請先修正伺服器時間與時區。
local_exempt
身分驗證服務會將閘道識別到的 Loopback、私有網路與 Link-local 來源歸類為 local_exempt。這些來源連線至已啟用驗證的通訊協定映射時,也會被視為本地網路存取,不要求先完成 Web 登入。
因此:
- 區域網路連線成功,無法證明公網驗證有效。
- 若連接埠前方還有 NAT 或 Proxy,應確認閘道看到的不是 Proxy 的私有 IP。
- 公網測試必須使用真實外部網路,並核對工作階段中的來源 IP。
儲存、同步與防火牆
新增、編輯、刪除或修改備註會依序儲存,避免連續操作互相覆蓋。涉及 Listener 的規則變更會重新整理閘道,並在支援的部署環境中同步連接埠放行;備註只用於管理與搜尋,不影響轉送。同步閘道 用於主動重新套用全部設定,通常不需要在每次修改後按下。
平台限制如下:
- 飛牛原生 FPK 可在啟用自動防火牆管理後同步通訊協定連接埠。
- fn-knock 不再管理 OpenWrt Host 防火牆。通訊協定映射仍可 Listen,但管理員必須在 OpenWrt 防火牆中手動放行對應連接埠。
- Docker 不會發布新的 Host Port,也不會修改 Host 防火牆。必須在 Container 啟動設定中明確發布固定連接埠,並手動處理 Host 與路由器規則;執行中的 Compose 無法只靠後台新增連接埠就完成公網暴露。
- 自行接管閘道 Runtime 時,連接埠放行仍由系統管理員負責;不要假設 fn-knock 會修改 Host 防火牆。
無論平台是否自動放行,路由器 Port Forwarding、Cloud Security Group 與上游網路原則仍必須允許該連接埠。
驗證與疑難排解
- 確認目前使用公網直連子網域模式,且功能開關仍為啟用。
- 檢查通訊協定與對外連接埠是否和用戶端一致。
- 從 fn-knock Runtime 環境直接連線至 Target。
- 檢查 Container Port Publishing、Host 防火牆、路由器轉送與 Cloud Security Group。
- 啟用驗證時,確認瀏覽器登入與通訊協定用戶端使用相同的公網出口 IP、登入後 IP 授權未停用,且自訂憑據已選取目前通訊協定與對外連接埠。
- 確認目前伺服器時間位於全域開放時間窗;定時關閉時連接埠仍可能被掃描到,但不會轉送新流量。
- 若頁面提示啟動失敗並已自動停用,請先修正規則或釋放連接埠後再啟用;沒有啟動錯誤且儲存後仍未監聽時,才執行
同步閘道並查看狀態與 Log。
相關功能開關請參閱系統設定。
