Я использую VirtualBox 5.2.18 на Ubuntu Server 18.04. У меня есть несколько гостевых машин VirtualBox, которые совместно используют сеть NAT intnet
. В настоящее время intnet
есть DHCP-сервер (настроенный VirtualBox), который автоматически назначает динамические IP-адреса гостям. Это работает нормально, но я бы хотел, чтобы DHCP-сервер назначал статические IP-адреса определенным гостям на основе MAC-адреса их сетевого интерфейса. Статические IP-адреса можно задать внутри гостей, но это занимает время и зависит от гостевой ОС. Есть ли способ в VirtualBox назначать статические IP-адреса гостям?
В папке установки VirtualBox есть исполняемый файл под названием VBoxNetDHCP
. Судя по выводу VBoxNetDHCP
, он, похоже, позволяет назначать статический IP по MAC-адресу. Но я не могу заставить его работать, а документация для него фактически отсутствует.
решение1
Обычно, когда я делаю что-то подобное (а делаю я это часто), я использую виртуальную машину, работающую в качестве сетевого сервера, который выполняет такие функции, как DHCP, DNS — как кэширование для всего мира, так и локальный спуфинг и fake.tld
т. д.
Самый простой способ — выполнить базовую, чистую установку Debian через образ netinstall — не выбирая ни одну из групп пакетов, кроме опции сервера ssh и, возможно, «стандартных утилит».
После того, как он будет запущен и запущен, чтобы превратить его в DHCP-сервер для вашей внутренней сети виртуальных машин, установите пакет isc-dhcp-server
. Затем отредактируйте/etc/dhcp/dhcpd.conf
Вот простой пример из моего. Это устанавливает короткое время аренды (5 минут), устанавливает клиентский домен поиска и т. д. на "fake.tld", направляет их запросы DNS на 192.168.1.2 и выдает адреса в диапазоне 10.99.98.80-100 с 24 битами сетевой маски. Обратите внимание, что виртуальная машина, которая это делает, должна иметь адаптер, настроенный с IP в пределах подсети 10.99.98.0/24.
В дополнение к общему пулу я даю устройству с MAC-адресом 80:c1:6e:2b:b6:cd
явно определенной аренды (а также любой другой, option
например, DNS-сервер для использования, шлюз и т. д.) для .110
ip. Любые такие «статические аренды» должны быть для адресов ВНЕ вашего динамического диапазона, но в пределах подсети, настроенной как в файле конфигурации, так и на сетевом адаптере машины, на которой размещена служба.
Когда вы добавляете новый хост и хотите, чтобы у него был определенный 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
Это можно сделать на внутреннем DHCP-сервере VBOX:
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"
И это все. Вы можете сделать это не только для сетей host-only, но и для любой сети Vbox с подключенным DHCP-сервером.
решение3
Вам не нужно дополнительное программное обеспечение DHCP-сервера, с помощью NAT Network 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
P.S. Я помню, что 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
:)