Хост не может общаться с гостевой виртуальной машиной при изменении IP-адреса с DHCP, назначенного динамическим на статический
TL;DR: хост может пропинговать гостевую виртуальную машину, подключенную через NAT, когда IP-адрес DHCP используется на гостевой, не может при использовании статического ip. Помогите.
Поэтому я пытался настроить локальную сеть на основе NAT, с которой хост мог бы общаться, где каждая виртуальная машина имеет статический IP-адрес. Согласно документам VMware, к виртуальному коммутатору vmnet подключен адаптер хоста, который отображается как 'vmnet#' (где # - номер адаптера) в хосте. ifconfig
выход. Используя этот виртуальный интерфейс, хост может пинговать и связываться с гостевыми виртуальными машинами, подключенными к тому же виртуальному коммутатору vmnet #.
Сначала я создал новый виртуальный коммутатор vmnet10. Я настроил его, чтобы иметь IP-адрес подсети 10.0.99.0/24
(NetMask: 255.255.255.0
) устройство NAT с IP-адресом 10.0.99.2
и DHCP-сервер (который, согласно документам VMware, находится на 10.0.99.254). Я не изменил настройки автоматического DHCP, и, следовательно, диапазон 10.0.99.128 - 10.0.99.253
динамические IP-адреса DHCP в то время как 10.0.99.3 - 10.0.99.127
IP-адреса, которые я могу назначить статически. Вот где начинается проблема.
Когда гость виртуальной машины получает свой IP-адрес от сервера DHCP (10.0.99.128), к нему подключается хост-адаптер, а 10.0.99.1 может пропинговать 10.0.99.128 и наоборот. Однако, если я изменяю IP вручную через nmtui, (генерируя следующее /etc/sysconfig/network-scripts/ifcfg-ens33
файл), хотя виртуальная машина все еще может получить доступ к Интернету и пинговать другие виртуальные машины, хост не может связаться с ней, и наоборот. В чем дело? Это из-за того, что я не запрашивал у DHCP-сервера статический IP-адрес?! Как это исправить?
Дамп конфигурации для систем, описанных выше, можно найти по этому адресу.
1 ответ
РЕДАКТИРОВАТЬ: приведенный ниже метод может или не может быть необходимым - однако, этот конкретный шаг является обязательным. На гостевых интерфейсах необходимо создать статический маршрут, поскольку существующая таблица маршрутизации может быть неправильной. Мой изначально выглядел так:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.99.2 0.0.0.0 UG 100 0 0 ens33
10.0.99.2 0.0.0.0 255.255.255.255 UH 100 0 0 ens33
10.0.99.11 0.0.0.0 255.255.255.255 UH 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
Для этого /etc/sysconfig/network-scripts/route-ens33
Файл (route-interface) должен быть создан с синтаксисом:
default 10.0.99.2 dev ens33
10.0.99.0/24 dev ens33
куда 10.0.99.2
IP-адрес шлюза (устройства VMware NAT) и 10.0.99.0/24
это подсеть, в которой существуют статические IP-адреса, т. е. подсеть ЛВС. После этого шага интерфейс должен быть перезапущен с помощью nmcli c d ens33; nmcli c u ens33
, Таблица маршрутизации ядра теперь должна выглядеть так:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.99.2 0.0.0.0 UG 100 0 0 ens33
10.0.99.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
...
Таким образом, оказывается, что мы должны назначить статический IP-адрес гостевым виртуальным машинам, даже если гости не работают с DHCP. Таким образом, dhcpd.conf
для виртуального коммутатора необходимо иметь записи для каждого статического IP. Так как я использовал vmnet10
Я редактировал /etc/vmware/vmnet10/dhcpd/dhcpd.conf
файл и добавил:
...
####### VMNET DHCP Configuration. End of "DO NOT MODIFY SECTION" #######
####### VMNET Static IP Allocation Table by Somu #######
host vmInfra.somuVMnet.local {
hardware ethernet 00:0C:29:79:8C:1F;
fixed-address 10.0.99.99;
}
host vmPrime.somuVMnet.local {
hardware ethernet 00:0C:29:3B:B9:1C;
fixed-address 10.0.99.11;
}
host vmDeux.somuVMnet.local {
hardware ethernet 00:0C:29:2A:E2:D3;
fixed-address 10.0.99.12;
}
Обратите внимание, что каждый MAC-адрес соответствует виртуальным NIC, назначенным для каждой виртуальной машины. Эти конфиги следует добавить после выключения виртуальных машин и выключения самой рабочей станции vmware.
Наконец, после того, как конфигурация была сохранена, так как служба dhcp работает на хост-компьютере, их необходимо перезапустить. Так как я не мог найти отдельную службу для каждой виртуальной машины, я просто перезапустил vmware.service
на самом хосте. Обратите внимание, что я использую systemd
поскольку я нахожусь на Fedora 27. Этот метод должен одинаково хорошо работать и для ОС System V, даже если команда будет другой.
systemctl restart vmware; systemctl status -l vmware
Убедитесь, что служба активна, а затем включите гостя. Теперь, если вы настроили свою виртуальную машину на статический IP-адрес, она должна соответствовать IP-адресу, который вы указали в dhcpd.conf
просто чтобы избежать столкновений. Если вы используете автоматическую настройку на основе DHCP, это совсем не проблема, поскольку сервер DHCP теперь будет назначать конкретный запрошенный вами IP-адрес на основе адреса MAC виртуального сетевого адаптера!
Я надеюсь, что этот ответ поможет кому-то, кто застрял в подобной ситуации, и сэкономит им бесчисленные часы поиска. Обратите внимание, что мне не нужно было выключать брандмауэр ни на хосте, ни на госте!