元のポートへ直接アクセスする
外部から着信可能なグローバル 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、リモートデスクトップ、その他の上流サービスは、引き続き適切に更新し、権限を絞り、それぞれの認証機能を有効にしてください。
アクセスの流れ
- 利用者がインターネット側から fn-knock ゲートウェイを開きます。デフォルトポートは
7999です。 - 利用者がログインを完了します。
- セッション設定と使用した認証情報で許可されていれば、fn-knock が現在の接続元グローバル IP を一時許可に登録します。自動許可できない場合は、管理者が手動で許可リストへ追加します。
- 利用者は同じ接続元 IP から、サービス本来のポートへ接続します。
- セッションまたは 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. 外部ネットワークから検証する
スマートフォンのモバイル回線など、別の外部ネットワークからテストします。
- 未ログイン状態で保護対象ポートへ接続し、拒否またはタイムアウトすることを確認します。
- 認証用の入口を開き、ログインします。
- 同じネットワークから保護対象ポートへ再接続し、サービス本体の認証画面まで進めることを確認します。
システム設定 → セッションまたは IP 許可リストで、現在の接続元 IP と有効期限を確認します。- ログアウトするか許可の期限切れを待ち、ポートが再び閉じることを確認します。
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を参照してください。
