web-dev-qa-db-ja.com

VirtualBox dhcpサーバーは、VirtualBoxNatネットワークに接続されているすべてのゲストVMに同じIPをリースしています。

VirtualBox 6.0のGUIを介してdhcp enableを使用して新しいNATネットワークを作成し、2つのゲストVMを接続しましたが、両方のVMが同時に実行されている場合でも、同じIPを割り当て続けます。

  • ホスト:Ubuntuデスクトップ18.04。
  • ゲストA:Ubuntuサーバー18.04。 08:00:27:33:ac:c6
  • ゲストB:Ubuntuサーバー18.04。 08:00:27:b9:41:77(ゲストAから複製)

VMを最初に起動した後にVirtualBoxが生成するNatNetwork-Dhcpd.leasesファイルを確認したところ、両方のVMのリースは「確認済み」と表示されますが、MACアドレスが異なっていても同じIPを取得していることがわかりました。

<?xml version="1.0"?> <Leases version="1.0"> <Lease mac="08:00:27:b9:41:77" id="ffe2343f3e00020000ab117f957fa5c66cfffd" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565568632" expiration="1200"/> </Lease> <Lease mac="08:00:27:33:ac:c6" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565568546" expiration="1200"/> </Lease> </Leases>

また、ゲストAをオフにしてから再度オンにすると、NatNetwork-Dhcpd.leasesによってゲストBのリースセクションのid属性が削除され、のリースセクションに追加されることに気付きました。次のようにファイルを変更するのとまったく同じ値を持つゲストA:

<?xml version="1.0"?> <Leases version="1.0"> <Lease mac="08:00:27:b9:41:77" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565568632" expiration="1200"/> </Lease> <Lease mac="08:00:27:33:ac:c6" id="ffe2343f3e00020000ab117f957fa5c66cfffd" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565576544" expiration="1200"/> </Lease> </Leases>

私のVirtualBoxNATネットワークは次のとおりです。

<NetserviceRegistry> <DHCPServers> <DHCPServer networkName="HostInterfaceNetworking-vboxnet0" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/> <DHCPServer networkName="NatNetwork" IPAddress="10.0.2.3" networkMask="255.255.255.0" lowerIP="10.0.2.4" upperIP="10.0.2.254" enabled="1"> <Options> <Option name="3" value="10.0.2.1"/> <Option name="6" value="10.0.2.1"/> </Options> </DHCPServer> </DHCPServers> <NATNetworks> <NATNetwork networkName="NatNetwork" network="10.0.2.0/24" ipv6="0" ipv6prefix="fd17:625c:f037:2::/64" advertiseDefaultIPv6Route="0" needDhcp="1" enabled="1"> <Mappings> <Loopback4 address="127.0.0.1" offset="2"/> </Mappings> </NATNetwork> </NATNetworks> </NetserviceRegistry>

どんな助けでも本当にありがたいです。

2
Daniel Chiang

さらに調査と試行錯誤を繰り返した結果、

この問題の原因は、Ubuntu18.04の組み込みネットワーク構成がDHCP要求のデフォルトIDとしてNIC Macアドレスを使用しなくなったことです。 (anneb、2018、para 。1)。

そしてまたそれ

Dhclientを含むMosDHCPクライアントは、タイプ「01」(MACベース)のクライアントIDフィールドを提供します。もう1つの一般的なタイプは「00」(ドメイン名)です。ただし、デフォルトでは、systemd-networkdは/ etc/machine-idの内容から生成された「不透明な」クライアントIDを提供します。

DHCPプロトコルによれば、リースは最初にクライアントIDによって選択され(クライアントが「クライアントID」オプションを提供する場合、MACベースである場合とそうでない場合があります)、次にクライアントが選択しなかった場合にのみMACアドレスによって選択されます。 IDを送信します。 (grawity、2018、para。4-5)

そのため、ゲストBでhvd (2017、n.p。)。 の方法で新しい/ etc/machine-idファイルを生成しました。

  1. / var/lib/dbus/machine-idが/ etc/machine-idへのシンボリックリンクであったかどうかの確認

    $ Sudo ls -l /var/lib/dbus/machine-id lrwxrwxrwx 1 root root 15 Aug 1 17:18 /var/lib/dbus/machine-id -> /etc/machine-id

  2. / etc/machine-idを削除しています

    Sudo rm -f /etc/machine-id

  3. / etc/machine-idを再生成しています

    Sudo dbus-uuidgen --ensure=/etc/machine-id

  4. VMを再起動します

    Sudo init 6

  5. ログインして、新しいIPアドレスがゲストBに割り当てられていることを確認します

    $ ip addr show enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:b9:41:77 brd ff:ff:ff:ff:ff:ff inet 10.0.2.5/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 1070sec preferred_lft 1070sec inet6 fe80::a00:27ff:feb9:4177/64 scope link valid_lft forever preferred_lft forever

2
Daniel Chiang

base-machine(Ubuntu 18.04)がある場合にも同様の問題が発生しました。基本的には、ユーザーアカウントを使用したクリーンインストールです。私はこのマシンを実行したことはありませんが、そこから新しいマシンのクローンを作成します。しかし、私が新しいMACを与えたとしても、すべてのクローンは同じIPを取得しました。しかし、あなたの投稿を読んで少しいじった後、私はbase-machineで次のように解決しました:

  1. /etc/machine-id/var/lib/dbus/machine-idを削除します。
  2. 空の/etc/machine-idを作成します。
  3. /etc/machine-idに適切な権限を付与します(これは厳密には必要ではないようですが、当初はそうだったのです)。
  4. マシンをシャットダウンし、決して再起動しないでください。そうしないと、上記の手順をやり直す必要があります。

またはコードで:

Sudo rm /etc/machine-id /var/lib/dbus/machine-id
Sudo touch /etc/machine-id
Sudo chmod 444 /etc/machine-id
Sudo shutdown -h now

これで、base-machineを安全に複製でき、新しいマシンごとに、最初の起動時に独自のmachine-idが生成されます。

新しい /etc/machine-id は、読み取り専用で初期化されていない場合、起動時に systemd-machine-id-setup によって自動的に生成されます。

0
UlfR