VirtualBox上のLinux(ゲストOS)にwindows(ホストOS)からSSH接続するためのポートフォワーディングの設定

やりたいこと

 VirtualBox上で動かしているLinux(ゲストOS)をwindows(ホストOS)からSSH接続して操作したい。

手順

  1. VirtualBoxを起動し、対象の仮想マシンを選択
  2. 設定 → ネットワーク → アダプター1 を選択し、「NAT」にする
  3. 「詳細」→「ポートフォワーディング」をクリック
  4. 新しいルールを追加し、以下のように入力:
名前 プロトコル ホストIP ホストポート ゲストIP ゲストポート
SSH TCP 空欄 2222 空欄 22

 これでwindowsから以下のコマンドで、virtualbox上のLinuxOSに接続できる。

ssh -p 2222 LinuxOSのユーザー名@localhost

 LinuxOS側のユーザーにパスワードがかかってる場合は、このコマンドの後に聞かれるので入力。あと初回接続時にはknownhostに追加する流れになるので、その通りにやる。

ポートフォワーディングについて

ポートフォワーディングとは

 外から来た通信を、内側の特定の機器やサービスに中継する仕組み。

イメージ図

あなたのPC(ホスト): ポート2222にアクセスが来る
↓
VirtualBoxがルールを見て転送する
↓
ゲストLinux: ポート22(SSH)で受け取る

ポートフォワーディングを設定する理由

  • NATの内側にいる機器(仮想マシンなど)に直接アクセスできないから

  • だから「このポートに来たら、こっちに回してね」とルールを作る

なぜポート2222を使うのか

 ポート2222を使うのは「よく使われる慣例」かつ「ホストの22番を避ける」ためであり、本質は「ホスト側の空きポートでゲストの22番に中継する」ということ。

NATとは

 「NAT(Network Address Translation)」とは、ゲストOS(仮想マシン)に仮想的なインターネット接続を提供する方式

 PS4とか、オンラインで遊べるゲーム機器にはこれの設定があるので、これを例に役割をざっくりまとめる。

NATの役割(PS4編)

  • PS4はホテルの部屋、ルーターはホテルの受付係
  • PS4がオンラインゲーム(例:CoD)を始めるとき、ホテルの受付係(ルーター)に「外に出たい」と言う
  • NATはそのとき、ホテルの部屋番号(プライベートIP)を隠して、共有の玄関(グローバルIP)から出す

NATの制限

NATタイプ3

 外のプレイヤーがPS4に招待を送っても、ホテルの受付(ルーター/NAT)が部屋番号(プライベートIP)を知らされていないので、誰に届けるか分からず、通信が届かない・マッチできない。

 対策はポート開放やUPnPを行って、ホテルの受付に「この種類の招待状が来たら、○○号室に届けて」と転送ルール(ポートフォワーディング)を教えること。

NATタイプ1(または2)

 このルールが設定された状態なので、招待がちゃんとPS4に届く=マッチしやすい・部屋も立てられる。

コメント