Назад | Перейти на главную страницу

Определение нового местоположения для файлов конфигурации syslinux при настройке PXELinux

Я работаю над макетом PXE-сервера для того места, где работаю. Я пытаюсь разместить файлы изображений и файл конфигурации в местах, где все будет немного организовано. Хотя мой dhcpd.confзадает параметры конфигурации, необходимые для того, чтобы сообщить PXELinux, где искать файлы конфигурации, он по-прежнему не находит указанные файлы.

Вот как выглядит мой /etc/dhcp/dhcpd.conf, вот где, я думаю, проблема.

option space PXE;
option PXE.mtftp-ip             code 1 = ip-address;
option PXE.mtftp-cport          code 2 = unsigned integer 16;
option PXE.mtftp-sport          code 3 = unsigned integer 16;
option PXE.mtftp-tmout          code 4 = unsigned integer 8;
option PXE.mtftp-delay          code 5 = unsigned integer 8;
option arch                     code 93 = unsigned integer 16;

option space pxelinux;
option pxelinux.magic                   code 208 = string;
option pxelinux.configfile              code 209 = text;
option pxelinux.pathprefix              code 210 = text;
option pxelinux.reboottime              code 211 = unsigned integer 32;

ddns-update-style none;

option domain-name "lab.solignis.com";
option domain-name-servers ns01.lab.solignis.com;

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

authoritative;
log-facility local7;

subnet 192.168.147.0 netmask 255.255.255.0 {
        range 192.168.147.100 192.168.147.254;
        option subnet-mask 255.255.255.0;
        option routers 192.168.147.2;
        option broadcast-address 192.168.147.255;
        default-lease-time 600;
        max-lease-time 7200;

        class "pxeclients" {

                match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
                next-server 192.168.147.10;

                if option arch = 00:00 {
                        option pxelinux.configfile "common.cfg";
                        option pxelinux.pathprefix "/configs/";
                        filename "/pxelinux/images/BIOS/pxelinux.0";
                } elsif option arch = 00:06 {
                        #option pathprefix "/configs/";
                        #option configfile "/EFIx64/default";
                        filename "/images/EFIx64/syslinux.efi";
                } elsif option arch = 00:07 {
                        #option pathprefix "/configs/";
                        #option configfile "/EFIx64/default";
                        filename "/images/EFIx64/syslinux.efi";
                } elsif option arch = 00:09 {
                        #option pathprefix "/configs/";
                        #option configfile "/EFIx64/default";
                        filename "/images/EFIia32/syslinux.efi";
                }
        }

}

Части конфигурации были скомпилированы из различных частей документации, части, которые закомментированы, являются старыми частями, которые я еще не исправил, но не принимаю во внимание. А пока я просто хочу, чтобы стандартный BIOS работал (arch = 00:00).

Вот как выглядит моя файловая структура для моего каталога tftpboot.

server01@server01:/var/lib/tftpboot$ tree
.
└── pxelinux
    ├── configs
    │   └── common.cfg
    └── images
        ├── BIOS
        │   ├── ldlinux.c32
        │   └── pxelinux.0
        ├── EFIia32
        │   └── syslinux.efi
        └── EFIx64
            └── syslinux.efi

6 directories, 5 files

Я был почти уверен, что правильно настроил pxelinux, но он не видит файл конфигурации, поэтому что-то настроено неправильно. Может ли кто-нибудь дать представление о том, что я неправильно сконфигурировал? Я весь день бился об этом головой.

Обратите внимание, что configfile относительно pathprefix:

            if option arch = 00:00 {
                    option pxelinux.configfile "common.cfg";
                    option pxelinux.pathprefix "/pxelinux/configs/";
                    filename "/pxelinux/images/BIOS/pxelinux.0";

это будет искать файл конфигурации с именем /pxelinux/configs/common.cfg на сервере TFTP.

если это не удается, просто получите захват трафика Wireshark и посмотрите запросы файлов TFTP и то, на что они указывают.

Я боролся с этим сегодня и наконец заставил это работать. Ключевым моментом был этот маленький раздел в PXELINUX вики (У меня был ISC dhcp-4.2.5-79.el7.centos.x86_64 на CentOS 7.8):

В версиях ISC dhcp выше 3.0 пространство опций локального сайта начинается с 224, а не со 128 (в соответствии с RFC 3942), поэтому вам следует определить параметры PXELINUX 208-211 как обычные параметры DHCP, а не как локальные параметры сайта. Например:

 option magic      code 208 = string;
 option configfile code 209 = text;
 option pathprefix code 210 = text;
 option reboottime code 211 = unsigned integer 32;

Внутри вашей группы или класса загрузки PXELINUX (где бы у вас ни были параметры, связанные с PXELINUX, такие как параметр «имя файла»), вы должны добавить, например:

 # Always include the following lines for all PXELINUX clients
 option magic f1:00:74:7e;
 if exists dhcp-parameter-request-list {
  # Always send the PXELINUX options (specified in hexadecimal, ie: 208 = 0xd0, 209 = 0xd1, etc.)
  option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
 }
 # These lines should be customized to your setup
 option configfile "configs/common";
 option pathprefix "/tftpboot/pxelinux/files/";
 option reboottime 30;
 filename "/tftpboot/pxelinux/pxelinux.bin";