はじめに
VirtualBoxの内臓DHCPサーバーを使って、VM名またはMACアドレスを指定して払い出すIPアドレスを指定することができる。
- アダプタの種類は「ホストオンリーアダプター」
- Vagrantを使わず自動化する時に役立つかもしれない。GuestAdditionsも不要。
- MACアドレスとVM名(UUID)がセットで記録されるため、汎用性があるかは謎。
環境
- VirtualBox 7.1.4
- ホストOSはWindowsとおそらくLinuxのみ、macOSは不可
- ゲストOSはDHCPが有効であればなんでもOK
設定方法
dhcpserver
サブコマンドにfixed-address
を指定する。
# 指定のIPアドレスを割り当てる
VBoxManage dhcpserver modify --network "(アダプタ名)" --vm=(VM名) --fixed-address=(設定したいIPアドレス)
--fixed-address=address
Fixed address assignment for a --vm or --mac-address configuration scope. Any empty address turns it back to dynamic address assignment.
VBoxManage dhcpserver
次のファイルに設定が反映される。
(UserHome)/.VirtualBox/VirtualBox.xml
(UserHome)/.VirtualBox/(アダプタ名).config
解除したい場合はfixed-address
を空にして実行する。
トラブルシューティング
仮想マシンが起動しなくなった
Failed to attach the network LUN (VERR_INTNET_FLT_IF_NOT_FOUND).
ホストオンリーアダプタのプロパティを開いて「VirtualBox NDIS6 Bridged Networking Driver」をオフにしてアダプタを無効->オンにしてアダプタを有効にしたら直った。
指定したIPが割り当てられない
fixed-addressを設定する前に、既に一度IPが割り当てられているのかもしれない。
(UserHome)/.VirtualBox/(アダプタ名)-Dhcpd.leases
を確認してIPが割り当てられていたら、該当箇所(Lease mac=~)を削除してdhcpサーバーを再起動する。
# DHCPサーバーを再起動する
VBoxManager dhcpserver restart --network "(アダプタ名)"
(参考:アダプタ名を調べる方法)
VBoxManager list dhcpservers
やりたかった本当のこと
事の始まり
「Apple SiliconなMacで手軽にVirtualBoxの仮想マシンを作っては壊しをしたい。」
-> とりあえず、Vagrantを使いたい。
2024年9月にVirtualBoxがAppleSiliconに対応したVirtualBox7.1をリリース、2024年11月にVagrantがVirtualBox7.1に対応したが1、まだboxが全然無い。VirtualBoxがVMイメージをエクスポートできない影響なのかもしれない。23
せめてIPだけでもホスト側から操作して、SSHで接続さえできれば・・・
->どうやらVirtualBoxのDHCPを操作して指定のIPを配布できるらしい。
結論
(おそらく)「ホストオンリーアダプタ」でしか使用できない機能らしい4。最近のmacOSは「ホストオンリーアダプタ」をサポートしていないため実現できなかった。「ホストオンリーアダプタ」は互換性のためだけに残っているだけで利用できないとのこと。
Hosts running recent macOS versions do not support host-only adapters.
On macOS hosts, choose the Host-Only Network option when configuring a network adapter. The Host-Only Adapter option is provided for legacy support.
「ホストオンリーアダプタ」と「ホストオンリーネットワーク」
「ホスト<->ゲスト」や「ゲスト間」の通信可否は同じなので、使う分には違いを意識することはないのかもしれない。
ホストオンリーアダプタ | ホストオンリーネットワーク | |
---|---|---|
ホスト<->ゲスト | 可能 | 可能 |
ゲスト<->ゲスト | 可能 | 可能 |
DHCPサーバー | オフにできる | オフにできない |
DHCPサーバーIP | ホストと別 | ホストと同じ |
設定コマンド | dhcpserver hostonlyif |
hostonlynet |
「ホストオンリーネットワーク」のDHCPサーバーに指定のIPを配布する設定が調べた限り無さそう。
VBoxManage hostonlynet
GUI側もWindows版と異なり、DHCPサーバーという項目自体がない。
macOSのCLIからDHCPサーバー一覧を見ることはでき、Windows版と同じ設定がされてはいることが確認できる。(特にどこかに反映されるわけではない模様。)
おわりに
VMwareが無償になったので、Vagrant + VMwareを使うのが一番簡単なのかもしれない。
-
vagrant/CHANGELOG.md at v2.4.3 · hashicorp/vagrant > provider/virtualbox: Add support for VirtualBox 7.1 [GH-13513] ↩
-
Box CentOS9 for VirtualBox with ARM architecture · Issue #1582 · chef/bento ↩
-
ちなみにエクスポートしようとすると、メモリリークするらしくクラッシュする(した。) ↩
-
逆にWindowsは「ホストオンリーネットワーク」が無い。 ↩