***本記事にはプロモーションが含まれています。***
Vagrantでネットワークの設定は3つあります。このうち、private_networkを指定したときにVagrantは少し複雑な処理をしていました。
1つめのVagrantでpublic_networkを指定したときは、VirtualBoxのブリッジアダプターが使われ、外部のルーターなどからDHCPでIPアドレスをもらいます。
2つめのforwarded_portを指定したときは、VirtualBoxのNATが使われて、VirtualBox内蔵のネットワークからDHCPでIPアドレスをもらいます。
3つめのprivate_networkを指定したときは、VirtualBoxのホストオンリーアダプターという仮想ネットワークアダプターが使われます。この場合、上の2つとは少し違っていて、DHCPサーバーはデフォルトでは設定されていません。このことは、ホストの仮想ネットワークアダプターのプロパティからわかります。IPアドレスは、192.168.33.1というアドレスが設定されています。
このため、ゲストOSは192.168.33.x(xは2から254)というネットワークを自分で設定しないといけません。Vagrantではvagrant upのときに、ssh接続を使って/etc/network/interfacesに次のようなエントリーを書き込みます。
#VAGRANT-BEGIN # The contents below are automatically generated by Vagrant. Do not modify. auto enp0s8 iface enp0s8 inet static address 192.168.33.10 netmask 255.255.255.0 #VAGRANT-END
これでIPアドレスが設定されて、ホストとゲストで通信ができるようになります。このような仕組みのため、vagrant upのときにvagrantというユーザーでSSHで接続できることと、ファイルに書き込む権限がいるためにスーパーユーザーになれることが条件になります。
Vagrantを使わずVirtualBoxのみでプライベートネットワークを組んだ時は、手作業でネットワークインターフェース、この場合はenp0s8の設定をする必要があります。
自分でvagrantboxを作ろうとして、わかったことでした。