fnOS 共有リンクのパススルー
FNOS 共有リンクのパススルー を有効にすると、未ログインの利用者でも、FNOS による検証を通過したネイティブの /s/... 共有リンクを直接開けます。現在の共有リンクだけに使える、短時間かつ制限付きのアクセスセッションが作成されます。FNOS 全体、他の Host、他のパスが公開されることはありません。
この機能は、グローバル IP から直接公開するサブドメインモードと、リバースプロキシモードのサブドメインマッピングまたはパスモードで利用できます。直接接続モードでは利用できません。
動作条件
- 外部リクエストが最初に fn-knock ゲートウェイへ入る必要があります。
- 現在のリクエストが、実際に FNOS を転送先とする HTTP ルートに一致する必要があります。
- リンクが FNOS で生成された標準の
/s/{shareId}共有入口である必要があります。 システム設定 → FNOSでFNOS 共有リンクのパススルーを有効にします。
Host ルーティングには、FNOS を明示的な転送先とするサービスマッピングを残してください。例:
fnos.example.com -> http://127.0.0.1:5666ゲートウェイは、現在のリクエストが実際に一致した Target、Host、ルート識別子を使って FNOS アップストリームを確認し、他のマッピングからバックエンドを推測しません。パスモードで FNOS をデフォルトルートにする必要はありませんが、/s/... と関連リソースのパスは同じ FNOS ルートに一致する必要があります。別のパスルールやデフォルトルートが処理する場合、共有リンクのパススルーは拒否されます。
関連する設定については、サブドメインマッピングまたはパスマッピングを参照してください。
リクエストの流れ
利用者が /s/{shareId} を開く
-> fn-knock が FNOS アップストリームへ共有リンクの検証を要求
-> 有効、または共有パスワードが必要:/s 専用の短時間共有セッションを発行
-> その共有のページ、プレビュー、サムネイル、ダウンロード、静的リソースを許可
-> 無効、タイムアウト、識別不能、許可範囲外:セッションを消去して / へ戻す検証は URL の形式だけで判断するものではありません。fn-knock は FNOS アップストリーム上の同じ共有入口へリクエストを送り、共有データを解析します。アップストリームが有効と確認した場合、または共有パスワードを必要とする正規のリンクであると確認した場合にだけ、共有フローへ進みます。確認できなければ、デフォルトで拒否します。
セッションの範囲
正規の共有リンクでは fn-knock-fnos-share-session Cookie が書き込まれ、Cookie のパスは /s に制限されます。セッションレコードは 1 つの shareId と現在のルートが一致した FNOS バックエンドの両方に紐付けられ、そのバックエンド上で共有に必要な次のパスだけを許可します。
/s/{shareId}とその配下のパス/s/preview/{shareId}/s/thumb/{shareId}/s/static/...、/s/busstatic/...、/s/download/...
一致するリソースへアクセスすると有効期間が更新されます。この Cookie を使って別の共有リンク、別の Host やルートバックエンド、または許可範囲外のパスへアクセスすると、ゲートウェイは Cookie を消去します。共有セッションをバックエンド間で再利用することはできません。
このセッションは fn-knock の通常のログインセッションとは分離されており、管理画面、FNOS デスクトップ、他のアプリを開くためには使えません。
他のアクセス方式との関係
- 通常のリクエストは、引き続き Host の
ログインを必須にすると既存の厳格な許可リストルールで保護されます。パススルーへ進むのは正規の共有パスだけです。 local_exemptは、さらに前の段階で適用される別の送信元例外です。ゲートウェイがループバック、プライベートネットワーク、リンクローカルの送信元を識別すると、通常のログインは元からスキップされます。LAN 内のテストだけでは、共有リンクのパススルーが公開側で機能していることを証明できません。Basic 認証を自動入力は、Host からアップストリームへ転送先サービスの認証情報を送る機能です。共有リンクの認可ではなく、任意の/s/...を自動的に許可することもありません。- FNOS 共有自体のパスワード、有効期間、取り消し状態は、引き続き FNOS が決定します。fn-knock がこれらの設定を置き換えることはありません。
デフォルト値と画面上の制約
現在の画面にあるのは有効化スイッチだけです。バックエンドでは次のデフォルト値を使用し、通常の利用者が画面から変更することはできません。
| 動作 | デフォルト値 | 役割 |
|---|---|---|
| アップストリーム検証のタイムアウト | 2500 ms | FNOS 共有ページからの応答を待つ |
| 検証キャッシュ | 30 s | 同じ共有リンクへの重複した確認を減らす |
| 同時検証ロック | 5 s | 同じ共有リンクへの同時確認をまとめる |
| 共有セッション | 300 s | 継続して閲覧できるようにする。一致するリソースへのアクセスで更新 |
明確に解析できた有効・無効の結果はキャッシュされます。アップストリームのタイムアウトやページを解析できない場合など、不確実な結果はキャッシュされません。共有を取り消した直後は短時間だけ以前のキャッシュ結果が見える場合がありますが、共有セッションの範囲は元の共有パスだけに制限されたままです。
プラットフォームごとの制約
- これはゲートウェイの機能であり、ホストのファイアウォールには依存しません。fnOS FPK、Docker、OpenWrt、Linux、Synology DSM 7 SPK、Windows が提供する Host / パスゲートウェイで利用できます。
- 直接接続モードが処理するのはログイン後のポート開放だけであり、共有リンクのパススルーが処理を引き継げる共通プロキシ経路がないため利用できません。
- Docker 内の
127.0.0.1:5666はコンテナ自身を指します。FNOS がホスト上で動作している場合、Host の Target をコンテナから到達できるホストアドレスへ変更してください。 - fn-knock が検証できるのは、現在の FNOS バージョンが返す共有ページの構造だけです。アップストリームへ到達できない、応答が遅すぎる、構造が変わった場合はリクエストを拒否し、認証なしの公開アクセスへフォールバックすることはありません。
- この機能は FNOS の更新、権限設定、共有の取り消し、バックアップの代わりにはなりません。
有効化と検証
- 現在のモードが直接接続モードでないことを確認します。
- Host ルートに FNOS のマッピングを残します。パスモードでは、
/s/...と関連リソースのパスが実際に FNOS の Target に一致することを確認します。 - fn-knock の実行環境から FNOS の Target と有効な共有リンクを直接開きます。
システム設定 → FNOSでスイッチを有効にします。- 実際の共有リンクを新しく作成し、モバイル回線上のシークレットウィンドウまたは未ログインの端末から開きます。
- 詳細、プレビュー、サムネイル、ダウンロード、パスワード保護された共有の入力フローを確認します。
- 続いて FNOS のルートパスと他のアプリへアクセスし、通常のログインへ進むか、アクセスが拒否されることを確認します。
ログイン済みのブラウザーや LAN 内だけで検証を終えないでください。通常のセッションと local_exempt のどちらも、共有リンクのパススルーが本当に機能しているかを分かりにくくします。
トラブルシューティング
- 引き続きログインページへ進む、またはルート入口へ戻る:スイッチが有効であり、システムが FNOS の Target を識別できることを確認します。
- Host ルーティングに失敗する:FNOS を明示した Host マッピングを残し、現在の Host が実際にそのルートへ一致することと、Target へ到達できることを確認します。
- パスモードで失敗する:別のパスルールやデフォルトルートが
/s/...を処理していないか確認します。順序または一致範囲を調整してからルートを再同期します。 - 入口は開くがリソースの読み込みに失敗する:
/s/preview、/s/thumb、静的リソース、ダウンロードのリクエストが同じゲートウェイを経由しているか確認します。 - 共有の状態を変更した直後も古い結果が表示される:キャッシュが切れるまで約
30秒待ってから再試行します。 - ときどきタイムアウトする:FNOS の負荷、Target アドレス、中間プロキシを先に確認し、Host 全体を認証なしで公開しないでください。
動作モードの手順はリバースプロキシモード入門とサブドメインモード入門、共通設定はシステム設定、トンネル経路はトンネルを参照してください。
