Hyper-V上のVMのIPを固定

Windows Hyper-V上に建てたVMに固定IPを設定する方法を記します。※ホストOSはWindos10(1909)VMはUbuntu 20.04.2 LTSです。

動機

ホストOSを起動し直す度にVMのIPが変更されてどうにも作業にならない。。なのでVMのIPを固定にしたい。

Steps

  1. Powershell起動
  2. 仮想スイッチを作成
  3. 作成した仮想スイッチにIPとサブネットを設定
  4. 作成した仮想スイッチをVMに割り当てる
  5. 確認

Powershell起動

まずPowershellをRun as administrator で起動します。

仮想スイッチを作成

Powershell上で以下のコマンドを実行します。(SwitchNameはなんでもOK)

New-VMSwitch -SwitchName "WinNAT" -SwitchType Internal

次に作成されたスイッチのインデックスを以下のコマンドで確認します。

Get-NetAdapter

得られた結果のifIndexが後で必要になります。

作成した仮想スイッチにIPとサブネットを設定

以下のコマンドで作成したスイッチにIPを割り当てます。(前段で得られたifIndexが18であったとします。)

New-NetIPAddress -IPAddress 10.10.1.1 -PrefixLength 24 -ifIndex 18

この場合では、サブネットが10.10.1.0/24でIPアドレスがVMのゲートウェイアドレスとなります。

次に他にNATが存在しないか確認します。

Get-NetNat

何もなければなにも出力されません。もし他のNATがあるようだったら以下のコマンドで削除してください。

Remove-NetNat

次にNATを以下のコマンドで作成します。

New-NetNat -Name MyNAT -InternalIPInterfaceAddressPrefix 10.10.1.0/24

作成されたスイッチが指定したIPで存在しているか確認

作成した仮想スイッチをVMに割り当てる

VMにログインして、以下のyamlファイルをコマンドで作成します。ファイル名はなんでもOK。このyamlファイルで作成したスイッチとVMのIPを指定します。50-cloud-int.yamlが既に同ディレクトリに存在していたら適当に*.backにリネームしてください。DNSサーバは環境に合わせて設定してください。

sudo vim /etc/netplan/net-config.yaml
#net-config.yaml
network:
    version: 2
    renderer: networkd
    ethernets:
        eth0:
            dhcp4: false
        addresses:
                    - 10.10.1.2/24  #The static IP for this VM. the IP should be in the range which has specified for the NAT.
        gateway4: 10.10.1.1   # The IP of the created switch above.
        nameservers: # DNS servers. This should be specified otherwise this VM cannot be connected to the internet.
            addresses:
            - 192.168.255.75
            - 192.168.255.76

yamlファイルを保存したら以下のコマンドを実行してください。

sudo netplan apply

次にHyper-VマネージャでVMのスイッチをDefault Switchから作成したスイッチ(WinNAT)に変更してください。

確認

VMにログインしてpingやcurl google.comとかやってみてホストPCやインターネットに繋がることを確認します。