Конфигурация DHCP-сервера/DHCP-Proxy

Настройки являются опциональными и используются для получения начального загрузчика iPXE для удаленной установки ОС по сети. Если вы планируете выполнять установку по сети с медианосителя, настройки, описанные в разделе, не требуются (см. раздел «Работа с модулем osmax-provisioner»).

Выберите один из следующих вариантов:

  1. Если вы используете DHCP-сервер и у вас есть доступ к настройкам вашего DHCP-сервера, вы можете настроить его для распределения IP-адресов и управления сетевыми параметрами, а также предоставить пользовательскую конфигурацию сети для загрузки iPXE.

  2. Если вы не можете изменить настройки DHCP-сервера, разверните DHCP-Proxy (при его отсутствии) и внесите необходимые изменения в его конфигурацию, чтобы он мог взаимодействовать с вашим iPXE-загрузчиком.

Ниже приведены примеры конфигурации DHCP-сервера и DHCP-Proxy. В конфигурации предусмотрены условия для архитектур BIOS и UEFI. Для каждой архитектуры указываются свои файлы загрузчиков, которые загружаются через TFTP-сервер или HTTP-репозиторий. При этом в инфраструктуре должны быть развернуты TFTP-сервер и/или HTTP-репозиторий, в зависимости от используемой архитектуры (BIOS или UEFI).

Пример конфигурации DHCP-сервера
# cat /etc/dhcp/dhcpd.conf
# базовые DHCP-опции
option domain-name "wd2.local";
option domain-name-servers 192.168.11.10;
default-lease-time 7776000;
max-lease-time 7776000;
option ntp-servers 192.168.0.2;
option routers 192.168.11.10;
option ntp-servers 192.168.0.2;
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
key dhcp-server.wd2.local. {
        algorithm hmac-md5;
        secret "R2xOu1NWXSPkvNqfP8Rm6Q==";
}

# Определение формата опции 93
# При работе без DHCP-proxy раскомментировать
#option client-architecture code 93 = unsigned integer 16;

# Настройка сегмента сети
subnet 192.168.11.0 netmask 255.255.255.0 {
    range 192.168.11.100 192.168.11.200;
# При работе без DHCP-proxy раскомментировать блок
## Определение архитектуры клиента:
## Определение архитектуры DHCP-клиента как iPXE
#    if exists user-class and option user-class = "iPXE" {
## Путь до iPXE-инструкции для iPXE-загрузчика
#        filename "${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}";
## Определение архитектуры DHCP-клиента как UEFI HTTP
#    } elsif option client-architecture = encode-int ( 16, 16 ) {
## Путь до ipxe-загрузчика для UEFI
#        filename "${fqdn_http_repo}/ipxe.efi";
#        option vendor-class-identifier "HTTPClient";
## Определение архитектуры DHCP-клиента как BIOS
#    } elsif option client-architecture = 00:00 {
## Имя файла iPXE-загрузчика для BIOS на TFTP-сервере
#        filename "undionly.kpxe";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
## Определение архитектуры DHCP-клиента как UEFI
#    } elsif option client-architecture = 00:09 {
## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
#        filename "ipxe.efi";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
## Определение архитектуры DHCP-клиента как UEFI
#    } elsif option client-architecture = 00:07 {
## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
#        filename "ipxe.efi";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
## Если архитектура не определена, отдавать iPXE-загрузчик для UEFI
#    } else {
## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
#        filename "ipxe.efi";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
#    }

# базовые DHCP-опции
    ddns-domainname "wd2.local";
    ddns-rev-domainname "in-addr.arpa";

    zone 11.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key dhcp-server.wd2.local.;
        }
}
Пример конфигурации DHCP-сервера c доверенной установкой
# cat /etc/dhcp/dhcpd.conf
# базовые DHCP-опции
option domain-name "wd2.local";
option domain-name-servers 192.168.11.10;
default-lease-time 7776000;
max-lease-time 7776000;
option ntp-servers 192.168.0.2;
option routers 192.168.11.10;
option ntp-servers 192.168.0.2;
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
key dhcp-server.wd2.local. {
        algorithm hmac-md5;
        secret "R2xOu1NWXSPkvNqfP8Rm6Q==";
}

# Определение формата опции 93
# При работе без DHCP-Proxy раскомментировать
#option client-architecture code 93 = unsigned integer 16;

# настройка сегмента сети
subnet 192.168.11.0 netmask 255.255.255.0 {
    range 192.168.11.100 192.168.11.200;
# При работе без DHCP-Proxy раскомментировать блок
## Определение архитектуры клиента:
## Определение архитектуры DHCP-клиента как iPXE
#    if exists user-class and option user-class = "iPXE" {
## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
#        filename "${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}";
## Определение архитектуры DHCP-клиента как UEFI HTTP
#    } elsif option client-architecture = encode-int ( 16, 16 ) {
## Путь до ipxe-загрузчика для UEFI
#        filename "${fqdn_http_repo}/ipxe.efi";
#        option vendor-class-identifier "HTTPClient";
## Определение архитектуры DHCP-клиента как BIOS
#    } elsif option client-architecture = 00:00 {
## Имя файла iPXE-загрузчика для BIOS на TFTP-сервере
#        filename "undionly.kpxe";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
## Определение архитектуры dhcp-клиента как UEFI
#    } elsif option client-architecture = 00:09 {
## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
#        filename "ipxe.efi";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
## Определение архитектуры DHCP-клиента как UEFI
#    } elsif option client-architecture = 00:07 {
## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
#        filename "ipxe.efi";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
## Если архитектура не определена отдавать iPXE-загрузчик для UEFI
#    } else {
## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
#        filename "ipxe.efi";
## Адрес TFTP-сервера
#        next-server ${fqdn_tftp_server};
#    }

# базовые DHCP-опции
    ddns-domainname "wd2.local";
    ddns-rev-domainname "in-addr.arpa";

    zone 11.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key dhcp-server.wd2.local.;
        }
}
Пример конфигурации DHCP-Proxy
# cat /etc/dnsmasq.d/dhcp.conf
# Основные настройки dnsmasq
dhcp-no-override
pxe-prompt="Press any key for boot menu", 2

# Отключает DNS-службу, оставляя только DHCP-функциональность.
port=0
# Включает логирование DHCP-сообщений.
log-dhcp

# Создание меток для сопоставления архитектур
dhcp-match=set:x86PC, option:client-arch, 0
dhcp-match=set:BC_EFI, option:client-arch, 7
dhcp-match=set:EFI _x86-64, option:client-arch, 9
dhcp-match=set:HTTPClient,option:client-arch,16
dhcp-match=set:iPXE,175

# Загрузочные опции для iPXE-клиентов на основе меток
dhcp-boot=tag:iPXE,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}
dhcp-boot=tag:iPXE,tag:x86PC,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug},,0.0.0.1
dhcp-boot=tag:HTTPClient,${fqdn_http_repo}/ipxe.efi
dhcp-boot=tag:!iPXE,tag:x86PC,undionly.kpxe,${fqdn_tftp_server}
dhcp-boot=tag:!iPXE,tag:BC_EFI,ipxe.efi,${fqdn_tftp_server}
dhcp-boot=tag:!iPXE,tag:EFI_ x86-64,ipxe.efi,${fqdn_tftp_server}
# Диапазон DHCP, используемый в режиме проксирования (без выдачи IP-адресов).
dhcp-range=192.168.11.100,proxy

# DHCP option 93 | Client architecture
# 0 Standard PC BIOS
# 6 32-bit x86 EFI
# 7 64-bit x86 EFI
# 9 64-bit x86 EFI (obsolete)
# 10    32-bit ARM EFI
# 11    64-bit ARM EFI
# 16    64-bit x86 UEFIhttpClient
Пример конфигурации DHCP-Proxy с доверенной установкой
# cat /etc/dnsmasq.d/dhcp.conf
# Основные настройки dnsmasq
dhcp-no-override
pxe-prompt="Press any key for boot menu", 2

# Отключает DNS-службу, оставляя только DHCP-функциональность.
port=0
# Включает логирование DHCP-сообщений.
log-dhcp

# Создание меток для сопоставления архитектур
dhcp-match=set:x86PC, option:client-arch, 0
dhcp-match=set:BC_EFI, option:client-arch, 7
dhcp-match=set:EFI _x86-64, option:client-arch, 9
dhcp-match=set:HTTPClient,option:client-arch,16
dhcp-match=set:iPXE,175

# Загрузочные опции для iPXE-клиентов на основе меток
## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
dhcp-boot=tag:iPXE,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}
## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
dhcp-boot=tag:iPXE,tag:x86PC,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug},,0.0.0.1
dhcp-boot=tag:HTTPClient,${fqdn_http_repo}/ipxe.efi
dhcp-boot=tag:!iPXE,tag:x86PC,undionly.kpxe,${fqdn_tftp_server}
dhcp-boot=tag:!iPXE,tag:BC_EFI,ipxe.efi,${fqdn_tftp_server}
dhcp-boot=tag:!iPXE,tag:EFI_ x86-64,ipxe.efi,${fqdn_tftp_server}
# Диапазон DHCP, используемый в режиме проксирования (без выдачи IP-адресов).
dhcp-range=192.168.11.100,proxy

# DHCP option 93 | Client architecture
# 0 Standard PC BIOS
# 6 32-bit x86 EFI
# 7 64-bit x86 EFI
# 9 64-bit x86 EFI (obsolete)
# 10    32-bit ARM EFI
# 11    64-bit ARM EFI
# 16    64-bit x86 UEFIhttpClient
Плейсхолдеры из примера, указанные ниже, необходимо заменить вручную.
  • ${osmax_provisioner_base_url} — актуальная конечная точка (endpoint) модуля osmax-provisioner для получения стартового скрипта начального загрузчика;

  • {templateSlug} — уникальное системное имя шаблона конфигурационного файла для конечной точки v1/boot_loaders/ipxe/config?templateSlug=, для получения стартового скрипта загрузчика iPXE (например: templateSlug=bios_ipxe_universal_base_script);

    Вы можете указать имя из предустановленного примера или задать новое, если вы планируете создать пользовательский шаблон.
  • ${fqdn_tftp_server} — доменное имя (FQDN) поднятого TFTP-сервера, на котором хранится файл начального загрузчика iPXE;

  • ${fqdn_http_repo}-- доменное имя (FQDN) HTTP-репозитория, на котором хранится файл начального загрузчика iPXE.