Виртуальная машина HyperV Gen2 не загружается через PXE

У меня есть две виртуальные машины в HyperV, обе на одном виртуальном коммутаторе (внутреннем) в одной подсети. Я пытаюсь настроить его как сервер DHCP и TFTP для загрузки PXE. С машиной Gen1 она отлично работает с pxelinux. Gen2 с UEFI, к сожалению, не работает.

DHCP и TFTP-сервер

  • IP 192.168.1.2
  • Идентификация VLAN отключена

DHCP — DHCP-сервер ISC, работающий в док-контейнере с типом сети «хост» со следующей конфигурацией:

set vendorclass = option vendor-class-identifier;
option pxe-system-type code 93 = unsigned integer 16;
set pxetype = option pxe-system-type;

authoritative;

default-lease-time 7200;
max-lease-time 7200;

option tftp-server-name "192.168.1.2";
option bootfile-name "efi/core.efi";

subnet 192.168.1.0 netmask 255.255.255.0 {
    interface "eth0:0";
    option routers 192.168.1.1;
    option subnet-mask 255.255.255.0;
    range 192.168.1.100 192.168.1.150;
    option broadcast-address 192.168.1.255;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option domain-name   "ad.lholota.net";
    option domain-search "ad.lholota.net";

    if substring(vendorclass, 0, 9)="PXEClient" {
        if pxetype=00:06 or pxetype=00:07 {
            filename "efi/core.efi";
        } else {
            filename "pxelinux/pxelinux.0";
        }
    }
    next-server 192.168.1.2;
}

TFTP — tftp-hpa, работающий в док-контейнере в сети типа «хост». Я могу загрузить файлы efi вручную через стандартный клиент tftp.

Загрузочная машина

  • HyperV 2-го поколения
  • Нет виртуального жесткого диска или DVD
  • Вкладка прошивки имеет только один пункт в последовательности загрузки - сеть
  • Безопасная загрузка отключена
  • Идентификация VLAN отключена
  • Network adapter pointing into the same internal switch as the first VM
    • Enable virtual machine queue - checked
    • Включить разгрузку задач IPsec — отмечено, максимальное количество: 512
    • MAC-адрес динамический
    • Включить защиту DHCP - НЕ отмечено
    • Включить защиту рекламы маршрутизатора - НЕ отмечено
    • Защищенная сеть - НЕ проверено
    • Режим зеркального отображения - Нет
    • Включить присвоение имен устройствам — НЕ отмечено

Проблема в том, что машина даже не доходит до TFTP-сервера, потому что не завершает поток DHCP Discover-Offer-Request-Ack. Он зависает на offer, как показано в dhcpdump ниже. Загружаемая машина никогда не отправляет сообщение запроса. Забавно, но машина Gen1 HyperV на основе BIOS загружается без проблем, поэтому поток DHCP там работает.

Не могли бы вы подсказать, что может быть не так?

  TIME: 2018-07-11 19:49:37.641
    IP: 0.0.0.0 (0:15:5d:0:50:d0) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 8bf1c250
  SECS: 0
 FLAGS: 7f80
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 00:15:5d:00:50:d0:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         1 (DHCPDISCOVER)
OPTION:  57 (  2) Maximum DHCP message size 1472
OPTION:  55 ( 35) Parameter Request List      1 (Subnet mask)
                          2 (Time offset)
                          3 (Routers)
                          4 (Time server)
                          5 (Name server)
                          6 (DNS server)
                         12 (Host name)
                         13 (Boot file size)
                         15 (Domainname)
                         17 (Root path)
                         18 (Extensions path)
                         22 (Maximum datagram reassembly size)
                         23 (Default IP TTL)
                         28 (Broadcast address)
                         40 (NIS domain)
                         41 (NIS servers)
                         42 (NTP servers)
                         43 (Vendor specific info)
                         50 (Request IP address)
                         51 (IP address leasetime)
                         54 (Server identifier)
                         58 (T1)
                         59 (T2)
                         60 (Vendor class identifier)
                         66 (TFTP server name)
                         67 (Bootfile name)
                         97 (UUID/GUID)
                        128 (???)
                        129 (???)
                        130 (???)
                        131 (???)
                        132 (???)
                        133 (???)
                        134 (???)
                        135 (???)

OPTION:  97 ( 17) UUID/GUID                 008c0c7ab81331a0 ...z..1.
                        4297445b2e41610e B.D[.Aa.
                        a8               .
OPTION:  94 (  3) Client NDI                010300           ...
OPTION:  93 (  2) Client System             0007             ..
OPTION:  60 ( 32) Vendor class identifier   PXEClient:Arch:00007:UNDI:003000
---------------------------------------------------------------------------

  TIME: 2018-07-11 19:49:37.641
    IP: 0.0.0.0 (0:15:5d:0:50:12) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 8bf1c250
  SECS: 0
 FLAGS: 7f80
CIADDR: 0.0.0.0
YIADDR: 192.168.1.105
SIADDR: 192.168.1.2
GIADDR: 0.0.0.0
CHADDR: 00:15:5d:00:50:d0:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: efi/core.efi.
OPTION:  53 (  1) DHCP message type         2 (DHCPOFFER)
OPTION:  51 (  4) IP address leasetime      7200 (2h)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   192.168.1.1
OPTION:   6 (  8) DNS server                8.8.8.8,8.8.4.4
OPTION:  15 ( 14) Domainname                ad.lholota.net
OPTION:  28 (  4) Broadcast address         192.168.1.255

person LH_    schedule 12.07.2018    source источник


Ответы (2)


У меня была, как мне кажется, та же проблема при загрузке виртуальных машин HyperV на win10 2004 (19041.685): gen 1 работает, gen 2 отключается без запроса загрузочного файла.

Я сильно подозреваю, что это проблема с реализацией GEN2 UEFI PXE. Потому что, как только у меня есть по крайней мере две записи на выбор в меню загрузки pxe, он запрашивает файлы и загружает их, как и ожидалось.

Я запускаю dnsmasq для tftp и DHCP, и мой файл конфигурации ниже работает тогда и только тогда, когда хотя бы одна из двух последних строк раскомментирована. (pxe-service=x86-64_EFI и pxe-service=7 равны)

контекст конфигурации: https://linuxconfig.org/how-to-configure-a-raspberry-pi-as-a-pxe-boot-server

# /etc/dnsmasq.d/03-tftpboot.conf
enable-tftp
tftp-lowercase
tftp-root=/mnt/data/netboot
pxe-prompt="Choose:"
pxe-service=x86PC,"PXELINUX (BIOS)",bios/pxelinux.0
pxe-service=x86PC,"WinPE (BIOS)",boot/pxeboot.n12
pxe-service=x86-64_EFI,"PXELINUX (EFI)",efi64/syslinux.efi
pxe-service=x86-64_EFI,"winpe (EFI)",boot/wdsmgfw.efi
#pxe-service=7,"PXELINUX (EFI-7)",efi64/syslinux.efi  
person koljoxen    schedule 06.02.2021

Я думаю, что сталкиваюсь с той же проблемой при использовании цифрового поставщика арматуры. Отлично работает на Gen 1, но не на Gen 2. Также использовал ту же конфигурацию.

Глядя на цифровой код арматуры, кажется, что он должен работать, но не работает: ">https://github.com/digitalrebar/provision/blob/8269e1c7ff12a82854c19eccd114d064e2278211/midlayer/pxe.go#L252

Я думаю, это может быть связано:

https://wiki.fogproject.org/wiki/index.php/BIOS_and_UEFI_Co-Existence

https://serverfault.com/questions/739138/hyper-v-2016-gen2-vm-pxe-dhcp-timeout-wireshark-dhcp-discover-offer

person Taliesin    schedule 15.04.2019
comment
Я исправил свою проблему, явно настроив следующий сервер, и теперь он работает. - person Taliesin; 15.04.2019