本文へ移動

元のポートへ直接アクセスする

外部から着信可能なグローバル IP があり、SSH、リモートデスクトップ、その他の TCP/UDP サービスへ元のポート番号のまま接続したい環境向けの構成です。利用者は先に fn-knock ゲートウェイで認証を済ませます。fn-knock は接続元のグローバル IP に対して、保護対象ポートを一時的に開放します。

  • ネットワーク構成:グローバル IP から直接接続
  • ルーティング方式:元の TCP/UDP ポート
  • アクセス方法:ログイン後に IP 許可を取得
  • 管理画面の場所:システム設定 → モード → 直接接続モード(非推奨)

直接接続モードはホストのファイアウォールに依存し、現在は主に fnOS ネイティブ FPK と OpenWrt で利用します。Docker、Synology DSM 7 SPK、Windows では fn-knock からホストのファイアウォールを管理できないため、この構成は使用できません。

利用できる条件

直接接続を選ぶ前に、次の点を確認してください。

  • 管理画面に 直接接続モード(非推奨) が表示され、現在のデプロイ方式がホストのファイアウォール管理に対応している。
  • 機器に利用可能なグローバル IPv4 / IPv6 があるか、管理可能なポートフォワーディングを設定できる。
  • 保護したい対象が HTTP/HTTPS の Web サイトではなく、元のポートで待ち受けるサービスである。
  • 設定ミスでリモート接続できなくなっても、LAN 内またはコンソールからファイアウォールを復旧できる。

直接接続モードは NAT 越えのための機能ではありません。外部から着信できるグローバル IP がない場合は、NAT 越え:サブドメインルーティングを使用してください。Web サービスには、グローバル IP からの直接公開:サブドメインルーティングを優先します。

fn-knock が制御するのはネットワークの入口だけです。SSH、リモートデスクトップ、その他の上流サービスは、引き続き適切に更新し、権限を絞り、それぞれの認証機能を有効にしてください。

アクセスの流れ

  1. 利用者がインターネット側から fn-knock ゲートウェイを開きます。デフォルトポートは 7999 です。
  2. 利用者がログインを完了します。
  3. セッション設定と使用した認証情報で許可されていれば、fn-knock が現在の接続元グローバル IP を一時許可に登録します。自動許可できない場合は、管理者が手動で許可リストへ追加します。
  4. 利用者は同じ接続元 IP から、サービス本来のポートへ接続します。
  5. セッションまたは IP 許可の期限が切れると、その IP からサービスのポートへ接続できなくなります。

作業を始める前に

モードを切り替える前に、次の準備を済ませます。

  • 管理画面、ゲートウェイ入口、保護するポートを記録する。
  • TOTP、パスワード、パスキー、OIDC のうち、少なくとも 1 つでログインできることを確認する。
  • 現在の動作モード、ルーティング、ファイアウォール設定をバックアップする。
  • 復旧経路として、LAN 内からのアクセスまたは機器のコンソールを確保する。

モードを切り替えるとファイアウォールルールも変更されます。唯一のリモート管理接続しかない状態で、初めて有効にしないでください。

1. 直接接続モードを有効にする

システム設定 → モード を開き、直接接続モード(非推奨) を選んで保存します。

有効化後は、次の状態になっている必要があります。

  • 想定しているインターネット側の入口から fn-knock のゲートウェイポートへ到達できる。
  • SSH やリモートデスクトップなどの保護対象ポートが、未許可の IP にはデフォルトで閉じている。
  • LAN 内、または明示的に残した管理元から設定を復旧できる。

fnOS ネイティブ FPK と OpenWrt では、ファイアウォールの実装が異なります。切り替え直後に外部ネットワークから未ログイン状態で接続し、サービスのポートが確実に拒否されることを確認してください。

2. 認証用の入口を設定する

少なくとも 1 つのログイン方法を設定し、インターネット側から fn-knock ゲートウェイを開けるようにします。ドメインの例:

  • auth.example.com:7999
  • 外部ポート 443 をゲートウェイの 7999 へ転送する場合は https://auth.example.com

認証用の入口には HTTPS を使用し、認証情報やセッション情報を平文で送らないようにしてください。証明書の設定は TLS 証明書と HTTPSを参照してください。

3. ログイン後の IP 許可を設定する

システム設定 → セッション を開き、ログイン後の IP の扱いを設定します。

方式向いている用途
セッションに連動直接接続モードでの推奨設定。セッションが有効な間、対応する IP 許可も維持します
IP を自動的に許可しないブラウザーのログインセッションだけを使用します。元のポートへ接続するには、IP を手動で許可リストに追加する必要があります
カスタムIP を許可する時間を固定したい場合に使用します

直接接続モードが保護するのはネットワークポートです。IP の自動許可を無効にした場合、ブラウザーでログインに成功しても SSH やリモートデスクトップのポートは自動では開きません。

サービススコープが制限されたログイン認証情報では、IP の自動許可は作成されません。制限付き TOTP、それに紐づくパスキー / OIDC、サービススコープを制限したユーザー名・パスワードのアカウントが該当します。これは、制限付きの認証情報が送信元 IP を介してアクセス範囲を広げないようにするためです。直接接続では、サービススコープを制限していない認証情報を使うか、現在のグローバル IP / CIDR を手動で追加してください。その後、外部ネットワークからポートを再検証します。

4. ドメイン、DDNS、証明書を設定する

動的に変わるグローバル IP には DDNS を使い、auth.example.com を更新できます。DNS には、実際にインターネット側から到達できるアドレスだけを公開してください。

認証用ドメインには、信頼された TLS 証明書を設定します。自動 HTTPS を使えるのは対応するデプロイ方式だけです。Docker と OpenWrt では証明書を別途用意するか、前段に TLS 終端を設けてください。

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

スマートフォンのモバイル回線など、別の外部ネットワークからテストします。

  1. 未ログイン状態で保護対象ポートへ接続し、拒否またはタイムアウトすることを確認します。
  2. 認証用の入口を開き、ログインします。
  3. 同じネットワークから保護対象ポートへ再接続し、サービス本体の認証画面まで進めることを確認します。
  4. システム設定 → セッション または IP 許可リストで、現在の接続元 IP と有効期限を確認します。
  5. ログアウトするか許可の期限切れを待ち、ポートが再び閉じることを確認します。

SSH のテストでは確立済みの接続を使い回さず、新しい接続を作ってルールが反映されているか確認してください。

接続元 IP が変わる場合

モバイル回線、社内プロキシ、一部の家庭用回線では、接続元のグローバル IP が頻繁に変わることがあります。IP が変わっても、以前の許可は新しいアドレスへ自動では引き継がれません。認証用の入口を開き直してログインしてください。

接続元を厳密に制限する場合は、固定 IP または CIDR を手動で追加できます。モバイル回線に対して広すぎるネットワーク範囲を登録すると、公開範囲が必要以上に広がるため避けてください。

デプロイ方式ごとの制約

デプロイ方式直接接続説明
fnOS ネイティブ FPK対応ホストのファイアウォールを管理できます
OpenWrt パッケージ対応ルールはルーターのファイアウォールへ適用されます
Docker Compose非対応Docker コンテナからホストのファイアウォールを管理することはできません
Synology DSM 7 SPK非対応パッケージは DSM ホストのファイアウォールを変更しません
Windows x86_64非対応インストーラーが作るアプリ単位のルールは直接接続用の IP 許可とは異なり、管理画面にもこのモードはありません

よくあるトラブル

症状最初に確認する項目
ログインできても元のポートへ到達できないログイン後の IP 許可方式、現在の接続元 IP、ポートフォワーディング
未ログインでもサービスのポートへ接続できるルーターまたはホストに、fn-knock を迂回して許可するルールが残っていないか
有効化後にリモート管理できなくなったローカル接続またはコンソールからファイアウォールと動作モードを復旧
IPv4 は制限できたが IPv6 が公開されたままIPv6 ファイアウォールに制限が反映されているか、AAAA レコードが別の入口を指していないか
IP 許可がすぐ無効になるセッションの有効期間が短すぎないか、接続元 IP が変わっていないか
ログインできても IP が自動許可されないログイン認証情報にサービススコープ制限がないか。制限のない認証情報を使うか、IP / CIDR を手動で追加
Docker にこのモードが見当たらないデプロイ方式の制約です。サブドメインルーティングへ切り替えてください

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

関連ドキュメント

QQ コミュニティ:1081609274