fnOS 分享直通
飛牛分享直通 允許尚未登入的訪客,直接開啟經飛牛 OS 驗證的原生 /s/... 分享連結。它只會替目前的分享建立範圍受限、有效時間短暫的存取工作階段,不會公開整個飛牛站台、其他 Host 或其他路徑。
此功能可用於公網直接連線的子網域模式,以及內網穿透的子網域映射或路徑模式;直連模式不支援。
生效條件
- 外部請求必須先進入 fn-knock 閘道。
- 目前請求必須命中一筆真正指向飛牛 OS 的 HTTP 路由。
- 連結必須是由飛牛產生的標準
/s/{shareId}分享入口。 - 在
系統設定 → 飛牛開啟飛牛分享直通。
Host 路由中應保留一筆明確指向飛牛的服務映射,例如:
fnos.example.com -> http://127.0.0.1:5666閘道會使用目前請求實際命中的 Target、Host 與路由識別碼探測飛牛上游,不再從其他映射猜測後端。路徑模式不要求飛牛成為預設路由,但 /s/... 與相關資源路徑必須命中同一筆飛牛路由;若由其他路徑規則或預設路由接管,分享直通會拒絕處理。
請求流程
訪客開啟 /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 | 等待飛牛分享頁面回應 |
| 驗證 Cache | 30 s | 減少對同一分享的重複探測 |
| 並行驗證 Lock | 5 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 只能驗證目前飛牛版本所回傳的分享頁面結構。上游無法連線、回應過慢或結構改變時都會拒絕,不會降級成公開存取。
- 此功能不能取代飛牛更新、權限設定、撤銷分享與備份。
啟用與驗證
- 確認目前不是直連模式。
- 在 Host 路由中保留飛牛映射;使用路徑模式時,確認
/s/...與相關資源路徑實際命中飛牛 Target。 - 從 fn-knock 的 Runtime 環境直接開啟飛牛 Target 與一個有效分享。
- 在
系統設定 → 飛牛開啟此功能。 - 建立一個真實分享連結,並使用行動網路上的無痕視窗或未登入裝置開啟。
- 驗證詳細資訊、預覽、縮圖、下載,以及密碼保護分享的輸入流程。
- 接著存取飛牛根路徑與其他應用程式,確認仍會進入一般登入流程或遭拒絕。
不要只在已登入的瀏覽器或區域網路中驗證一次;一般工作階段與 local_exempt 都可能掩蓋分享 Bypass 是否真的生效。
疑難排解
- 仍進入登入頁面或回到根入口:確認功能已啟用,且系統能識別飛牛 Target。
- Host 路由失敗:保留明確的飛牛 Host 映射,確認目前 Host 實際命中該路由,並檢查 Target 是否可連線。
- 路徑模式失敗:檢查
/s/...是否由其他路徑規則或預設路由接管,調整順序或比對範圍後再重新同步路由。 - 入口可開啟,但資源載入失敗:檢查
/s/preview、/s/thumb、靜態資源或下載請求是否經過同一個閘道。 - 剛修改分享狀態,仍顯示舊結果:等待約
30秒,讓 Cache 過期後再試。 - 偶發逾時:先排查飛牛負載、Target IP 與中間 Proxy,不要直接將整個 Host 改成公開。
