技術的な話

VirtualBoxのNATネットワークを使った開発環境を整える

あまり自PCの環境をごちゃごちゃさせたくないので、仮想化技術って素晴らしいと思います。
私はこれまでHyper-VやWSL2、VMwareを使って開発をしてきましたが、最終的に行き着いた先がVirtual Boxです。Virtual Boxしか勝たんという状態です。だって色々と便利であったり、余計なことを考えなくても良いので。

Virtual Boxのオススメ理由

個人的な理由もありますが、

  • 設定関係が非常に優秀。(Hyper-VやVMwareとの移行もスムーズに行えたりする)
  • Nox PlayerなどのAndroidエミュレータと競合しない。
  • やっぱり仮想マシンでの開発環境は自PCの環境を綺麗にできるから良い。
    これはVirtual Boxに限った話では無いですが。あとWindowsのSandbox機能も良いよね!

こんなところでしょうか。
これだけリッチな機能を無償で使用出来るのは本当にありがたいですね。
一方でVirtual Boxをオススメできない用途なんかも紹介していきます。

Virtual Boxのオススメできない用途

私は基本的に開発環境にしかVirtual Boxを使用しないので十分事足りていますが、他の用途だとVirtual Boxでは機能不足かと思う点がいくつかあります。

  • グラフィックス機能が弱いかも。ビデオメモリを256MBまでしか確保できない。
    GUIでゲームをぬるぬる動かしたい場合は向いてないかもしれません。
  • GPUを使うにはパススルーを設定する必要がある。
    開発で機械学習とかGPUをぶん回したい時に必要になりそう。

なので、普通の開発を実施する上ではVirtual Boxで十分事足りるということです。

GPUパススルーの設定は下記記事に詳しく書いてありました。

Virtual Boxの開発環境を整備していく

正直なところインストールして、自分が動かしたいOSのISO持ってきて仮想マシンを作成する手順は世の中にゴロゴロ転がっているのでここでは説明しません。

説明されている記事をいくつか貼っておきます。

Virtual BoxのNATネットワークを設定する

NATネットワークを使用する理由

プライベートのPCであれば各マシンをブリッジ接続しても良いのかなぁと思うのですが(仮想マシン立てすぎてIPアドレスが枯渇する可能性もありますが…)、企業など組織から支給されたPCは個人的にはNATネットワークがおすすめだったりします。
その理由は下記になります。

  • 社内ネットワークの制限で証明書が無いと外部に出れない場合もある。
    ブリッジ接続の場合、仮想マシンも設定すれば良いが面倒臭い。
    NATネットワークであればホストPCのネットワークを利用して通信するので問題無い。自由に仮想マシンを作成できる。
  • 利用するPCのMACアドレスで社内ネットワークの接続が許可されている場合もある。
    ブリッジ接続の場合、ネットワーク上に見えるようになるので、変なPCが社内ネットワークにいる!と社内の情報システム部に目を付けられる可能性もある。
    NATネットワークの場合、あくまでホストPC内で完結しているのでネットワーク上には表示されません。
  • ブリッジ接続と同様にNATネットワークも仮想マシン同士で相互に通信可能です。

イメージ的には以下のような感じです。
ホストPCの威を借りて外部ネットワークと通信し、ホストPC内部でこそこそやるイメージです。

実際に設定してみる

設定自体は非常に簡単に出来ます。

Virtual Boxマネージャーを起動し、ファイル → 環境設定を開きます。

環境設定画面が表示されるので、左側のメニューより、ネットワークを選択し、画面右側にあるNATネットワークの新規作成をクリックします。
作成されたNATネットワークをダブルクリックします。

NATネットワーク詳細画面が開くので、お好みの名称を設定します。
ネットワークCIDRは普段使用しているネットワークのIPアドレスを鑑みて設定します。例えば、社内ネットワークが172.xxx.xxx.xxx系であれば、10.xxx.xxx.xxx / 192.168.xxx.xxxいずれでも大丈夫かと思います。競合しなければ問題無いかと思います。
ここでは下記の通り設定しています。

  • ネットワーク名:NatNetwork
  • ネットワークCIDR:10.254.10.0/24

ポートフォワーディングの設定です。
ここは仮想マシン作成後で良いのですが、仮想マシンがWindowsであればRemoteDesktop(3389)、LinuxであればSSH(22)のポート番号をポートフォワードしておいた方が良いかと思います。

ただしホスト側のポートは被らないよう気を付けないといけないのが少々面倒であったりします。

ちなみに下記の状態でローカルに対してポート番号22にSSH接続すると仮想マシンに接続することが可能です。

上記でNATネットワーク自体の設定は完了です。
次に仮想マシンに対してNATネットワークを設定する必要があります。
各仮想マシンの設定画面を開いて、ネットワークの割り当てをNATネットワーク、名前の部分に先程作成したNATネットワークを設定してください。

最後にNATネットワークを設定した状態で仮想マシンを起動して、IPアドレスが自動で振られているかを確認してください。
少し面倒ですが、ポートフォワーディングをしている都合上、DHCPだとIPアドレスが変わる可能性もあるので固定IPにしておいた方が良いです。
固定IPに設定する場合は下記を参考にしてみてください。

  • IPアドレス:10.254.10.xxx
  • デフォルトゲートウェイ:10.254.10.1
  • DNS:10.254.10.1
    上記はCIDRを10.254.10.0/24にした場合の設定例になります。
    適宜自身で設定したCIDRに応じて変更してください。デフォルトゲートウェイ及びDNSは共通になっているようで、CIDRの先頭アドレスのようです。

Hyper-Vでも同じような設定が可能です

上記で説明したようなNATネットワークは少々手間は掛かりますがHyper-Vでも同様に設定できます。下記からどうぞ。

ちょっと困った現象

  • たまにNATネットワークが突然死する。
    原因不明ですが仮想マシンを停止した状態で、ネットワークアダプタを一度無効にして再度有効にすると復旧する場合があります。

  • Softether VPNを同じホストマシン上にインストールしていて、VPN経由で仮想マシンにアクセスするとブルースクリーンになる。
    再現性があるので何かしら原因があるとは思うのですが、深くは確認していないです。恐らくプロミスキャスモードが悪さしていそうな気がしますが…。

まとめ

Virtul Boxをはじめとした仮想化技術には頭が上がりません。
ホストマシンにあれこれインストールせず、仮想マシン内で色々することで開発QoLが上がる気がしますので、ぜひぜひお使いください!

-技術的な話
-, , , ,