ゲストOSのIPアドレスは、10.0.2.15 だった。
例えば、ゲストOSでWebサーバーを立て、サーバーにUpしたWebページを見るため、
ホストOSから、"http://10.0.2.15" にアクセスしてもエラーになった。
デフォルトのままでは、ホストOSからゲストOSが見えず、ダメ。
そこで、ホストOSとゲストOSのアクセスについて確認してみる。
以下のような状況を想定をした。
"Webページを公開するために、ローカル環境でWebサーバーを立ててテストを行う"
- ゲストOSにWebサーバーを立てる
- ホストOSではWebページの作成・参照
- ホストOSからSSHでサーバーに接続し、サーバーの設定を行う
- 公開するWebページの転送はSFTPを使う
- ゲストOSはアプリケーションのインストールやアップデートのため、
ホストOS側が外部ネットワークにつながる環境であれば、同じように外部ネットワークとつなげておきたい
ホストOS: Windows10 64bit
ゲストOS: Ubuntu16.04 64bit
①ブリッジアダプター
手っ取り早い方法としては、ブリッジ接続だと思う。
ホストOSと同じネットワークにつながるので、ゲストOSのIPアドレスにアクセスすればWebページが確認できる。
それにネットワークにつながっていれば、ホストOS以外のPCからもゲストOSのWebサーバーにアクセスできるので、複数PCで作業しているときに効率がいい。
ゲストOSに固定IPアドレスを設定しておけば、
ローカル環境をノートPC上で構築したとして、外出先などでローカル環境をネットワークに接続できない環境(DCHPでIPが割り振られない)でも、ゲストOSはIPを固定しているので、Webサーバーにアクセスでき作業を進めることができる。
注意点は、会社などネットワーク・PC管理がしっかりと規定されている環境での使用。
管理外のコンピュータが、勝手に社内のネットワークをつながってしまうため、ひどく怒られる可能性がある。
仮想環境でのゲストOSを、管理者に届け出して、ネットワーク接続の許可を出してもらうという正攻法があるが、それだとゲストOSの設定を自由に変更ができなくなるので、テスト環境でいろいろ試したいという場合の足枷となるし、管理者にとっても煩わしいだろう。
そこで、ブリッジ接続は、ちょっと・・・となるとNAT接続になる。
②NAT + ポートフォワーディング
特定の機能に限定したアクセスで良ければ、ポートフォワーディングを使う。
ゲストOSの設定のネットワークから
アダプターをNAT接続とし、[高度] をクリック。
[ポートフォワーディング] の設定をクリック。

ポートフォワーディングとは、特定の機能(特定ポートに届いた通信データ)を、別の機能(別のポート)へ転送する仕組み。
これにより、ホストOS側の特定機能の通信データをゲストOSの機能へ転送する事で、ホストOSとゲストOSを接続する。
"+"マークをクリックし、設定を追加する。

今回は、Webページの参照と、SSHの通信が目的。
以下のように設定した。

名前
任意。接続目的がわかる名称にしておく。プロトコル
TCPとUDPが選択可能。機能に合わせて選択。ホストIP
空白でよい。ホストポート
使用していないポート番号を指定。ウェルノウンポート以外にしておく。ゲストIP
空白でよい。ゲストポート
機能のポート番号を設定。変更してなければデフォルトポートだが、個別で変更しているのであれば適宜対応する。ゲストOSを再起動させ、確認
ホストOSのブラウザから、上記で設定したポート番号にアクセス。
上記で設定した、
"http://localhost:50080" にアクセス。(または、"http://127.0.0.1:50080")
「It works」のページが表示された

SSHクライアント Tera Term で接続をしてみる。
上記で設定した、
ホスト名 "localhost"(または、"127.0.0.1") : TCPポート "50022" でアクセス。

接続できた。

もし実際のコーディングPCが、ホストOS搭載PC以外であった場合も、ホストOS搭載PCのIPアドレス・ポート番号へアクセスすれば、Web参照、SSH接続が可能。
上記のホストOSのアドレス("localhost")を、外部ネットワークのIPアドレス(例: 192.168.1.202)に変えて、ブラウザやSSHクライアントからアクセスすればよい。
③NAT + ホストオンリー アダプター
「特定の機能だけの接続とか煩わしい、もっとざっくりと接続したい」
となると、ホストオンリー アダプターを使う。
(予め、[環境設定] でホストオンリーネットワークを設定しておくこと。)
ゲストOSの設定のネットワークから
アダプター1 をNAT接続(デフォルトのまま)に設定。

アダプター2 で
[ネットワークアダプターを有効化] にチェックを入れ、
[ホストオンリーアダプター] に設定。

ゲストOSが1つだけならば、ホストオンリーネットワークがDHCP設定であっても、
ゲストOSのIPアドレスは決まった割り振りになるだろうから、固定IPアドレスに設定してなくとも大丈夫と思う。
もし複数のゲストOSをホストオンリーネットワークに参加させるのであれば、固定IPアドレスに設定しておくとよい。
ホストオンリーネットワークで振られたゲストOSのIPアドレス(例:192.128.56.101)を使い、ブラウザやSSHクライアントからアクセスできる。
(補足) Microsoft Edgeでアクセスしようとしたらダメだった。 Microsoft Edgeは、ポートフォワーディングしないとアクセスできないようだった。 原因はループバック接続の問題らしい・・・ (参考:Microsoft Edgeでローカルの仮想マシン上に構築したWebサイト(Webアプリケーション)にアクセスできない) 私自身は、本来はChromeメインなので困らないのだが、 今回、試しで Edge で確認していたので、アクセスできずに悩んだ。 |
デメリットとしては、実際のコーディングPCが、ホストOS搭載PC以外であった場合。
他PCからゲストOSへの道がないので手間がかかる。
他PCからホストOSへのSSHポートフォワードを使って、ゲストOSと接続することになる。
だったら、②NAT + ポートフォワーディング のほうが簡単なんじゃないか。
まとめ
ローカル環境を設置するときにの外部ネットワーク環境や、実際の作業対象PCや、ゲストOSに設置するサーバー機能などから、ネットワーク接続方法を選ぶことになる。
VMware Workstation Player であればNAT設定でホストOSがつながっているので、あまり障害が無いのだが、VirtualBoxはちょっと手間がかかる。
で、何がいいのかとなると、
ローカル環境とするPC(ホストOS)と、ゲストOSが1つだけで進める場合が多いと思うので、安全かつ簡単に構築できるのは、NAT + ホストオンリー アダプター です。
VirtualBox: ネットワーク設定
VMware Workstation Player: ネットワーク設定