概要
VMware Workstationで、Ubuntu 18.04/20.04のサーバーイメージを複数クローンし、サーバークラスターを作成したところ、全てのVMに同じIPアドレスが割り当てられる現象が発生しました。
期待する動作は、VMwareのbuilt-in DHCPサーバーがMACアドレスに応じてユニークなIPアドレスを割り当ててくれることですが、どうもUbuntuの場合はそのような動きにはなってくれません。
issuesの確認と、そこで紹介されているワークアラウンド
同じような現象はレポートされていて、/etc/machine-id を変更することで、ユニークなIPが割り当てられるようになります。
そもそもなぜUbuntuでこんな問題が発生したのか、少し探ってみました。
そして、最終的にVMware Workstation等で利用する場合に、もう少し簡単な方法を利用しているので、その説明と設定方法をまとめておきます。
原因
Wiresharkでフィルターにudp.port == 67
を設定して、DHCP Discoverパケットを眺めてみると、異なるhost name(12)エントリを持つものの、Client Identifier(61)エントリがまったく同じものが確認できました。
古いUbuntu 16.04の挙動を調べてみると、Client Identifier(61)エントリは付与されていませんでした。
18.04からnetplanがIP割り当てを管理している影響なのか、ここら辺をキーワードに検索すると次のバグリポートが見つかりました。
このリポートはUbuntuクライアントがWindows ServerのDHCPサーバーからIPを割り当てる際の問題について言及していて、状況は異なりますが参考にはなります。
対応策
VMwareは異なるVMのNICに割り当てるMACアドレスはユニークにしてくれますが、ファイルシステム上のmachine-idファイルはケアしてくれません。
またクローンVM毎に systemd-machine-id-setup を起動するのも、なんか違うかなという気がします。
そこで、今回はMACアドレス毎にClient Identifierを作成するようにしました。
クローンを作成する時に使うオリジナルのVM上の /etc/netplan/ 配下の設定ファイルを編集し、デバイス毎に次のような一行を加えました。
--- /tmp/01-netcfg.yaml 2018-11-19 21:30:57.464200654 +0900
+++ /etc/netplan/01-netcfg.yaml 2018-11-19 21:24:45.947087390 +0900
@@ -6,7 +6,10 @@
ethernets:
ens33:
dhcp4: yes
+ dhcp-identifier: mac
ens34:
dhcp4: yes
+ dhcp-identifier: mac
ens35:
dhcp4: yes
+ dhcp-identifier: mac
最終的にこのVMを利用することで、無事に各クローンVMにユニークなIPが割り当てられるようになりました。
VMイメージを元(Seed)にして、複数のクローンVMを作成するような場合には、あらかじめ元VMの/etc/netplan/配下のファイルを編集しておくようにしましょう。
以上