VagrantでのDHCPを有効にしたhost only networkの作成に失敗する
これはなに
表題の件でvagrant up
に失敗したので、原因究明の軌跡と解決策をメモしておく。
環境
- MacOS
- VirtualBox 6.1.4
- Vagrant 2.2.7
問題
あるvagrantfileがあるディレクトリ下でvagrant up
を実行したところ、下記のエラーがおきた。
$ vagrant up # 前略 ==> default: Clearing any previously set network interfaces... A host only network interface you're attempting to configure via DHCP already has a conflicting host only adapter with DHCP enabled. The DHCP on this adapter is incompatible with the DHCP settings. Two host only network interfaces are not allowed to overlap, and each host only network interface can have only one DHCP server. Please reconfigure your host only network or remove the virtual machine using the other host only network.
DHCPを有効にして設定しようとしているホストオンリーネットワークインターフェースには、すでにDHCPが有効なホストオンリーアダプターが作成されており、競合しています。
このアダプターが接続しているDHCPは、DHCP設定との互換性がありません。 ホストオンリーネットワークインターフェースは重複できません。また、それぞれのホストオンリーネットワークインターフェースは1つのDHCPサーバーとしか接続できません。 ホストオンリーネットワークを再構成するか、他のホストオンリーネットワークを使用している仮想マシンを削除してください。
原因究明
ref. dhcp private_network fails on virtualbox · Issue #3083 · hashicorp/vagrant
こちらのIssueで原因の解説がしてあった。
以下は上記PRの解説を、補足を交えながら日本語訳したものである。
Vagrantfileでの設定
vagrantfileを覗いてみると、ホストオンリーネットワークをDHCPを有効にして設定しようとしている。
# Create a private network, which allows host-only access to the machine # using a specific IP. # config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "private_network", type: "dhcp"
VirtualBoxのネットワーク設定
VirtualBoxには組み込みDHCPサーバーを持っており、デフォルトで以下の設定がされている。
$ VBoxManage list dhcpservers NetworkName: HostInterfaceNetworking-vboxnet0 Dhcpd IP: 192.168.56.100 LowerIPAddress: 192.168.56.101 UpperIPAddress: 192.168.56.254 NetworkMask: 255.255.255.0 Enabled: Yes Global Configuration: minLeaseTime: default defaultLeaseTime: default maxLeaseTime: default Forced options: None Suppressed opts.: None 1/legacy: 255.255.255.0 Groups: None Individual Configs: None $ VBoxManage list hostonlyifs # empty
この状態でvagrant up
をした際、type: "dhcp"
のprivate_networkに遭遇すると、ホストオンリーネットワークが作成され、インターフェースに以下が設定される。
$ VBoxManage list hostonlyifs Name: vboxnet0 GUID: 786f6276-656e-4074-8000-0a0027000000 DHCP: Disabled IPAddress: 172.28.128.1 NetworkMask: 255.255.255.0 IPV6Address: IPV6NetworkMaskPrefixLength: 0 HardwareAddress: 0a:00:27:00:00:00 MediumType: Ethernet Wireless: No Status: Up VBoxNetworkName: HostInterfaceNetworking-vboxnet0
ホストオンリーネットワークとDHCPサーバーは同じネットワークHostInterfaceNetworking-vboxnet0
にあるにもかかわらず、ホストオンリーアダプタのIPは172.28.128.1
、対してDHCPサーバーのIPは192.168.56.100
と、別のネットワークのIPが設定されてしまっている。
ここで、アダプターのネットワーク外のアドレスをDHCPサーバーには割り当てられないぞ!と怒られているらしい。
解決策
デフォルトで設定されてしまっているdhcpserverの設定を削除し、そのままvagrant up
を再試行したところ、仮想マシンが無事に起動した。
$ VBoxManage dhcpserver remove --netname HostInterfaceNetworking-vboxnet0 $ VBoxManage list dhcpservers # empty $ vagrant up # success!
念のため再度DHCPサーバーの設定をみると、
$ VBoxManage list dhcpservers NetworkName: HostInterfaceNetworking-vboxnet0 Dhcpd IP: 172.28.128.2 LowerIPAddress: 172.28.128.3 UpperIPAddress: 172.28.128.254 NetworkMask: 255.255.255.0 Enabled: Yes Global Configuration: minLeaseTime: default defaultLeaseTime: default maxLeaseTime: default Forced options: None Suppressed opts.: None 1/legacy: 255.255.255.0 Groups: None Individual Configs: None
今度はちゃんとホストオンリーネットワークと同じネットワーク内のIPが設定されているのがわかる。
後記
VirtualBoxの初期設定とVagrantのホストオンリーネットワーク作成の仕様が若干マッチしないことによるバグのようでした。
一度対応すればおそらく二度と起こらない問題な気はしますが、バグの直接原因とエラーメッセージの内容も若干齟齬っているのでめちゃくちゃハマりポイントですね…
こういうIssueの作成者には頭が下がるばかりです。