Vagrantの仮想マシン上のウェブサーバ(Apache)に、同じネットワーク内の別のPCやスマホからアクセスする、ブリッジ接続

目的と環境

最終更新日:2021/4/20

今まで自分のパソコン(PC)内でVagrant + VirtualBoxの仮想マシン環境を作り、仮想マシンでApacheなどのウェブサーバを起動してウェブサービスのテストをしていましたが、同じネットワーク内の別マシンから仮想マシンのApacheにアクセスを試したくなりました。

例えば、家のwifiネットワークでスマホからパソコン上の仮想マシンのウェブサーバにアクセスしてみたり、自分のパソコン上の仮想マシン上のウェブサービスを同じローカルネットワーク内にいる他の人(マシン)に公開するなどの使い方ができます。

環境は、こんな感じです。
OS:macOS Catalina
Vagrant 2.2.7
VirtualBox6.1.4
boxはCentOS7.1

Vagrantfileの編集

Vagrantfileを編集します。自分のPCから自分のPC内に立てた仮想マシンにアクセスするだけならprivate_networkの行を有効にすればよかったですが、今回はprivate_networkではなくpublic_networkの行を有効にして使用します。

public_networkでは、ipとbridgeを指定します。ipはローカルネットワーク上で適当なプライベートIPアドレスです。
例えばローカルネットワークが192.168.11.0/24なら、192.168.11.11などでいいです。
ただし、同じローカルネットワーク内にある他のPCや仮想マシンがあるホストPCのプライベートIPと被らないようにだけ注意します。自分のPCのプライベートIPは、macならifconfigコマンドでわかります。また、システム環境設定->ネットワーク->Wi-Fi->詳細ボタンを押した後に、TCP/IPタブを選択すればわかるはずです。windowsでも同等のコマンドや環境設定でわかると思います。

次にbridgeの指定ですが、仮想マシンがVirtualBoxならVBoxManageコマンドでわかります。


$ VBoxManage list bridgedifs |grep '^Name:'
Name:            en0: Wi-Fi (AirPort)
Name:            p2p0
Name:            awdl0
Name:            en1: Thunderbolt 1
Name:            en2: Thunderbolt 2
Name:            bridge0      
今回は無線wifiネットワークを使用したので、en0: Wi-Fi (AirPort)を指定しました。
ちなみにVagrantfileのpublic_networkでbridgeの指定をしないと、vagrantの起動時(仮想マシンの起動時)にブリッジするネットワークインタフェースを聞かれますので、ここでもbridgeで指定するネットワークインタフェースがわかるはずです。
(ここで番号を指定して起動すればブリッジ接続ができると思ったけど、なぜかできなかった、、自分の環境や設定が何かおかしいのかもしれない)
#bridgeを指定しない場合
config.vm.network "public_network", ip: "192.168.11.11"
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) p2p0
3) awdl0
4) en1: Thunderbolt 1
5) en2: Thunderbolt 2
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
==> default: 
    default: Which interface should the network bridge to?1 
以上で設定は終了です。仮想マシンを再起動して、その仮想マシン内でApacheなどのウェブサーバをインストールして起動すれば、同じローカルネットワーク環境にある別マシンから(スマホとかでも)、「http://192.168.11.11」でhttpアクセスできるようになります。
ちなみに、private_networkとpublic_networkの両方を有効にした場合、仮想マシンは起動できるけどhttpアクセスはできませんでした。