ドキュメント
クイックスタート + 機能・デバイスごとの解説(随時更新中)
NAT サーバーの検出とトンネル運用の提案
本記事では、パネルが NAT サーバーを自動的に識別し、「ポートを設定できる NAT」と「ポートを設定できない NAT」を区別し、必要に応じてユーザーをトンネル運用へ導く仕組みについて説明します。
まず理解する:NAT とは
NAT サーバーとは「社内 IP しか持たず、独立したグローバル IP を持たない」サーバーを指します。たとえば安価な NAT VPS では、プロバイダが社内アドレス(192.168.x.x など)を割り当てるため、グローバルから直接アクセスできず、プロバイダが提供するポートマッピング(グローバルの特定ポートを自分の社内へ転送する)を通じてのみアクセスできます。
機能概要
サーバーを追加すると、パネルは SSH 接続の成功時にそのマシンが NAT タイプ(自機に社内アドレスしかなく、独立したグローバル IP がない)かどうかを自動検出します。NAT を検出すると、サーバーカードに小さなバッジを表示し、「概要」の上部にまとめた説明を表示します。ユーザーは黄色のバッジをクリックして、その NAT サーバーでプロバイダのパネルから自分でポート転送を設定できるかどうかを確認し、トンネル運用が必要かどうかを判断できます。
NAT を区別する必要がある理由
「社内 IP」≠「トンネルが必要」。NAT サーバーは 2 種類に分かれます:
| タイプ | 特徴 | トンネルが必要か |
|---|---|---|
| ポートを設定できる NAT | プロバイダがポートマッピングパネルを提供し、ユーザーがグローバルポートを社内ポートへ自分でマッピングできる | ❌ 不要、ポートは自分で対応できる |
| ポートを設定できない NAT | プロバイダが SSH(22) など少数のポートしか固定でマッピングしておらず、それ以外のポートはグローバルから入ってこられない | ✅ トンネル運用が必要 |
トンネル運用が必要なのは「ポートを設定できない NAT」だけです。ポートを設定できる NAT は自分でポートをマッピングでき、グローバルマシンと変わらない使い勝手なので、繰り返し通知すべきではありません。
検出の仕組み
パネルは SSH 接続の成功後、読み取り専用コマンド ip -4 addr show を実行してサーバーのローカル NIC の IP を読み取り、すべてが社内セグメントに属するかどうかを判定します:
10.0.0.0/8172.16.0.0/12192.168.0.0/16100.64.0.0/10(CGNAT キャリアグレード NAT)127.0.0.0/8、169.254.0.0/16、0.0.0.0/8
グローバルセグメントの IP が 1 つでも存在すれば「グローバル IP あり」(非 NAT)と判定し、すべてが社内セグメントなら「NAT」と判定します。
> 検出コマンドは読み取り専用で、サーバーの状態を一切変更しません。検出結果はデータベースに書き込まれ、初回接続時に一度だけ検出して以降は結果を再利用するため、接続を遅くしません。
バッジと説明の表示位置
NAT を検出すると、通知は 2 か所に表示されます:
1. システム管理パネルの「概要」タブ:サーバーカードの「システム管理」をクリックしてパネルに入ると、最初のタブ「概要」に対応する NAT 通知バナーが表示されます——黄色マークのサーバーは黄色の説明(解除のガイド付き)、赤色マークのサーバーは赤色のトンネル案内を表示します。通知は NAT かつ未確認の直結サーバーにのみ表示され、カードを圧迫しません。
2. カードの小さなバッジ:カード上には小さなバッジを 1 つだけ残し、3 つの状態に分かれます:
| バッジ | 色 | 意味 | クリック時の動作 |
|---|---|---|---|
NAT | 黄色 | NAT を検出(ローカル IP が社内セグメント)、確認待ち | 確認ダイアログを表示 |
要トンネル | 赤色 | ポートがグローバルからアクセスできず、トンネルが必要 | トンネル運用の案内を表示 |
| (バッジなし) | — | 「ポートは問題なし」と確認済み、マークを解除 | — |
黄色の NAT バッジは「確認待ち」の状態です:クリックすると確認ダイアログが開き、2 つから選べます:
- 「ポートは問題なし、マークを解除」→ バッジが消え、以降は通知されません;
- 「ポートにアクセスできない、要トンネルとしてマーク」→ バッジが赤くなり、トンネル運用へ導きます。
赤色の 要トンネル は「警告」です:クリックするとトンネル運用 + ポートトンネリングへ直接移動します。
> 「ポートにアクセスできるかを自動的に探知する」機能を作らない理由:パネルサーバーと対象サーバーが同じデータセンターにある場合、パネルからの探知は社内ネットワーク経由になるため、「到達する」という結果は外部の訪問者が到達できることを意味せず、信頼できません。そのため「要トンネル」はユーザーが黄色の説明ダイアログ内で手動でマークします。
NAT サーバーが「使っているうちに切断される」理由
NAT サーバーには、プロバイダのゲートウェイ側で idle timeout(アイドル接続のタイムアウト)があります。SSH 接続が数分間アイドル状態になると、ゲートウェイがこっそり接続を切断し(TCP ハーフオープン)、双方ともそれを感知できません。
パネルは次の 2 点で根本的に解決します:
1. SSH 接続で keepalive を有効化:すべての接続確立後、30 秒ごとにキープアライブパケットを送信し、NAT によるアイドル切断を防ぐとともに、半死状態の接続を早期に検出します。
2. 接続プールの定期クリーンアップ:バックグラウンドスレッドが 2 分ごとに、2 分以上アイドル状態の接続を閉じ、半死接続の無限蓄積を防ぎます。
注意事項
1. 検出は SSH 接続の成功に依存:サーバーがオフライン、またはパスワードが誤っている場合は検出できず、バッジは表示されません。
2. バッジを表示しないサーバー:グローバルサーバー、Android 端末(Termux)、トンネル接続済みデバイス(tunnel_token あり)には NAT バッジを表示しません——これらは元々それぞれの経路を使うため、NAT の通知は不要です。
3. 特殊なケースへの配慮:ごく稀な「1:1 NAT」(全ポートが通過するサーバー)もローカル IP は社内であり、NAT と検出されます。その場合はユーザーが確認ダイアログで「問題なし」を選べばよく、利用には影響しません。
4. 確認後も変更可能:バッジの状態はユーザーの確認によって決まり、いつでもバッジをクリックして調整できます。