# Настройка загрузки PXE - EFI и Legacy

1. Прошить микротик версией не ниже 7.6.
2. Для каждой сети DHCP указать в `Next Server` **IP** PXE-сервера. В теории можно указать `66` опцией и подсунуть в `Option Set`, оставив `Next Server` пустым.
3. `Boot File Name` оставить пустым.

![pxe-efi-legzcy-1](img/pxe-efi-legzcy-1.png)

4. Создать две опции:

```
Name: legacy_67  
Code: 67
Value: s'loader_legacy/pxelinux.0'
```

```
Name: uefi_67
Code: 67
Value: s'loader_uefi/syslinux.efi'
```

![pxe-efi-legzcy-2](img/pxe-efi-legzcy-2.png)

5. Создать `Option Sets`

![pxe-efi-legzcy-3](img/pxe-efi-legzcy-3.png)

6. Создать опции в `Option Matcher`

![pxe-efi-legzcy-4](img/pxe-efi-legzcy-4.png)

Можно в `Server` указать **all**, в особенности, если DHCP серверов на микроте несколько. Если несколько DHCP серверов, то нужны отдельные опции для каждой сети.  Если одна подсеть разбита на несколько пулов, то указываем только первый, `next pool` не нужно.

![pxe-efi-legzcy-5](img/pxe-efi-legzcy-5.png)

![pxe-efi-legzcy-6](img/pxe-efi-legzcy-6.png)

## В терминале

```sh
ip dhcp-server option
/ip dhcp-server/network/ print
/ip dhcp-server/network/ set <НОМЕР СЕТИ> next-server="ip сервера"
/ip dhcp-server/option/ add name="legacy_67" code=67 value="s'loader_legacy/pxelinux.0'"
/ip dhcp-server/option/ add name="uefi_67" code=67 value="s'loader_uefi/syslinux.efi'"
/ip dhcp-server option sets add name="pxe-uefi" options=uefi_67
/ip dhcp-server option sets add name=" pxe-legacy" options= legacy_67
/ip dhcp-server/matcher/ add name="arch-legacy" " server="all" address-pool="ИМЯ ПУЛА" option-set="pxe-legacy" code="93" value="0x0000"
/ip dhcp-server/matcher/ add name="arch-efi" server="all" address-pool="ИМЯ ПУЛА" option-set="pxe-uefi" code="93" value="0x0007"
```

- `server="all"` - вместо `all` можно указать номер DHCP сервера (`/ip/dhcp-server print`)
- `address-pool="имя пула"` – указать имя `pool` (`ip/pool/ print` или нажать TAB поставив курсор после `address-pool=`)

## Для ISC-DHCP-SERVER (Linux)

Редактирование `dhcp.conf`:

```
option architecture-type code 93 = unsigned integer 16;
```

в `subnet` указать:

```
next-server <IP СЕРВЕРА>;
if option architecture-type = 00:07 {
  filename "loader_uefi/syslinux.efi";
} else {
  filename "loader_legacy/pxelinux.0";
}
```

## tftpd-ремап

В Legacy некоторые старые клиенты имеют косяк в стеке и они в конец искомого имени файла `loader_legacy/pxelinux.0` добавляют ненужный код. Исправляется ремап-фильтром на tftpd сервере:

```
g \\ /
ri (loader_uefi\/syslinux\.efi).*$ \1    # на всякий случай и для efi
ri (loader_legacy\/pxelinux\.0).*$ \1
```
