我在 Ubuntu Server 18.04 上使用 VirtualBox 5.2.18。我有几台 VirtualBox 客户机共享一个 NAT 网络intnet
。目前,intnet
有一个 DHCP 服务器(由 VirtualBox 设置),它会自动为客户机分配动态 IP。这工作正常,但我希望 DHCP 服务器根据网络接口的 MAC 地址为特定客户机分配静态 IP。可以在客户机内部设置静态 IP,但这需要时间并且取决于客户机操作系统。在 VirtualBox 中,有没有办法为客户机分配静态 IP?
VirtualBox 安装文件夹中有一个名为 的可执行文件VBoxNetDHCP
。根据 的输出判断VBoxNetDHCP
,它似乎允许通过 MAC 地址进行静态 IP 分配。但我无法让它工作,而且几乎没有关于它的文档。
答案1
通常,当我做这样的事情时(我经常这样做),我倾向于使用一个虚拟机作为网络服务器,执行诸如 DHCP、DNS 之类的操作(包括为全球缓存和本地欺骗fake.tld
)等。
最简单的方法是通过 netinstall 映像执行基本的、裸机安装 Debian - 除了 ssh 服务器选项和可能的“标准实用程序”之外,不选择任何软件包组。
一旦启动并运行,要将其转变为内部 VM 网络的 DHCP 服务器,请安装该isc-dhcp-server
包。然后编辑/etc/dhcp/dhcpd.conf
这是我的一个简单示例。它设置了一个较短的租约时间(5 分钟),将客户端搜索域等设置为“fake.tld”,将其 DNS 查询指向 192.168.1.2,并给出 10.99.98.80-100 范围内的地址,网络掩码为 24 位。请注意,执行此操作的 VM 必须具有一个配置了 10.99.98.0/24 子网内 IP 的适配器。
除了通用池之外,我还为设备提供了80:c1:6e:2b:b6:cd
明确定义的租约(以及任何其他租约,option
如要使用的 DNS 服务器、网关等)的 MAC 地址.110
。任何此类“静态租约”都必须针对动态范围之外的地址,但在配置文件和托管服务的计算机的网络适配器上配置的子网内。
当您添加新主机并希望它具有特定 IP 时,只需添加另一个主机节 - 主机名不需要与客户端发送的任何内容匹配,但它在文件中必须是唯一的。添加后,重新启动服务service isc-dhcp-server restart
ddns-update-style none;
option domain-name "fake.tld";
option domain-name-servers 192.168.1.2;
option domain-search "fake.tld";
default-lease-time 600;
max-lease-time 720;
authoritative;
log-facility local7;
subnet 10.99.98.0 netmask 255.255.255.0{
range 10.99.98.80 10.99.98.100;
option routers 10.99.98.1;
}
host lr-tv {
hardware ethernet 80:c1:6e:2b:b6:cd;
fixed-address 10.99.98.110;
option routers 10.99.98.1;
option domain-name-servers 192.168.1.2;
}
答案2
这可以在内部 VBOX DHCP 服务器中完成:
1.- 查找 dhcp 服务器的网络名称:
./VBoxManage list dhcpservers
NetworkName: HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter
Dhcpd IP: 192.168.56.100
LowerIPAddress: 192.168.56.101
UpperIPAddress: 192.168.56.254
NetworkMask: 255.255.255.0
Enabled: Yes
Global Configuration:
minLeaseTime: default
defaultLeaseTime: default
maxLeaseTime: default
Forced options: None
Suppressed opts.: None
1/legacy: 255.255.255.0
Groups: None
Individual Config:
2.- 你还需要虚拟机接口的 MAC 地址
PS C:\Program Files\Oracle\VirtualBox> ./VBoxManage list vms
"accadev-ubuntu20.04" {2a98947e-4b8c-4bc3-9441-2b556d0b33a1}
"accadev-ansible01" {1d261714-9b49-47e2-a634-bc0677f5b707}
PS C:\Program Files\Oracle\VirtualBox> ./VBoxManage showvminfo accadev-ubuntu20.04 | Select-String -Pattern 'MAC'
NIC 1: MAC: 0800275452FB, Attachment: NAT, Cable connected: on, Trace: off (file: none), Type: 82543GC, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
NIC 2: MAC: 08002703E954, Attachment: Host-only Interface 'VirtualBox Host-Only Ethernet Adapter', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
3.- 为该 MAC 设置静态租约。
./VBoxManage dhcpserver modify --ifname "VirtualBox Host-Only Ethernet Adapter" --mac-address=08:00:27:f8:31:fa --fixed-address=192.168.56.20
4.- 重新启动 DHCP 服务器以应用更改
./VBoxManage dhcpserver restart --ifname "VirtualBox Host-Only Ethernet Adapter"
就是这样。你不仅可以对仅主机网络执行此操作,还可以对任何连接了 DHCP 服务器的 Vbox 网络执行此操作
答案3
你不需要额外的 DHCP 服务器软件,有了 NAT 网络intnet
,我们就可以设置 VirtualBox dhcpserver
VBoxManage dhcpserver add --netname intnet --ip 10.13.13.100 --netmask 255.255.255.0 --lowerip 10.13.13.101 --upperip 10.13.13.254 --enable
从“设置”复制访客 MAC 地址,如屏幕截图所示
在我们的 dhcpserver 中,添加一个Individual Config
部分
VBoxManage dhcpserver modify --netname intnet --mac-address=080027D23E28 --fixed-address=10.13.13.254
PS 我记得 dhcpserver 无法分配我们子集范围的第一个 IP 地址,然后我尝试了最后一个 IP 并且成功了,从那时起我只使用最后一个 IP 作为静态。
重新启动或启动您的客户虚拟机
在基于 Linux 的客户机上,您可以检查 DHCP 是否分配了 IP,例如从终端
$ ip a
如果你没有看到释放的 IP,则需要编辑适配器配置文件,例如
$ nano|vi /etc/sysconfig/network-scripts/ifcfg-[ethN|enp0sN]
通常添加ONBOOT=yes
即可修复此问题,当然其中之一需要重新启动systemctl restart network
systemctl restart network.service
,,shutdown -h now
:)reboot now