【vSphere】Ubuntu仮想マシンをクローンしたら、DHCPで同じIPアドレスが設定される

どうも、Tです。

DHCPでIPを配布しているvSphere環境でテンプレートからクローンしたUbuntu仮想マシンが同じIPアドレスを受け取ってしまう事象が発生したので備忘録です。

スポンサーリンク
アドセンス1

ここでの結論

  • netpalnを使っている(Ubuntuなど)は、DHCPのIP取得にmachine-idを使う
  • machine-idはクローンで同じ番号が設定される(変更されない)
  • クローン済みの仮想マシンで解決するには、machine-idを再生成する
  • テンプレートの仮想マシンのmachine-idは空にするか、DUIDにMACアドレスを使うように設定変更しておく

環境

  • vcsa:7.0 Update2c 18356314
  • Gest OS:Ubuntu 20.04.1 LTS
  • DHCPサーバー:Windows Server 2019

問題

テンプレートからクローンしたUbuntu仮想マシンにDHCPから同じIPアドレスが設定される。

原因

原因は、Ubuntu(正確にはnetplan)は、DHCPでIPを取得する際にDUID(DHCP Unique Identifier)にMachine-idを使用するためです。Linuxのmachine-idはvSphereのクローン機能ではMACアドレスのように新しい番号を生成することはないため、同じmachine-idでクローンされます。

Bug #1738998 “netplan does not allow dhcp client identifier type...” : Bugs : netplan
Users of Ubuntu dealing with a DHCP server based on Windows Server, Solarwinds IPAM, or possibly other DHCP server products that do no support RFC 4361. -- r...

VMware社からもKB82229が公開されています。

VMware Knowledge Base

解決方法

とりあえず試した解決方法です。

方法1.machine-idを再作成

「systemd-machine-id-setup」コマンドを実行してmachine-idを新しく再生成します。

#元のmachine-idを確認
kadmin@ubuntu03:/$ cat /etc/machine-id
7633515b79ae4aae988ac402e731f6a6

#machine-idファイルを削除
kadmin@ubuntu03:/$ sudo rm /etc/machine-id

#machine-idを再作成
kadmin@ubuntu03:/$ sudo systemd-machine-id-setup
Initializing machine ID from random generator.

#再作成後のmachine-idを確認
kadmin@ubuntu03:/$ cat /etc/machine-id
68eb6ed196a5423d8e41f352294e791a

生成後、ネットワークサービスを再起動すると、重複しないIPアドレスを受け取るようになります。

kadmin@ubuntu03:/$ sudo systemctl restart systemd-networkd

方法2.machine-idを空にしておく(KB82229記載あり)

KB82229に記載のある方法です。machine-idを空にしておくことで再起動時に新しいmachine-idが再生成されるようです。注意点としては、echoコマンドがsudo suしている状態でないとpermissionではじかれてしました。

kadmin@ubuntu02:~$ sudo su
[sudo] password for kadmin:

#machine-idファイルを改行なしで空にする
root@ubuntu02:/home/kadmin# echo -n > /etc/machine-id

#/var/lib配下のmachine-idファイル(/etc/machine-idへのリンク)を削除して再作成する
root@ubuntu02:/home/kadmin# rm /var/lib/dbus/machine-id
root@ubuntu02:/home/kadmin# ln -s /etc/machine-id /var/lib/dbus/machine-id

#machine-idの中身は空の状態
root@ubuntu02:/home/kadmin# cat /var/lib/dbus/machine-id
root@ubuntu02:/home/kadmin#

#OSを再起動する
root@ubuntu02:/home/kadmin#sudo reboot

再起動後、新しいmachine-idが作成され、重複しないIPアドレスを受け取るようになります。

kadmin@ubuntu02:~$ cat /etc/machine-id 
5c6c3eb364284aeaa639291a3f44e3de

方法3.DUIDにMACアドレスを使う(KB82229記載あり)

DUIDにmachine-idではなく、MACアドレスを使うように、NICの設定(netpaln)を変更する方法です。

DHCPで構成したとき、netplanの設定は下記のファイルがありました。

kadmin@ubuntu01:~$ ls -l /etc/netplan/
total 12
-rw-r--r-- 1 root root 117 Sep 20 13:40 00-installer-config.yaml
-rw-r--r-- 1 root root 117 Sep 20 13:39 00-installer-config.yaml.BeforeVMwareCustomization
-rw-r--r-- 1 root root 236 Sep 20 13:40 99-netcfg-vmware.yaml

クローン時のOSカスタマイズで設定されたであろう「99-netcfg-vmware.yaml」の中身は下記のようになっています。(vSphereのOSカスタマイズでDHCPにしています。)

 kadmin@ubuntu01:~$ cat /etc/netplan/99-netcfg-vmware.yaml 
# Generated by VMWare customization engine.
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      dhcp4: yes
      dhcp4-overrides:
        use-dns: true
      dhcp6: yes
      dhcp6-overrides:
        use-dns: true

システムが生成したyamlをいじるのは避けたいので新しいyamlファイルを作成します。yamlはすべてのファイルをアルファベット順に読み込んでオーバーライドしていく仕様のため、99より後に読み込まれるように100で作成しました。

kadmin@ubuntu01:~$ sudo vi /etc/netplan/100-add-config-dhcp-duid.yaml

KBにある下記の設定を行います。yaml形式なのでインデントがずれると正常に反映されないためインデント位置に気を付けてください。match構文でeで始まるインターフェースに対して設定しています。dhcp-identifier: macがDUIDの指定です。

network:
  version: 2
  renderer: networkd
  ethernets:
    default:
      match:
        name: e*
      dhcp4: yes
      dhcp-identifier: macで

yamlの設定を反映します。※SSHなどで接続している場合は、切断されます。

kadmin@ubuntu01:~$ sudo netplan apply

machine-idは同じままですが、DUIDにMACアドレスを使用しているため、重複しないIPアドレスが取得できました。

kadmin@ubuntu01:~$ cat /etc/machine-id 
7633515b79ae4aae988ac402e731f6a6
kadmin@ubuntu01:~$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host 
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9b:61:07 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.222/24 brd 192.168.10.255 scope global dynamic ens160
valid_lft 85980sec preferred_lft 85980sec
inet6 fe80::250:56ff:fe9b:6107/64 scope link 
valid_lft forever preferred_lft forever

ちなみに

この問題は、Ubuntuだからではなく、netplan依存の問題のためUbuntu以外でも発生する可能性があります。

pthonOSでも類似の情報が公開されていました。

Clearing the Machine ID of a Cloned Instance for DHCP · VMware Photon OS 3.0 Documentation

Debianは最近使っていませんが、どうなんだろう・・・・?ちょっと気になる情報は公開されています。

MachineId - Debian Wiki

参考

Ubuntu 18.04 gets duplicate DHCP address on Parallels · Issue #1062 · chef/bento
Hey all, I'm having an issue on the latest Ubuntu image (ubuntu-18.04- 201806.08.0) where every Vagrant machine I start gets assigned the same DHCP IP addre...
VMwareでUbuntuのクローンVMに同じIPアドレスが割り当てられる問題について - Qiita
概要 VMware Workstationで、Ubuntu 18.04/20.04のサーバーイメージを複数クローンし、サーバークラスターを作成したところ、全てのVMに同じIPアドレスが割り当てられる現象が発生しました。 期待す...
ubuntu — systemd-machine-id-setupを別のものに置き換えますか?
仮想化環境ではubuntu-18.04テンプレートを使用しています。したがって、テンプレートを作成する前に、/etc/machine-idファイルを常に空にして、最初の起動時に再作成されるようにします。...

まとめ

すでにクローンしてしまっている仮想マシンを修正するには、「方法1」でmachine-idの再作成。

テンプレートを準備する場合は、「方法2」でmachine-idを空の状態でシャットダウンしてテンプレート化するか「方法3」でDUIDをmacアドレスを使うように変更するになりそうです。

netplanのデフォルト動作的には方法2がいいけど、起動のたびにやるのが少し億劫なので、安牌案としては、方法3かなぁ・・・・。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする