macOSでHypervisor.frameworkのVMのサブネットIPアドレスを変える

はじめに

Troubleshooting networking on macOS | Multipass documentation に Hypervisor.framework のVMのIPアドレスの変更方法が書いてあるのを見つけて試してみたのでメモ。

multipass のVM停止

multipass stop

vmnet の設定変更

/Library/Preferences/SystemConfiguration/com.apple.vmnet.plist という設定ファイルにVMのサブネットのアドレス設定があります。

ちなみに vmnet macOS で検索すると macOS には vmnet というframeworkがあることがわかりました。 vmnet | Apple Developer Documentation

拡張子の .plist はプロパティリスト形式の設定ファイルを意味しています。

以下のコマンドを実行して編集します。

sudo vim /Library/Preferences/SystemConfiguration/com.apple.vmnet.plist

ファイルの最後の方に以下のような行があります。

        <key>Shared_Net_Address</key>
        <string>192.168.64.1</string>
        <key>Shared_Net_Mask</key>
        <string>255.255.255.0</string>

Shared_Net_Address をお好みで 192.168.254.1 などと変更します(私はVMを 192.168.254.0/24 でVM上のLXDコンテナを 192.168.255.0/24 にしてます)。

Troubleshooting networking on macOS | Multipass documentation の “Possible other option - configure Multipass to use a different subnet?” には 192.168. が multipass 内にハードコーディングされているので 192.168. 以外にはしないよう書かれています。ソースコードを検索した限りではそうでもなさそうでしたが、 192.168. 以外のアドレスは試していません。

DHCP のリースファイル削除

私の環境では multipass で primary という名前でVMを作っていて、それが 192.168.64.2 というIPアドレスでしたが、 /var/db/dhcpd_leases が以下のような内容になっていました。

{
        name=primary
        ip_address=192.168.64.2
        hw_address=1,XX:XX:XX:X:XX:XX
        identifier=1,XX:XX:XX:X:XX:XX
        lease=0x5ecc5f63
}

hw_addressidentifier のMACアドレスは伏せてますが、VMの enp0s2 インタフェースのMACアドレスで先頭の0は外したものになっていました。

以下のコマンドでDHCPのリースファイルを削除します。

sudo rm /var/db/dhcpd_leases

multipass のVM起動

以下のコマンドで起動します。

multipass start

以下のよう起動がタイムアウトになる場合がありました。

% multipass start
start failed: The following errors occurred:                                    
primary: timed out waiting for response

multipass list で確認すると状態が Unknown で IPv4 アドレスも不明になっています。

% multipass list 
Name                    State             IPv4             Image
primary                 Unknown           --               Ubuntu 18.04 LTS

試しに再度 multipass start を実行してみると、今度は成功して multipass list でも正しく状態が確認できるようになりました。

% multipass list
Name                    State             IPv4             Image
primary                 Running           192.168.254.2     Ubuntu 18.04 LTS