VirtualBox上ゲストOSにssh接続する&ゲストOSからインターネット接続できるようにする。

目標

VirtualBox上OSで作業するとき、ホストOSとの画面の切り替えがめんどくさかったり、ゲストOS内でブラウザの処理が遅かったり、言語などのOS設定のカスタマイズが必要だったり、案外手間が多い。そこで、VirtualBoxからはバックグラウンドでOSを立ち上げ、puttyなどでゲストOSに接続する方法を紹介する。その際、ゲストOSがインターネット接続可能な設定を行う。また、最後に、ゲストOSを jupyter notebook のサーバとして動作させる例を挙げる。

設定の外観

ホストOS-ゲストOS間に二つのネットワーク設定を構築する.一つは,ホストOSからゲストOSにssh接続する用のネットワーク "Host-Only Adapter" ,もう一つは,ゲストOSからインターネットに接続するためのネットワーク "NAT" である.これらは VirtualBox から設定できる.ネットワークを構築したら,ゲストOS側で "Host-Only Adapter" への接続設定を二点変更して(i. 静的IPを振る.ii. デフォルトゲートウェイをOFFにする)完了である.

実行環境

  • ホストOS: Windows 10
  • ゲストOS: CentOS
  • VirtualBox version 5.2.7 ※ 今回はCentOSで設定しましたが,Linux系OS であればほぼ同様の操作で同じことができるはずです.

手順

ゲストOSにssh接続可能な設定にした後、ゲストOSからインターネットへ接続可能にする方法を紹介する。次の手順に従って操作を行う。
1. ホストOSからゲストOSへssh接続できるように、VirtualBox、ゲストOSのネットワーク設定を行う。
2. ホストOSの設定で、ゲストOSに対してインターネット共有する設定を行う。
3. ゲストOSでインターネット接続の設定を行う。

1. ゲストOSにssh接続するための設定

VirtualBox でゲストOSのネットワーク設定を "Host-Only Adapter" に設定する。"Advanced" の項目は特に変更を加えていない。
vm01.png

ゲストOSを起動し、"enp0s3"などに設定されているipアドレスを確認する。ネットワークデバイスに設定されたIPv4が、sshの接続先アドレスである。このアドレスをメモしておく。('virbr0'というデバイスもあるが、これではない。)続いて、openssh-serverをインストールし、起動しておく。
これでputty や telatermを使って接続できるようになる。

2. ゲストOSのインターネットを確立する。

前章でputtyなどで接続できるようになったが、ゲストOSからインターネットへの接続ができない。ホストOS側から、ゲストOSのIPアドレスとインターネットを共有する設定をすることで、解決できる。

以下、「パソコン鳥のブログ」さんのサイトから文章と画像を引用します。


コントロールパネル → ネットワークとインターネット → ネットワークと共有センター
とたどります。

下記画面の赤枠の "アクセスの種類:インターネット" の箇所の、接続: の右側の箇所をクリックします。
画像の例では、「ローカル エリア接続 3」となっている箇所です。
vm02.png

現れたダイアログで「プロパティ」ボタンを押します。

更に現れたダイアログの "共有"タブで「ネットワークのほかのユーザーに、このコンピューターのインターネット接続をとおしての接続を許可する」にチェックして「OK」を押します。
後は「閉じる」を押してダイアログを閉じていきます

vm03.png

ホームネットワーク接続を選択するドロップダウンリストが表示されている場合は、"VirtualBox Host-Only Network"を指定します。

vm04.png

下の画面が出た場合は、そのまま「はい」を押します。

vm05.png

先ほどの手順によって、ネットワーク接続 "VirtualBox Host-Only Network" にIPアドレス 192.168.137.1 が追加されます。
また、この時、1.で確認したIPアドレスは消えてしまっているので、再設定します。

コントロールパネル → ネットワークとインターネット → ネットワークと共有センター
とたどると、画面左側に "アダプター設定の変更" が出るのでクリックします。

ネットワーク接続一覧が表示されるので、"VirtualBox Host-Only Network" を右クリックして「プロパティ」を選択します。

現れたダイアログで「インターネット プロトコル バージョン 4(TCP/IPv4)」を選択して「プロパティ」ボタンを押します。

更に現れたダイアログで「詳細設定」ボタンを押します。

次のダイアログが現れるので、「追加」ボタンを押し、1. で確認したIPアドレスとサブネットマスクを設定して下さい。

vm06.png


引用終わり。

3. ゲストOSでインターネット接続の設定を変更する。

最後に、ゲストOSからホストOSで共有設定したIPアドレスにルーティングするようにネットワーク設定を変更する。
ゲストOSのネットワーク設定を開いて、静的IPアドレスを設定する。

  • IPアドレス : 1. で確認した"VirtualBox Host-Only Network" のIPアドレスより小さいアドレスを指定する。(参考ページではこのような説明だが、同じIPアドレスでもOKかも) 例えば、1.のIPアドレスが 169.254.213.166 だった場合、169.254.213.1~169.254.213.165 を指定する。
  • ネットマスク:1. で確認した"VirtualBox Host-Only Network" のサブネットマスクを指定する。
  • デフォルトゲートウェイ:ホストOSでネットワーク共有設定したIPアドレスを設定する。
  • DNS:デフォルトゲートウェイと同じアドレスにする。

以上でゲストOSからネットワークの接続が確立される。

ゲストOSをバックグラウンドで立ち上げる方法

ゲストOSはssh経由で操作するため、ゲストOSの画面は使わない。画面を起動するだけむだにグラフィック処理が走る。そこで、VirtualBoxでゲストOSの画面を立ち上げずにバックグラウンドでゲストOSを起動する。

「起動」の脇のメニューから、「ヘッドレス起動」を選択することで、バックグラウンドでOSを立ち上げることができる。
vm07.png

(おまけ:鍵認証で"refused"される場合)

puttyで鍵認証ログインするとき、正しく公開鍵を設定したにもかかわらず拒否される場合がある。getenforceコマンドでEnforcingとなっている場合、SELinuxが原因となっている可能性がある。setenforce 0コマンドでSELinuxを一時的に無効にしたり、

# vi /etc/selinux/config
SELINUX=disabled

で永続的に無効にしたりすると治る。
(参考:https://eng-entrance.com/linux-selinux、http://next49.hatenadiary.jp/entry/20140620/p1)

Jupyter notebook を使う例

ゲストOSでjupyter notebook のサーバを立ち上げて、ホストOSのウェブブラウザから表示することができる。
まず、ゲストOS上で、8888ポートからの接続を受け付けるようにFireWallの設定を変更する必要がある。

$ sudo firewall-cmd --add-port=8888/tcp --zone=public --permanent
success
$ sudo firewall-cmd --reload
success

ゲストOSでjupyter サーバを立ち上げる。

jupyter notebook --ip=[IP Address] --no-browser

すると、ホストOSから、http://[IP Address]:8888で接続できる。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.