跳至正文

子網域路由

子網域映射 會依 HTTP Host 將多個網域分流至本機 Web 服務,是新部署的預設路由方式。它可用於兩種網路拓樸:

  • 子網域模式:網域直接解析至可連線的公網入口。
  • 內網穿透 → 子網域映射:FRP 或 Cloudflared 將各子網域請求送進閘道。

兩者都使用 auth.example.com 作為登入入口,並讓 nas.example.comalist.example.com 等服務 Host 共用同一個閘道。路徑映射是舊部署的相容方案,不是子網域映射的先決條件。

映射管理 → 子域 管理 Host 映射;同頁的 協議 分頁用於 TCP / UDP 映射。

請求流程

text
瀏覽器 -> 公網直連或 Tunnel -> fn-knock 閘道 -> 依 Host 比對 -> 反向代理 Target 或靜態回應
                                  |
                                  +-> 公開 / 要求登入 / 進階驗證臨時憑據

公網直達且保留預設連接埠時,通常透過 https://nas.example.com:7999 存取。前方接入 EdgeOne、ESA 或 Cloudflared 後,訪客通常會使用標準的 https://nas.example.com,但 Origin 仍會連回實際閘道連接埠。

設定順序

  1. 系統設定 → 模式 中選擇 子網域模式,或選擇 內網穿透 → 子網域映射
  2. 子網域映射 中儲存根網域,例如 example.com
  3. 按下 新增身分驗證服務,建立 auth.example.com
  4. 設定公網 DNS、路由器轉送或 Tunnel Public Hostname,讓相關 Host 都進入同一個閘道。
  5. 新增服務 Host,選擇反向代理、單一檔案或目錄回應,並決定是否啟用 要求登入
  6. 需要依來源或請求特徵放行時,從映射右側選單進入 進階驗證設定
  7. 使用行動網路驗證登入重新導向、返回 URL,以及請求記錄中的用戶端 IP。

公網直連的完整流程請參閱子網域模式快速上手直連存取教學

子網域模式設定

欄位作用建議
網域產生服務 Host 的父網域,例如 example.com先儲存,再新增身分驗證服務與服務映射
目前身分驗證服務尚未登入時的統一登入入口使用 auth.example.com;只能有一筆
身分驗證服務公網 HTTPS 連接埠產生登入 Redirect URL 時使用的訪客端 HTTPS 連接埠公網直連或 FRP 依實際 Port 填寫;託管 Cloudflare Tunnel 隱藏此項並使用標準 HTTPS
Edge Network 真實 IP 識別在公網直連子網域模式中讀取 EdgeOne/ESA 的訪客 IP只有對應平台回源時才顯示;託管 Cloudflare Tunnel 會隱藏此項

身分驗證服務公網 HTTPS 連接埠只會影響外部 URL,不會修改程式 Listen Port,也不會替路由器、Container 或 Edge 平台開放連接埠或建立 NAT Forwarding。

使用託管 Cloudflare Tunnel 時,子網域清單、驗證位址、登入 Redirect 與 redirect_uri 都使用 https://host.example.com,不會附加舊設定中殘留的 :7999。Cloudflare 外部 Port 與 fn-knock 本機 Tunnel 入口由託管流程處理。

根網域與 Host 映射都不能包含 *。根網域應填寫 example.com,服務映射填寫 nasnas.example.com;DNS 是否另外設定 *.example.com Wildcard Record 是不同層級的設定,請勿將 Wildcard 寫入 fn-knock 的根網域或 Host。

EdgeOne / ESA

公網直連子網域模式可啟用騰訊雲 EdgeOne/阿里雲 ESA 支援。啟用後,公開 URL 可省略 :7999,子網域清單、映射 URL 與身分驗證服務也只顯示公開 Host,不再附加舊設定中殘留的閘道連接埠。這只影響訪客端顯示;Edge Origin 仍需指向 fn-knock 的實際 Listen Port。閘道也會依平台 Header 讀取真實用戶端 IP:

平台用戶端 IP Header
騰訊雲 EdgeOneEO-Connecting-IP
阿里雲 ESAAli-Real-Client-IP

ESA 還必須在站台的 Managed Transform 中啟用「新增真實用戶端 IP 標頭」。此開關只涵蓋 EdgeOne/ESA,不是可套用至任意 CDN 的通用信任開關;Cloudflared 應使用 內網穿透 → 子網域映射 的專用連線路徑。

Edge 平台負責外部 80 / 443 時,Origin 仍應指向 fn-knock 的實際閘道連接埠,並停用會快取登入回應的規則、允許 WebSocket。憑證與 DNS 解析請分別參閱 SSL 憑證DDNS 管理

Host 映射

一筆映射包含 Host 與回應類型。反向代理使用 Target,靜態回應使用伺服器檔案路徑:

text
nas.example.com   -> http://127.0.0.1:5666
alist.example.com -> http://127.0.0.1:5244
photos.example.com -> http://127.0.0.1:5666/photos/
download.example.com -> 單一檔案 /srv/downloads/manual.pdf
docs.example.com -> 目錄 /srv/docs
欄位行為
Host/子網域名稱比對請求的 Host;已儲存根網域時可只填 nas
回應類型選擇反向代理、單一檔案或目錄;驗證服務固定使用反向代理
Target僅供反向代理使用;HTTP、HTTPS、WS 或 WSS 上游 URL,可包含 Base Path,且必須能從 fn-knock 所在環境連線
伺服器路徑僅供靜態回應使用;可手動填入絕對路徑,或按一下 瀏覽,從 fn-knock 閘道程序可見的檔案系統中選取檔案/目錄;確認後仍須儲存映射
目標路徑用法Target 含非根路徑時選擇 僅作為入口固定前綴;驗證服務固定使用入口模式
要求登入尚未登入時導向身分驗證 Host,完成後返回原始 URL
停用排程啟用或停用手動下線,或依伺服器本機時間每天控制開放時段
群組將服務 Host 放入現有群組;身分驗證服務不能分組
顯示傳送門控制登入後頁面中的應用程式切換與登出入口
顯示標題覆寫清單、傳送門與書籤中的顯示名稱
應用程式圖示使用自動擷取圖示,或上傳目前服務 Host 的自訂圖示
略過 Basic Auth向上游請求注入 Basic Auth 使用者名稱與密碼
閘道可見性繼承全域規則、使用目前 Host 規則覆寫,或只關閉目前 Host 的可見性限制
啟用 WAF服務 Host 預設啟用;關閉後,目前 Host 會略過全域 WAF

直接編輯已儲存映射的 Host/子網域會視為重新命名,並保留該映射的登入策略、可見性與進階驗證;反向代理映射還會保留 Basic Auth 憑據注入。不要用新增相同 Target 或伺服器路徑的別名來取代重新命名;別名是獨立映射,不會繼承原 Host 的受保護設定。

反向代理的服務應盡量只 Listen 在 Loopback 或內網 IP,避免繞過閘道。在 Docker 中,127.0.0.1 代表 Container 本身;反向 Proxy 至 Host Service 時,應使用 Container 可連線的 Host IP。Docker 部署的 Target 欄位會提示偵測到且可連線的區域網路 IP 候選,但提示不會修改 Container Network、Port Publishing 或上游 Listen 範圍。

靜態回應不需要上游服務。單一檔案只會在 Host 根路徑回傳指定檔案;目錄回應支援預設文件、目錄列表與安全轉譯 README。伺服器路徑、安全邊界與 Docker 唯讀掛載請參閱靜態檔案與目錄回應

反向代理 Target 含非根路徑時,編輯器會顯示 目標路徑用法

  • 僅作為入口(相容模式):預設值。只有訪客存取網域根路徑時才使用 Target 內的路徑,其他 Request Path 保持不變。例如 Target 路徑為 /login 時,/ 會進入上游 /login,但 /assets/app.js 仍進入上游 /assets/app.js。適合入口頁位於子路徑、但靜態資源或登入 Callback 仍位於上游根目錄的應用程式。
  • 固定前綴(目錄掛載):將 Target 路徑加到每個上游 Request 前。例如 Target 路徑為 /webdav 時,訪客 /floccus/a 會轉送到上游 /webdav/floccus/a。適合 WebDAV 或明確支援目錄掛載的服務。

既有映射若缺少此欄位,會依 僅作為入口 處理。無論選擇哪一種模式,都應實際驗證首頁、靜態資源、Redirect、Cookie 與 WebSocket;此選項只決定上游 Request Path 的組合方式,無法替上游改寫 HTML、Cookie Path 或絕對 URL。標題與圖示擷取會使用完整 Target,並保留明確連接埠。

身分驗證服務是一筆特殊的 Host 映射:它必須公開,不能再啟用要求登入或 Basic Auth 注入,否則登入入口會形成 Redirect Loop 或被自身攔截。

群組檢視

開啟清單上方的 群組檢視 後,可在 管理群組 中建立、重新命名、排序或刪除群組,並透過單筆編輯、批次移動或拖曳將服務 Host 放入群組。最多可建立 32 個群組;名稱必須為 140 個字元,且忽略大小寫後不得重複。刪除仍有映射的群組不會刪除 Host,而是將它們移至「未分組」。

群組順序與 Host 順序會同步到登入後的傳送門及內建 /__select__ 選擇頁;匯出瀏覽器書籤時也會建立對應的群組資料夾。切回清單檢視後,群組歸屬仍會保留,但傳送門、選擇頁及新匯出的書籤會使用扁平順序。搜尋時只顯示命中的群組與 Host,並暫時展開結果;收合狀態只儲存在目前瀏覽器。

群組只會改變導覽與管理順序,不會修改驗證、可見性、WAF 或 Target。身分驗證服務永遠位於群組之外,憑據的 Host 服務範圍仍依實際存取權限判斷。

窄螢幕裝置會將映射顯示為卡片清單,不再要求橫向捲動桌面表格。每張卡片保留標題、Host、回應目標(反向代理位址或伺服器路徑)、狀態、即時流量與更多操作;群組仍可收合或整組選取,拖曳左側把手可在群組內或群組之間排序。進入多選模式後,可以全選目前結果或選取單一群組。

在手機上編輯映射並將焦點移至輸入欄位時,對話框會依軟體鍵盤的可見區域調整高度,並將目前輸入欄位捲入可見範圍;底部的取消、儲存或路徑選取操作仍可使用。軟體鍵盤收起後,對話框會恢復底部面板版面。

Basic Auth 是反向代理的上游憑據注入

略過 Basic Auth 儲存的是 Target Service 本身的 Basic Auth 憑據。閘道在轉送請求、擷取頁面標題與 Favicon 時,會將憑據傳給上游,避免瀏覽器再次跳出 Basic Auth 對話框。

它不會建立 fn-knock 帳號、不能取代 auth.example.com 登入,也不會變更 要求登入 或既有 strict_whitelist 規則。憑據應視為敏感設定處理;只有確實需要時才儲存。

使用者名稱與密碼必須同時填寫,且使用者名稱不可包含半形冒號。儲存不完整或無效的設定時,系統會停用該項目並清除憑據,不會保留只設定一半的狀態。

應用程式圖示

編輯一般服務 Host 時,開啟 應用程式圖示 可預覽目前來源、重新擷取上游圖示,或上傳自訂圖片。支援 PNG、JPG、WebP、AVIF、SVG 與 ICO,原始檔案不可超過 5 MB;瀏覽器會移除 SVG 中的外部內容,伺服器也會拒絕包含不安全 DOCTYPE 或 Entity Declaration 的 SVG,再將圖片完整縮放到方形畫布並轉換為不超過 128 KiB 的內嵌圖示。

自訂圖示會優先顯示在子網域清單與傳送門中;瀏覽器書籤匯出、導覽面板同步和閘道圖示入口也使用相同內容。設定中儲存的圖示必須是受支援圖片類型的 Base64 data:image/...;base64,...。外部 URL、非 Base64 Data URL、無法解碼或超出限制的舊圖示不會下發閘道或匯出。一般上傳與自動擷取會完成轉換;從舊備份或外部設定匯入後圖示消失時,請重新擷取或上傳。

按一下 還原自動擷取 會清除自訂覆寫並重新讀取反向代理 Target;若 Target 未回傳受支援圖示,頁面會顯示尚未擷取。靜態映射不會自動讀取檔案標題或圖示,請手動填入標題並上傳自訂圖示。身分驗證服務不支援自訂圖示。圖示會包含在設定與 .knock 備份中;請勿將敏感的內部圖形當作一般疑難排解附件分享。

單一 Host 的可見性與 WAF

啟用全域閘道可見性後,服務 Host 的進階設定可選擇「繼承全域」「自訂」或「關閉」。自訂規則會取代全域規則;關閉只會讓目前 Host 略過可見性檢查;身分驗證 Host 必須繼承全域規則。設定方式與回復建議請參閱閘道可見性

服務 Host 預設啟用 WAF,可個別關閉以略過全域 WAF。全域 WAF 本身關閉時,此開關不會產生任何防護;身分驗證 Host 無法透過 Host 設定繞過 WAF。詳細原則請參閱 WAF

進階驗證

啟用 要求登入 的 HTTP/HTTPS 服務 Host,會在右側選單顯示 進階驗證設定。它可依來源 IP、地區、URL Path、Request Header、Query Parameter 或 HTTP Method,簽發僅限目前 Host 的臨時憑據;未命中規則的請求會繼續使用一般登入流程。

規則命中後放行的是整個目前 Host,而不是只有觸發規則的路徑或請求。它也不等同於系統登入,不會建立傳送門或授權其他 Host。設定前請先閱讀子網域進階驗證

存取原則與 local_exempt

目前介面設定未獲授權的公網請求
關閉 要求登入(目前為登入優先映射)直接進入上游
啟用 要求登入沒有有效來源 IP 授權或工作階段時,導向身分驗證 Host
啟用 要求登入 與進階驗證規則命中時簽發目前 Host 的臨時憑據;未命中時繼續檢查來源授權與登入

後端仍相容舊設定中的 strict_whitelist 規則:即使關閉 要求登入,它也不一定公開,仍會依有效的來源授權記錄判斷(手動建立或登入後自動建立),瀏覽器工作階段 Cookie 本身無法取代來源條件。目前的 Host 編輯介面沒有新增或切換嚴格允許清單規則的控制項;需要退出此模式時,請先記錄完整映射,再透過目前介面重新建立。新映射中,手動來源授權可獨立放行;自動 IP 授權通常允許同一來源繼續存取,但不會覆蓋已攜帶的服務範圍拒絕。IP 允許清單 不是嚴格來源限制開關。需要在請求到達映射前先限縮來源時,請使用閘道可見性或外部網路層規則。

登入憑據可限制允許存取的 Host 範圍。使用某組憑據成功登入,不代表它自動擁有所有服務子網域的權限。

身分驗證服務會先判斷閘道識別到的來源 IP。Loopback、私有網路、Link-local 等來源會回傳 local_exempt,略過一般登入與嚴格允許清單檢查。這代表區域網路屬於預設信任邊界:

  • 既有嚴格允許清單規則也不會要求區域網路來源必須登入。
  • 憑據的 Host 服務範圍不會用來限制本地豁免來源;這是網路信任邊界,不適合用來驗證憑據範圍。
  • 區域網路測試無法證明公網原則有效。
  • FRP、Cloudflared、EdgeOne 或 ESA 位於前方時,應從請求記錄確認真實公網 IP 已傳至閘道;若 Proxy 的私有 IP 被誤認為訪客來源,會改變授權結果。

來源網路設定請參閱 IP 允許清單閘道可見性

批次匯入與維護

一鍵探索 會掃描允許的本機 IPv4 網段,並產生候選 Host。掃描最多接受 16 個 CIDR,合計 1024 台主機;只會掃描 Loopback、網路介面、Docker Host、既有映射與手動儲存的本機範圍,不會用來探測公網。

掃描視窗可選擇「依裝置建議」(預設)或低、中、高、極高強度。等級只會改變 Concurrency、速度與裝置負載,不會改變掃描範圍或探索結果;預設會綜合 CPU、可用記憶體與 File Descriptor 預算,選擇較安全的等級。NAS、路由器等資源較有限的裝置,建議維持自動或低強度。

掃描連接埠、CIDR 允許範圍、Docker 網路視角與批次儲存規則,請參閱服務探索與批次串接

清單操作包括:

  • 多選:進入選擇模式後,可選取目前搜尋結果、單一群組或任意服務 Host,批次移動群組、啟用、停用、套用相同每日開放時間窗或刪除;驗證服務不參與批次選擇。搜尋條件或檢視變更會清除目前選擇,批次刪除無法復原。
  • 重新整理圖示與標題:重新擷取反向代理 Upstream Metadata;靜態映射會略過。
  • 清理過期服務:先以 HEAD、失敗後改用 GET 檢查 HTTP / HTTPS Upstream,由管理員確認後刪除無法連線的映射;靜態映射不會納入。
  • 匯出為書籤:匯出服務 Host,不包含驗證服務。
  • 清空所有設定:經過兩次確認後刪除驗證服務及所有 Host 映射,保留 Root Domain 等模式設定。

單一 Host 的流量詳細資料可查看即時流量與有效 IP,並將異常來源加入通用封鎖清單

同步到導覽面板 可將已啟用的應用 Host 發佈到 Sun-Panel、OneNav 或 Van-Nav,但不匯出內部 Target。預覽、資源所有權、清理與自動同步邊界見導覽面板同步

最佳化 Target 位址

清單維護選單中的 最佳化 Target 位址 只會處理反向代理映射,可在 Loopback 與偵測到的主機區域網路位址之間批次改寫 Target,適合在部署方式變更後統一修正回源位址。選擇區域網路位址時,只列出目前使用 127.0.0.1 的映射;選擇 Loopback 時,只列出目前使用已偵測本機位址的映射。預覽只替換 Host,保留協定、連接埠與路徑,並只儲存勾選項目;靜態檔案與目錄映射不會出現在預覽中。

候選位址來自 fn-knock 所在環境的網路探測,不保證 Target 可達。Docker 內的 127.0.0.1 只指向目前 Container;套用前須確認 Container 到 Host 的路由與目標連接埠,儲存後逐一驗證服務 Host。

深度監控

一般 Request Log 無法解釋 HTTP 或 WebSocket 問題時,可從單一服務 Host 的 更多 → 深度監控 啟動限時擷取。監控只接受已設定的精確 Host,預設持續 30 分鐘,最長 2 小時;頁面會顯示即時摘要,並可下載包含 Request、Response、Upstream 與 WebSocket Payload 資訊的 ZIP。

深度監控會將 Cookie、Authorization、Request Body、Response Body 與 WebSocket 原始 Frame 以未遮蔽形式寫入閘道磁碟。只在重現問題所需的短時間內啟用,完成後立即停止並清除;未手動刪除的資料會在工作階段停止 24 小時後自動移除。匯出的壓縮檔應視同憑據檔案,不要直接上傳至公開 Issue 或群組聊天。

即時文字區只保留最近 1000 行摘要;若看到捨棄計數、Quota 用盡、寫入過載或儲存錯誤,請以下載包與工作階段停止原因為準。深度監控用於短期故障取證,不能取代常時啟用的Request LogWAF或 Upstream 應用程式 Log。

Host 路由的延伸能力

  • Path 回應只為某個 Host 加入少量特殊 Path;未命中時仍會返回該 Host 的預設 Target。
  • 靜態檔案與目錄回應讓整個服務 Host 直接讀取本機檔案,不需要反向代理上游。
  • 協定映射為公網直連子網域模式補充 TCP / UDP 連接埠,不適用於內網穿透的子網域映射。
  • 飛牛分享直通只會 Bypass 合法的飛牛 /s/... 分享路徑,不會公開整個網站。

這些能力都不會改變 Host 是 Web 主要路由的基本架構。

平台限制

  • Host 路由與靜態回應可在飛牛 FPK、Docker、OpenWrt、Linux、macOS、Synology DSM 7 SPK 及 Windows 上使用;靜態路徑必須能從閘道處理程序所在的檔案系統讀取,實際能否從公網連線,仍取決於各平台的 Port Publishing 與網路路徑。
  • 自動寫入 Host 防火牆及智慧連線,只由具備對應 Runtime 能力的飛牛標準 FPK 提供;Docker、OpenWrt、Linux、macOS、Synology 與 Windows 均不提供。
  • 協定映射只會顯示在公網直連子網域模式中。即使 Docker 額外 Publish Port,也不會由 fn-knock 管理 Host 防火牆。
  • OpenWrt 的連接埠放行與區域網路 DNS 分流由 OpenWrt 自行管理;fn-knock 不提供直連、Host 防火牆管理、智慧連線、SSH 安全性或應用程式內 FPK 更新。Web 終端機可連線管理員設定的遠端 SSH 目標,也可啟用預設關閉、繼承 fn-knock 服務身分的 OpenWrt 本機 PTY。
  • fn-knock 不會自動關閉 Upstream Service 原有的公網監聽,也無法取代 Upstream 更新、備份及最小權限設定。

驗證與疑難排解

請依請求流程檢查:

  1. DNS 或 Tunnel 是否將目前 Host 送到正確閘道;託管 Cloudflared 請先檢查核對狀態、Wildcard DNS 與 Ingress。
  2. 請求記錄中的 Host 與用戶端 IP 是否正確。
  3. 身分驗證服務是否存在,且未啟用要求登入或 Basic Auth。
  4. 服務映射是否啟用,目前時間是否位於開放時段內。
  5. 反向代理 Target 是否能從 fn-knock Runtime 環境連線;靜態映射則重新檢查伺服器路徑、類型、權限與掛載。
  6. 登入憑據是否允許目前 Host;若啟用進階驗證,再確認規則組、條件與臨時憑據狀態。
  7. 若存在舊版嚴格允許清單規則,檢查目前公網來源是否已獲准放行。
  8. HTTPS 憑證是否涵蓋目前 Host,前置平台是否允許 WebSocket,且未快取身分驗證回應。

請先接入一至兩個服務並完成外網驗證,再進行批次探索與收緊存取原則。

QQ 群組:1081609274