👻

cloneしたubuntuのIPが重複する

2022/07/03に公開

はじめに

ubuntu 22.04をESXiでクローンしたところ、クローンして作成したVMのIPアドレスが元のVMと同じになる事象が発生しました。

結論

sed -e 's/\( *\)dhcp4: true/&\n\1dhcp-identifier: mac/' \
    < /etc/netplan/00-installer-config.yaml \
    > /etc/netplan/01-clientid-macaddress.yaml
netplan apply

調査

DHCPサーバでDHCPクライアントへの配布状況を調べます。

cisco#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address          Client-ID/              Lease expiration        Type
                    Hardware address/
                    User name
  (省略)
192.168.10.189      ffxx.xxxx.xxxx.xxxx.    Jul 04 2022 10:32 PM    Automatic
                    xxxx.xxxx.xxxx.xxxx.
                    xxxx.xx
  (省略)

Client-IDのところにMACアドレスが入るかと思っていたのですが、やけに長い文字列が入っています。

DHCPリクエストもパケットキャプチャして見てみます。

# tcpdump -nv -i ens160 udp port 67 or port 68
tcpdump: listening on ens160, link-type EN10MB (Ethernet), snapshot length 262144 bytes
22:32:30.644851 IP (tos 0xc0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 322)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:ee:2f:27, length 294, xid 0x3f3d3377, secs 1, Flags [none]
          Client-Ethernet-Address 00:0c:29:ee:2f:27
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message (53), length 1: Discover
            Client-ID (61), length 19: hardware-type 255, xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
            Parameter-Request (55), length 11:
              Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), Hostname (12)
              Domain-Name (15), MTU (26), Static-Route (33), NTP (42)
              Unknown (119), Unknown (120), Classless-Static-Route (121)
            MSZ (57), length 2: 576
            Hostname (12), length 10: "xxxxxxxxxx"

確かにClient-IDに長い文字列が入っていて、クローン元、クローン後のVMが同じIDを使っていました。

設定変更

Ubuntu(Debian)のネットワーク設定は/etc/network/interfacesファイルでやるものだと思っていたのですが、昔の話になってしまったようで、22.04だとsystemdとnetplanで制御されているとのこと。

/etc/netplan/に設定ファイルがあります。

/etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: true
  version: 2

このファイルをコピーしてdhcp-identifier: macを追加します。

01-clientid-macaddress.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: true
      dhcp-identifier: mac
  version: 2

ファイル内容を反映します。SSHでDHCPのIPで繋いでいた場合はコマンドを打った瞬間につながらなくなるので、SSH越しではないコンソールで実行するか、新しいIPアドレスをDHCPサーバで調べる必要があります。

netplan apply

パケットキャプチャを見てもClient-IDにMACを使うようになりました。

23:06:44.743388 IP (tos 0xc0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:ee:2f:27, length 282, xid 0x5768d155, secs 1, Flags [none]
          Client-Ethernet-Address 00:0c:29:ee:2f:27
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message (53), length 1: Discover
            Client-ID (61), length 7: ether 00:0c:29:ee:2f:27
            Parameter-Request (55), length 11:
              Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), Hostname (12)
              Domain-Name (15), MTU (26), Static-Route (33), NTP (42)
              Unknown (119), Unknown (120), Classless-Static-Route (121)
            MSZ (57), length 2: 576
            Hostname (12), length 10: "xxxxxxxxxx"

参考文献

https://t-dilemma.info/vsphere-clone-ubuntu-dhcp-ip-conflict/
https://blogs.itmedia.co.jp/komata/2014/10/dhcpid-c2e1.html

Discussion