Хост не может общаться с гостевой виртуальной машиной при изменении 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 виртуального сетевого адаптера!

Я надеюсь, что этот ответ поможет кому-то, кто застрял в подобной ситуации, и сэкономит им бесчисленные часы поиска. Обратите внимание, что мне не нужно было выключать брандмауэр ни на хосте, ни на госте!

Другие вопросы по тегам