跳至正文

fnOS 分享直通

飛牛分享直通 允許尚未登入的訪客,直接開啟經飛牛 OS 驗證的原生 /s/... 分享連結。它只會替目前的分享建立範圍受限、有效時間短暫的存取工作階段,不會公開整個飛牛站台、其他 Host 或其他路徑。

此功能可用於公網直接連線的子網域模式,以及內網穿透的子網域映射或路徑模式;直連模式不支援。

生效條件

  1. 外部請求必須先進入 fn-knock 閘道。
  2. 目前請求必須命中一筆真正指向飛牛 OS 的 HTTP 路由。
  3. 連結必須是由飛牛產生的標準 /s/{shareId} 分享入口。
  4. 系統設定 → 飛牛 開啟 飛牛分享直通

Host 路由中應保留一筆明確指向飛牛的服務映射,例如:

text
fnos.example.com -> http://127.0.0.1:5666

閘道會使用目前請求實際命中的 Target、Host 與路由識別碼探測飛牛上游,不再從其他映射猜測後端。路徑模式不要求飛牛成為預設路由,但 /s/... 與相關資源路徑必須命中同一筆飛牛路由;若由其他路徑規則或預設路由接管,分享直通會拒絕處理。

相關設定請參閱子網域映射路徑映射

請求流程

text
訪客開啟 /s/{shareId}
  -> fn-knock 請求飛牛上游驗證分享
  -> 有效或需要分享密碼:簽發僅供 /s 使用的短期分享工作階段
  -> 放行該分享的頁面、預覽、縮圖、下載與靜態資源
  -> 無效、逾時、無法識別或存取越界:清除工作階段並回到 /

驗證並非只檢查 URL 格式。fn-knock 會向飛牛上游請求同一個分享入口並解析分享資料;只有上游確認連結有效,或確認這是需要分享密碼的合法連結時,才會進入分享流程。無法確認時一律拒絕。

工作階段範圍

合法分享會寫入 fn-knock-fnos-share-session Cookie,其 Path 限制為 /s。工作階段記錄會同時綁定一個 shareId 與目前命中的飛牛後端,只允許該後端上此分享所需的路徑群組,包括:

  • /s/{shareId} 及其子路徑
  • /s/preview/{shareId}
  • /s/thumb/{shareId}
  • /s/static/.../s/busstatic/.../s/download/...

存取符合規則的資源時會延長有效期。攜帶此 Cookie 存取其他分享、另一個 Host 或路由後端,或超出允許路徑時,閘道會清除 Cookie;分享工作階段不能跨後端重複使用。

此工作階段與 fn-knock 的一般登入工作階段彼此隔離,不能用來開啟管理頁面、飛牛桌面或其他應用程式。

與其他存取方式的關係

  • Host 的 要求登入 與既有嚴格允許清單規則仍會保護一般請求;只有合法的分享路徑會走 Bypass。
  • local_exempt 是另一條更早套用的來源例外:閘道識別到 Loopback、私有網路或 Link-local 來源時,原本就會略過一般登入流程。區域網路測試無法證明分享直通在公網上有效。
  • 略過 Basic Auth 是由 Host 向上游注入 Target Service 的憑據,並不是分享授權,也不會讓任意 /s/... 自動通過。
  • 飛牛分享本身的密碼、有效期限與撤銷狀態仍由飛牛 OS 決定;fn-knock 不會取代這些設定。

預設參數與介面限制

目前頁面只提供啟用開關。後端使用下列預設值,一般使用者無法從頁面修改:

行為預設值作用
上游驗證逾時2500 ms等待飛牛分享頁面回應
驗證 Cache30 s減少對同一分享的重複探測
並行驗證 Lock5 s合併同一分享的並行探測
分享工作階段300 s維持連續瀏覽;存取符合規則的資源時會續期

可明確解析為有效或無效的結果會被快取;上游逾時、頁面無法解析等不確定結果則不會快取。剛撤銷分享後,短時間內仍可能看到 Cache 結果,但分享工作階段依然只限原本的分享路徑。

平台限制

  • 這是閘道功能,不依賴 Host 防火牆,可用於飛牛 FPK、Docker、OpenWrt、Linux、群暉 DSM 7 SPK,以及 Windows 支援的 Host/路徑閘道。
  • 直連模式只處理登入後的連接埠放行,沒有統一的 Proxy 路徑可供分享 Bypass 接管,因此無法使用。
  • 在 Docker 中,127.0.0.1:5666 代表 Container 本身。飛牛執行於 Host 時,Host Target 必須改成 Container 可連線的 Host IP。
  • fn-knock 只能驗證目前飛牛版本所回傳的分享頁面結構。上游無法連線、回應過慢或結構改變時都會拒絕,不會降級成公開存取。
  • 此功能不能取代飛牛更新、權限設定、撤銷分享與備份。

啟用與驗證

  1. 確認目前不是直連模式。
  2. 在 Host 路由中保留飛牛映射;使用路徑模式時,確認 /s/... 與相關資源路徑實際命中飛牛 Target。
  3. 從 fn-knock 的 Runtime 環境直接開啟飛牛 Target 與一個有效分享。
  4. 系統設定 → 飛牛 開啟此功能。
  5. 建立一個真實分享連結,並使用行動網路上的無痕視窗或未登入裝置開啟。
  6. 驗證詳細資訊、預覽、縮圖、下載,以及密碼保護分享的輸入流程。
  7. 接著存取飛牛根路徑與其他應用程式,確認仍會進入一般登入流程或遭拒絕。

不要只在已登入的瀏覽器或區域網路中驗證一次;一般工作階段與 local_exempt 都可能掩蓋分享 Bypass 是否真的生效。

疑難排解

  1. 仍進入登入頁面或回到根入口:確認功能已啟用,且系統能識別飛牛 Target。
  2. Host 路由失敗:保留明確的飛牛 Host 映射,確認目前 Host 實際命中該路由,並檢查 Target 是否可連線。
  3. 路徑模式失敗:檢查 /s/... 是否由其他路徑規則或預設路由接管,調整順序或比對範圍後再重新同步路由。
  4. 入口可開啟,但資源載入失敗:檢查 /s/preview/s/thumb、靜態資源或下載請求是否經過同一個閘道。
  5. 剛修改分享狀態,仍顯示舊結果:等待約 30 秒,讓 Cache 過期後再試。
  6. 偶發逾時:先排查飛牛負載、Target IP 與中間 Proxy,不要直接將整個 Host 改成公開。

執行模式步驟請參閱內網穿透快速上手子網域模式快速上手;全域入口請參閱系統設定,Tunnel 連線請參閱內網穿透

QQ 群組:1081609274