グローバル 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.com | NAS サービス | 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 をオフにし、次の順序でテストします。
- 認証 URL を開き、ログインページへ到達できることを確認します。
- サービス URL を開き、未ログイン状態では認証フローへ進むことを確認します。
- ログインを完了し、元のサービス URL へ戻ることを確認します。
リクエストログで、一致したドメイン、上流アドレス、レスポンス状態を確認します。
LAN 内での成功は、外部ネットワークからのテストの代わりにはなりません。家庭内ネットワークの NAT ループバック、スプリット DNS、キャッシュによって設定ミスが隠れることがあります。
よくあるトラブル
| 症状 | 最初に確認する項目 |
|---|---|
| ドメインがタイムアウトする | DNS、グローバル IP、ポートフォワーディング、ISP の着信制限 |
| 開くと管理画面へ入る | 外部からの転送先ポートが誤っています。管理入口ではなく、ゲートウェイを指定してください |
| ログイン後にリダイレクトがループする | 認証ドメイン、ルートドメイン、Cookie のスコープ、公開側のプロトコル、前段プロキシの Host / X-Forwarded-* が一致しているか。元のサービス用 Host からアクセスし直します |
| 502 が返る | fn-knock から上流へ接続できるか、上流のプロトコルとポートが正しいか |
| サブドメインが別のサービスへ入る | Host ヘッダーが保持されているか、前段プロキシが Host を上書きしていないか |
| HTTPS 証明書エラー | 証明書が対象サブドメインをカバーし、正しいドメインへ関連付けられているか |
トラブルシューティング全体は FAQを参照してください。
