ドキュメント

クイックスタート + 機能・デバイスごとの解説(随時更新中)

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/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 100.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. 確認後も変更可能:バッジの状態はユーザーの確認によって決まり、いつでもバッジをクリックして調整できます。

関連ドキュメント