本文へ移動

グローバル IP からのサブドメインルーティング

機器にグローバル IPv4、外部から到達可能な IPv6 がある場合や、すでにエッジプラットフォームからオリジン接続できる環境向けの構成です。fn-knock がアクセス先ドメインに応じてリクエストを転送し、利用者は共通のログインを経て各サービスへ進みます。

  • ネットワーク構成:グローバル IP から直接公開
  • ルーティング方式:Host でサービスを振り分け
  • 推奨ポリシー:ログイン優先
  • 管理画面の場所:システム設定 → モード → サブドメインモード

作業を始める前に

次のものを用意します。

  • DNS を管理できるドメイン(例:example.com)。
  • インターネット側の入口から fn-knock ゲートウェイへ到達できること。fnOS ネイティブ FPK、Docker Compose、OpenWrt、Linux、Synology DSM 7 SPK、Windows のデフォルトは 7999 です。以下では、これをまとめて「実際のゲートウェイポート」と呼びます。
  • TOTP、パスワード、パスキー、設定済み OIDC のうち、少なくとも 1 つの有効なログイン方法。
  • fn-knock を実行する機器から、公開対象のサービスへ接続できること。

インターネット側の入口がない場合は、NAT 越え:サブドメインルーティングを使用してください。SSH やリモートデスクトップなど、サービス本来の TCP/UDP ポートを保護する場合は、元のポートへの直接アクセスを参照してください。

デプロイ方式ごとの機能範囲

デプロイ方式対応状況注意点
fnOS ネイティブ FPKフル対応自動 HTTPS、ホストのファイアウォール、スマート接続を利用できます
Docker Composeサブドメインルーティングに対応ホストのファイアウォールは管理しません。スマート接続と自動 HTTPS は利用できません
OpenWrt パッケージサブドメインルーティングに対応ホストのファイアウォールと併用できます。自動 HTTPS は利用できません。スマート接続には既存の dnsmasq と、メイン設定から /etc/dnsmasq.d/ を読み込む構成が必要です
Synology DSM 7 SPKサブドメインルーティングに対応直接接続、ホストのファイアウォール管理、スマート接続には対応しません。DSM ファイアウォールとルーター / NAT で外部からの経路を管理します
Windows x86_64外部向けゲートウェイとして利用可能7999 はデフォルトで全インターフェースを待ち受けます。Windows ファイアウォールのプロファイル、ルーター / NAT、IPv6 ファイアウォール、ISP の着信ポリシーを別途確認してください。直接接続の IP 許可には対応しません

Docker コンテナ内の 127.0.0.1 はコンテナ自身を指します。サービスがホスト上または別の機器にある場合は、コンテナから到達できるアドレスを指定してください。

1. 外部向け入口と DNS を設定する

認証用ドメインとサービス用ドメインを、インターネット側の入口へ向けます。例:

ドメイン用途名前解決先
auth.example.com共通ログイン192.0.2.10
nas.example.comNAS サービス192.0.2.10

*.example.com のワイルドカード DNS レコードを使うこともできます。

ルーターでは、外部ポートを fn-knock ゲートウェイへ転送します。

  • 外部 443 → 実際のゲートウェイポート:通常、アクセス URL にポート番号は不要です。
  • 外部のカスタムポート → 実際のゲートウェイポート:アクセス URL にその外部ポートを含めます。

管理入口は fn-knock の設定専用です。外部からのオリジン接続先にしないでください。デプロイ方式ごとのポートは、ポートと入口を参照してください。

2. サブドメインモードへ切り替える

システム設定 → モード を開き、サブドメインモード を選んで保存します。

保存後、サイドバーに サブドメインマッピング が表示されます。以前リバースプロキシモードを使っていた場合、モードを切り替えると関連するトンネルが停止します。パスマッピングが削除される可能性もあるため、切り替え前に現在の設定をバックアップしてください。

Docker 版はホストのファイアウォールを自動変更しません。公開予定の外部ポートだけを手動で開放してください。

3. ルートドメインを設定する

サブドメインマッピング を開き、サブドメインモード の設定を展開して、次を入力します。

  • ドメインexample.com
  • 認証サービスの公開 HTTPS ポート:利用者が実際にアクセスする外部ポート。外部の 443 を実際のゲートウェイポートへ転送する場合は 443 を入力します
  • エッジ経由の実クライアント IP 検出:EdgeOne または ESA を使う場合にだけ、該当するプラットフォームを選んで有効にします

ルートドメインによって、サブドメインマッピングの完全なアクセス URL が決まります。変更後は、既存の認証サービスとサービス用マッピングが引き続き一致しているか確認してください。

4. 認証サービスを追加する

サブドメインマッピング認証サービスを追加 をクリックし、auth.example.com を追加します。保存後、サブドメインモード → 現在の認証サービス に表示されます。

認証サービスは、次の条件を満たす必要があります。

  • 現在有効な認証入口が 1 つだけである。
  • 公開アクセスを許可する。保護すると、未ログインの利用者がログインページへ到達できません。
  • 旧マッピングに厳格な許可リストルールが残っている場合、そのまま認証サービスには使えません。元の設定を控えたうえで、認証サービスを作り直してください。
  • DNS と外部ポートから fn-knock ゲートウェイへ到達できる。

まずスマートフォンのモバイル回線から認証 URL を開き、ログインページが表示されることを確認してから、サービス用マッピングを追加します。

5. サービス用マッピングを追加する

サブドメインマッピング を開き、サービスを追加します。例:

設定項目
サブドメインnas
転送先http://192.168.1.20:5666
ログインを必須にするオン
Host ヘッダーデフォルトでは利用者がアクセスした Host を保持。上流が自身のアドレス / Host しか受け付けない場合にだけオフ

保存後、サービスの入口は https://nas.example.com、または実際の外部ポートを含む対応 URL になります。

上流への接続で Basic 認証が必要な場合は、マッピングの詳細設定で Basic 認証を自動入力 を有効にし、上流用の認証情報を入力します。この設定が影響するのは fn-knock から上流へ送るリクエストだけで、利用者のログイン方法ではありません。

Host ヘッダーの設定は、リバースプロキシモード → サブドメインマッピング にも適用されます。上流が外部 Host を明示的に拒否する場合を除き、デフォルトの「Host を保持」のままにしてください。アプリが誤ったコールバック URL やリダイレクト先を生成するのを防げます。

Host ヘッダーの設定は、実行時には上流の Target 単位で適用されます。複数の Host が同じ Target を共有すると、この設定も共有されます。Host ごとに異なる扱いが必要な場合は、別々の Target を指定してください。

6. アクセスポリシーを設定する

Host マッピングの編集画面には、ログインを必須にする スイッチがあります。

設定動作
ログインを必須にする をオフ(現在のログイン優先マッピング)公開アクセスになります。fn-knock のログイン状態や許可リストを確認しません
ログインを必須にする をオン手動の送信元 IP 許可だけでも通過できます。自動 IP 許可も通常は同じ送信元からの継続アクセスを許可しますが、認証情報に設定されたサービススコープによる拒否を上書きしません。有効な送信元 IP 許可がない場合にセッションを確認します
旧バージョンの厳格な許可リストルールログインを必須にする をオフにしても公開されるとは限りません。有効な送信元 IP 許可レコード(手動、またはログイン後に自動作成)だけで判定し、セッション Cookie だけでは送信元条件を満たせません

個人用サービスを新たに公開する場合は、通常 ログインを必須にする をオンにします。現在の画面では厳格な許可リストを新たに選べません。アップグレード後にこのルールが残っている場合は、手動と自動の両方の IP 許可レコードを確認してください。旧ルールを解除するには、マッピング全体を控えたうえで現在の画面から作り直します。ログインを必須にする をオフにするだけでは公開されません。厳格なルールで手動登録した送信元だけを許可したい場合は、ログイン後の自動 IP 許可を無効にし、残っている自動レコードも削除します。

7. HTTPS を設定する

*.example.com のワイルドカード証明書を用意し、対応するドメインへ関連付けます。通常、ワイルドカード証明書はルートドメイン example.com をカバーしません。ルートドメインでもサービスを提供する場合は、証明書の SAN に追加してください。

fnOS ネイティブ FPK では自動 HTTPS を利用できます。Docker と OpenWrt では証明書を別途用意するか、前段プロキシまたはエッジプラットフォームで TLS を終端してください。設定方法は TLS 証明書と HTTPSを参照してください。

8. グローバル IP が変わる場合は DDNS を設定する

動的に変わるグローバル IP には DDNS を使って DNS を更新します。実際に外部から到達できるアドレスファミリーのレコードだけを作成してください。IPv6 で外部から着信できない場合は、AAAA レコードを公開しないでください。

9. 外部ネットワークから検証する

スマートフォンの Wi-Fi をオフにし、次の順序でテストします。

  1. 認証 URL を開き、ログインページへ到達できることを確認します。
  2. サービス URL を開き、未ログイン状態では認証フローへ進むことを確認します。
  3. ログインを完了し、元のサービス URL へ戻ることを確認します。
  4. リクエストログ で、一致したドメイン、上流アドレス、レスポンス状態を確認します。

LAN 内での成功は、外部ネットワークからのテストの代わりにはなりません。家庭内ネットワークの NAT ループバック、スプリット DNS、キャッシュによって設定ミスが隠れることがあります。

よくあるトラブル

症状最初に確認する項目
ドメインがタイムアウトするDNS、グローバル IP、ポートフォワーディング、ISP の着信制限
開くと管理画面へ入る外部からの転送先ポートが誤っています。管理入口ではなく、ゲートウェイを指定してください
ログイン後にリダイレクトがループする認証ドメイン、ルートドメイン、Cookie のスコープ、公開側のプロトコル、前段プロキシの Host / X-Forwarded-* が一致しているか。元のサービス用 Host からアクセスし直します
502 が返るfn-knock から上流へ接続できるか、上流のプロトコルとポートが正しいか
サブドメインが別のサービスへ入るHost ヘッダーが保持されているか、前段プロキシが Host を上書きしていないか
HTTPS 証明書エラー証明書が対象サブドメインをカバーし、正しいドメインへ関連付けられているか

トラブルシューティング全体は FAQを参照してください。

関連ドキュメント

QQ コミュニティ:1081609274