跳至正文

公網直連:子網域路由

本方案適用於裝置具備公網 IPv4、可用的 IPv6,或已透過 Edge Platform 回源的環境。fn-knock 會依存取網域名稱轉送請求,讓訪客先通過統一登入,再進入對應服務。

  • 網路拓撲:公網直連
  • 路由方式:依 Host 區分服務
  • 建議原則:優先登入
  • 後台位置:系統設定 → 模式 → 子網域模式

開始前

需要準備:

  • 一個可管理 DNS 的網域名稱,例如 example.com
  • 公網入口可以連線至 fn-knock 閘道。fnOS 原生 FPK、Docker Compose、OpenWrt、Linux、Synology DSM 7 SPK 與 Windows 預設使用 7999。下文統稱為「實際閘道連接埠」。
  • 至少一種可用的登入方式:TOTP、密碼、Passkey 或已設定的 OIDC。
  • fn-knock 所在裝置能夠存取業務服務。

沒有公網入口時,請改用內網穿透:子網域路由。需要保護 SSH、遠端桌面等原始 TCP/UDP 連接埠時,請參閱原始連接埠存取:直連授權

部署限制

部署方式可用性注意事項
fnOS 原生 FPK完整支援可使用自動 HTTPS、主機防火牆與智慧連線
Docker Compose支援子網域路由不管理主機防火牆;不提供智慧連線與自動 HTTPS
OpenWrt 外掛套件支援子網域路由可搭配主機防火牆;不提供自動 HTTPS;智慧連線仰賴既有的 dnsmasq,且主設定必須 Include /etc/dnsmasq.d/
Synology DSM 7 SPK支援子網域路由不支援直連、主機防火牆管理與智慧連線;透過 DSM 防火牆及路由器/NAT 管理入站路徑
Windows x86_64可作為公網閘道7999 預設監聽所有介面;需要自行確認 Windows Firewall Profile、路由器/NAT、IPv6 防火牆與 ISP 入站原則,不支援直連授權

Docker 中的 127.0.0.1 是 Container 本身。如果業務服務位於主機或其他裝置,請填入 Container 可存取的位址。

1. 設定公網入口與 DNS

將身分驗證網域名稱與業務網域名稱解析至公網入口。例如:

網域名稱用途解析目標
auth.example.com統一登入192.0.2.10
nas.example.comNAS 服務192.0.2.10

也可以為 *.example.com 設定 Wildcard DNS Record。

路由器應將公網連接埠轉送至 fn-knock 閘道:

  • 公網 443 → 實際閘道連接埠:存取時通常不需要指定連接埠。
  • 公網自訂連接埠 → 實際閘道連接埠:存取位址需要保留該公網連接埠。

管理入口只用於設定 fn-knock,不應作為公網回源目標。各部署方式使用的連接埠請參閱連接埠與入口

2. 切換至子網域模式

前往 系統設定 → 模式,選擇 子網域模式 並儲存。

儲存後,側邊欄應顯示 子網域映射。如果先前使用內網穿透,切換模式會停止相關 Tunnel;路徑映射也可能遭到清除,因此切換前應先備份現有設定。

Docker 部署不會自動修改主機防火牆,需要自行只開放規劃中的公網連接埠。

3. 設定根網域

前往 子網域映射,展開 子網域模式設定,填入:

  • 網域名稱example.com
  • 身分驗證服務使用的連接埠:填入訪客實際存取的公網連接埠。例如公網 443 轉送至實際閘道連接埠時,請填入 443
  • Edge Network 真實 IP 辨識:只有使用 EdgeOne 或 ESA 時,才依對應平台啟用

根網域會決定子網域映射的完整存取位址。修改後,請檢查既有的身分驗證服務與業務映射是否仍相符。

4. 新增身分驗證服務

子網域映射 中按一下 新增身分驗證服務,加入 auth.example.com。儲存後,它會顯示於 子網域模式設定 → 目前身分驗證服務

身分驗證服務必須符合下列條件:

  • 只能有一個目前生效的身分驗證入口。
  • 允許公開存取,否則訪客無法進入登入頁面。
  • 舊版映射若仍帶有嚴格允許清單規則,不能直接作為身分驗證服務;請記下原設定後重新建立。
  • DNS 與公網連接埠已可連線至 fn-knock 閘道。

請先使用手機行動網路開啟身分驗證位址,確認能看到登入頁面,再繼續新增業務服務。

5. 新增業務映射

前往 子網域映射,新增服務。例如:

設定項目範例
子網域nas
目標http://192.168.1.20:5666
要求登入開啟
Host 回應預設保留訪客存取的 Host;只有上游僅接受自身位址/Host 時才關閉

儲存後,業務入口為 https://nas.example.com,或包含實際公網連接埠的對應位址。

如果上游連線使用 Basic Auth,請在映射的進階設定中啟用 略過 Basic Auth,並填入上游憑證。此設定只影響 fn-knock 傳送至上游的請求,不是訪客登入方式。

Host 回應也適用於 內網穿透 → 子網域映射。除非上游明確拒絕外部 Host,否則應保留預設的「保留 Host」,避免應用程式產生錯誤的 Callback URL 或 Redirect。

Host 回應在 Runtime 中依上游 Target 生效。如果多個 Host 共用同一個 Target,它們也會共用此設定;若需要不同的回應原則,請使用不同 Target。

6. 設定存取原則

編輯 Host 映射時,目前介面會提供 要求登入 開關:

設定行為
關閉 要求登入(目前優先登入映射)公開存取,不檢查 fn-knock 登入狀態與 IP 允許清單
開啟 要求登入手動來源授權可獨立放行;自動 IP 授權通常可讓同一來源繼續存取,但不會覆蓋瀏覽器已帶有的服務範圍拒絕;沒有可用的來源授權時才檢查工作階段
舊版嚴格允許清單規則即使關閉 要求登入 也不一定公開;只依有效的來源授權記錄判斷(手動加入或登入後自動建立),工作階段 Cookie 本身不能取代來源條件

新建個人服務通常應開啟 要求登入。目前介面不提供嚴格允許清單選項;如果升級後已有這類規則,請同時檢查手動與自動 IP 授權記錄。若要退出舊版嚴格規則,請先完整記下映射設定,再透過目前介面重新建立;只關閉 要求登入 不足以將其公開。若嚴格規則只允許手動來源,請關閉登入後自動 IP 授權,並清除遺留的自動記錄。

7. 設定 HTTPS

*.example.com 設定 Wildcard Certificate,並將憑證關聯至對應網域名稱。Wildcard Certificate 通常不會涵蓋根網域 example.com;如果根網域也提供服務,需要將其加入憑證 SAN。

fnOS 原生 FPK 可使用自動 HTTPS。Docker 與 OpenWrt 需要自行準備憑證,或由前置 Proxy/Edge Platform 終止 TLS。詳細設定請參閱 SSL 憑證

8. 公網位址變動時設定 DDNS

動態公網位址應透過 DDNS 更新 DNS。請只為確實可從公網連線的 Address Family 建立 Record;如果沒有可用的 IPv6 入站能力,請勿發布 AAAA Record。

9. 從外部網路驗證

關閉手機 Wi-Fi,並依下列順序測試:

  1. 開啟身分驗證位址,確認登入頁面可存取。
  2. 開啟業務位址,確認未登入時會進入身分驗證流程。
  3. 完成登入,確認系統返回原本的業務位址。
  4. 請求記錄 中確認命中的網域名稱、上游位址與回應狀態。

內部網路測試成功不能取代外部網路測試。家用網路的 NAT Loopback、Split DNS 與 Cache 可能會掩蓋設定錯誤。

常見問題

現象優先檢查
網域名稱連線逾時DNS、公網位址、Port Forwarding、ISP 入站限制
開啟後進入管理頁面公網回源連接埠錯誤;應指向閘道,而不是管理入口
登入後不斷重新導向身分驗證網域名稱、根網域、Cookie Scope、公開 Protocol,以及前置 Proxy 的 Host / X-Forwarded-* 是否一致;請從原本的業務 Host 重新發起存取
回傳 502fn-knock 無法存取上游,或上游 Protocol/連接埠填寫錯誤
子網域進入錯誤服務Host 未被保留,或前置 Proxy 覆寫了 Host
HTTPS 憑證錯誤憑證未涵蓋該子網域,或憑證未關聯至正確的網域名稱

完整疑難排解請參閱 FAQ

相關文件

QQ 群組:1081609274