Как я настраивал Ubuntu Server в качестве шлюза с PXE. Часть 2

Как я настраивал Ubuntu Server в качестве шлюза с PXE. Настройка DHCP

В прошлый раз я обозначил мотивы, почему решил заняться делом, вынесенным в заглавие текста, а также рассказал, как настроил netplan. Настала очередь обучить сервер выдавать IP-адреса клиентам по протоколу DHCP.

Для выдачи IP нужно установить службу isc-dhcpd-server:

sudo apt install isc-dhcp-server

Затем службу нужно настроить для работы в собственной сети. Для настройки определен конфигурационный файл /etc/dhcp/dhcpd.conf. Отредактировал его следующим образом:

option domain-name "twilights";
option domain-name-servers 8.8.8.8;
option ip-forwarding on;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.2 192.168.0.254;
  option domain-name-servers 8.8.8.8;
  option domain-name "twilights";
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.1;
  option broadcast-address 192.168.0.255;
  default-lease-time 600;
  max-lease-time 7200;
  filename "pxelinux.0";
#  option root-path /netboot/tftp;
}
#host goshanoob {
#  hardware ethernet bc:5f:06:69;
#  filename "pxelinux.0";
#  fixed-address 192.168.0.22;
#  server-name "toccata.example.com";
#}

Решеткой предваряются закомментированные строки, которые, возможно, еще пригодятся.
Как я понял, domain-name определяет имя моего домена, name-servers - сервер, который будет разрешать доменные имена по протоколу DNS. Не знаю, влияет ли инструкция ip-forwarding в данный момент на что-то, но, судя по названию, она определяет, будут ли маршрутизироваться пакеты через мою сеть. Опция lease-time задает время аренды адреса.
Для своей подсети 192.168.0.0 я выделил 254 доступных адреса. Они будут выдаваться, начиная с 192.168.0.2, потому что 192.168.0.1 - шлюз, мой текущий сервер, который я настраиваю. Важна опция filename "pxelinux.0" - без нее служба не стартанет (либо ничего не будет выдано - нужно проверить бы).
Также здесь предусмотрена возможность резервировать для отдельных MAC-адресов IP-адреса.
Теперь важно указать, для какого сетевого интерфейса перечислены данные настройки. Такая информация указывается в файле /etc/default/isc-dhcp-server:
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enp1s0"
INTERFACESv6=""

Теперь enp1s0 слушает запросы DHCP изнутри сети.
После настройки нужно перезапустить службу, а заодно проверить статус:

sudo systemctl restart isc-dhcp-server
sudo systemctl status isc-dhcpd-server

● isc-dhcp-server.service - ISC DHCP IPv4 server
     Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-04-12 10:45:14 +05; 3 days ago
       Docs: man:dhcpd(8)
   Main PID: 1054 (dhcpd)
      Tasks: 4 (limit: 2270)
     Memory: 10.2M
     CGroup: /system.slice/isc-dhcp-server.service
             └─1054 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf enp1s0

Apr 15 11:28:29 twilight dhcpd[1054]: DHCPACK on 192.168.0.15 to 18:f0:ef:e2 via enp1s0
Apr 15 11:37:14 twilight dhcpd[1054]: DHCPREQUEST for 192.168.0.15 from 18:f0:ef:e2 via enp1s0
Apr 15 11:37:15 twilight dhcpd[1054]: DHCPACK on 192.168.0.15 to 18:f0:ef:e2 via enp1s0
Apr 15 11:45:13 twilight dhcpd[1054]: DHCPDISCOVER from 18:f0:ef:e2 via enp1s0
Apr 15 11:45:14 twilight dhcpd[1054]: DHCPOFFER on 192.168.0.15 to 18:f0:ef:e2 via enp1s0
Apr 15 11:45:14 twilight dhcpd[1054]: DHCPREQUEST for 192.168.0.15 (192.168.0.1) from 18:f0:ef:e2 via enp1s0
Apr 15 11:45:14 twilight dhcpd[1054]: DHCPACK on 192.168.0.15 to 18:f0:ef:e2 via enp1s0
Apr 15 11:45:18 twilight dhcpd[1054]: reuse_lease: lease age 4 (secs) under 25% threshold, reply with unaltered, existi>
Apr 15 11:45:18 twilight dhcpd[1054]: DHCPREQUEST for 192.168.0.15 (192.168.0.1) from 18:f0:ef:e2 via enp1s0
Apr 15 11:45:18 twilight dhcpd[1054]: DHCPACK on 192.168.0.15 to 18:f0:ef:e2 via enp1s0

Статус, кроме прочего, сообщил, что сервер активно обменивается DHCP-сообщениями с одним из устройств в сети (для статьи MAC-адрес я частично затер). Полный лог сервера удобно автоматически обновлять в консоль командой:

 tail -f -n 30 /var/log/syslog

-n 30 - количество первоначально выведенных строк. 
Отлично! Теперь я подключаю машину к сетевой карте enp1s0 сервера и наблюдаю, какой адрес был ей выдан. Список выданных адресов можно посмотреть в файле:
cat /var/lib/dhcp/dhcpd.leases

authoring-byte-order little-endian;
lease 192.168.0.2 {
  starts 1 2021/04/05 05:48:51;
  ends 1 2021/04/05 05:58:51;
  tstp 1 2021/04/05 05:58:51;
  cltt 1 2021/04/05 05:48:51;
  binding state free;
  hardware ethernet 20:cf:75:17;
  uid "\001 \3170u\027E";
  set vendor-class-identifier = "MSFT 5.0";
. . .

Следующим моим шагом была настройка iptables, чтобы разрешить компьютерам в сети выходить в интернет. Но об этом в другой раз...

ToDo:
- привести список точных описаний опций файла /etc/dhcp/dhcpd.conf;
- попробовать получить IP без параметра filename, узнать альтернативные filename.

Источники информации:
1. https://habr.com/ru/post/504868/ - Домашний интернет шлюз
2. https://habr.com/ru/company/serverclub/blog/250549/ - Загрузочный сервер
3. https://howitmake.ru/blog/ubuntu/140.html - Настройка PXE Boot

Комментарии

Популярные сообщения