この記事は?
VirtualBoxなどを使って仮想マシン(VM)を起動する際にネットワーク接続の設定には大きく以下の5つのようなものがあります。
- NAT
- VMの内部から外部へのアクセスを可能にする。
- VMごとにNATが作成されるため、VM間の通信はできない。
- 内部ネットワーク
- VirtualBoxのVM間のみでの通信を許可する。
- ホストオンリーアダプター
- 内部ネットワークにさらにホストからのアクセスを可能にする。
- ブリッジアダプター
- ネットワークインターフェースを作成しホストマシンのNICを紐づけ、別の物理マシンからのアクセスも可能とする。
- 外部からは別マシンが存在するように見える。
- ポートフォワーディング
- ポート番号を利用しホストへのインバウンドアクセスをVMへフォワーディングする。
この中でホストの外からの仮想マシンへのインバウンドアクセスを可能とするネットワーク設定はブリッジアダプターとポートフォアディングです。
私は普段ポートフォワーディングを使うことがほとんどなのですが、今回はブリッジアダプターのほうを試してみてまとめたいと思います。設定にはVagrantを用います。
ブリッジアダプターとは
ネットワークの設定としてブリッジアダプターを選ぶ場合、VirtualBoxはホストのネットワークフィルタードライバーと呼ばれるディバイスドライバーを利用します。このドライバーを利用すると、物理ネットワークアダプターからのデータをインターセプトし、VirtualBoxへと流し込むことを可能とし、ソフトウェアネットワークインターフェースを作成することができます。
このように作成したネットワークインターフェースをVMのNICに割り当てると、同じネットワーク内に存在する別端末からアクセスが可能となり、その端末から見るとネットワーク内に端末が(ホストとゲストの)2台存在するように見えます。
注意点としては、ゲストが外部からアクセス可能となるため、パブリックなネットワークでこの設定を使う場合はファイアウォールを使うなどして、セキュリティを考慮する必要があります。
ローカル環境
ホストOS:Windows 10 pro
ゲストOS:CentOS 7.5
VirtualBox 6.0.0
Vagrant 2.2.2
ホストの物理ネットワーク:Wi-Fi
ちなみに、今回はVagrantのイメージとしてbento/centos-7.5 を利用させていただきました。
ブリッジアダプターを使ってローカルIPを割り当てpingしてみる。
まずは、以下のようなVagrantFileを用意します。
Vagrant.configure("2") do |config|
config.vm.box = "bento/centos-7.5"
config.vm.network "public_network"
end
設定はこれだけです。config.vm.network "public_network"
の部分がブリッジアダプターを利用する設定です。config.vm.network "private_network", ip: "[固定IP]"
のように記述すると固定IPを利用することもできますが、今回はDHPCによる動的割り当てを使います。
このVagrantFileを利用しvagrant up
しvagrant ssh
で仮想マシンにログインして割り当てられているIPアドレスを確認してみます。
[vagrant@localhost ~]$ ip -4 address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85323sec preferred_lft 85323sec
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 172.22.1.35/21 brd 172.22.7.255 scope global noprefixroute dynamic eth1
valid_lft 2524sec preferred_lft 2524sec
この中で、外部から接続可能なネットワークインターフェースはeth1
の172.22.1.35/21
です。(eth0
は多分NATかな?)
ホストOSからこの仮想マシンにpingを打ってみます。
$ ping 172.22.1.35
172.22.1.35 に ping を送信しています 32 バイトのデータ:
172.22.1.35 からの応答: バイト数 =32 時間 <1ms TTL=64
172.22.1.35 からの応答: バイト数 =32 時間 <1ms TTL=64
172.22.1.35 からの応答: バイト数 =32 時間 <1ms TTL=64
172.22.1.35 からの応答: バイト数 =32 時間 <1ms TTL=64
172.22.1.35 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
アクセスができているようですね。
同じWi-Fiにつながっている別物理端末からもpingを売ってみましたが同様にアクセスができていました。
まとめ
- VirtualBoxブリッジアダプターを利用するとVMのNICにIPを割り当てることができる。