При работе isc-dhcp-server совместно с приложением apparmor часто возникает ошибка при ротации leases файлов из-за отсутствия прав доступа к файлам. Это известная проблема, подробнее про неё можно прочитать: https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/1186662 . Проблема с ротацией файлов dhcp.leases может привести к нестабильной работе DHCP сервера.
Диагностика проблем ротации файлов dhcp.leases на сервере
Анализ логов dhcp сервера
При перезапуске isc-dhcp-server в логах можно заметить записи вида:
Feb 27 05:43:17 gateway dhcpd: Can't create new lease file: Permission denied
При превышении размера leases файлов нескольких гигабайт, возможны подобные ошибки при запуске dhcp сервер
/var/lib/dhcp/dhcpd.leases: file is too long to buffer.
Проверка даты создания lease файлов
Выполните команду:
$ ls -l /var/lib/dhcp/ -rw-r--r-- 1 root root 41634468 нояб. 27 08:53 dhcpd.leases -rw-r--r-- 1 root root 40987441 нояб. 27 08:11 dhcpd.leases~
Дата создания файла dhcpd.leases~ - должна не больше чем на 1 час отличаться от файла dhcpd.leases. Повторите выполнение команды ls -l /var/lib/dhcp/ и убедитесь, что размер файла dhcpd.leases увеличивается. Если данные условия выполняются, то ротация файлов dhcpd.leases на сервере работает.
Если разница во времени больше часа, а файл dhcpd.leases существенно больше dhcpd.leases~ - значить ротация не работает.
Пример неработоспособности ротации:
$ ls -l /var/lib/dhcp/ total 114776 -rw-r--r-- 1 root root 9644913 Nov 27 06:02 dhcpd.leases~ -rw-r--r-- 1 root root 107878109 Nov 27 09:56 dhcpd.leases
Настройка ротации файлов dhcp.leases на сервере
Для настройки ротации dhcpd.leases необходимо в конфигурационном файле DHCP сервера (/etc/init/isc-dhcp-server.conf) заменить пользователя dhcpd на root (приведены только те строки из файла, где необходимо выплнить замену):
if ! dhcpd -user root -group root -t -q -4 -cf $CONFIG_FILE > /dev/null 2>&1; then dhcpd -user root -group root -t -4 -cf $CONFIG_FILE chown root:root /var/run/dhcp-server chown root:root /var/lib/dhcp /var/lib/dhcp/dhcpd.leases chown root:root /var/lib/dhcp/dhcpd.leases~ exec dhcpd -user root -group root -f -q -4 -pf /run/dhcp-server/dhcpd.pid -cf $CONFIG_FILE $INTERFACES
Меняем владельца /run/dhcp-server/dhcpd.pid c dhcp на root
chown root:root /run/dhcp-server/dhcpd.pid
После изменения конфигурации необходимо перезапустить DHCP сервер командой:
sudo service isc-dhcp-server restart
После проверяем работоспособность DHCP сервера:
$ tail -f /var/log/dhcp.log Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: All rights reserved. Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: Internet Systems Consortium DHCP Server 4.2.4 Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: Copyright 2004-2012 Internet Systems Consortium. Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: All rights reserved. Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: Wrote 0 class decls to leases file. Nov 27 13:01:49 vagrant-ubuntu-trusty-64 dhcpd: Wrote 3210 leases to leases file. Nov 27 13:01:50 vagrant-ubuntu-trusty-64 dhcpd: DHCPREQUEST for 172.30.3.252 from e0:d9:e3:50:71:e1 (WEP-2ac) via eth2 Nov 27 13:01:50 vagrant-ubuntu-trusty-64 dhcpd: DHCPACK on 172.30.3.252 to e0:d9:e3:50:71:e1 (WEP-2ac) via eth2 Nov 27 13:02:04 vagrant-ubuntu-trusty-64 dhcpd: DHCPREQUEST for 172.30.3.235 from a8:f9:4b:aa:36:59 via eth2 Nov 27 13:02:04 vagrant-ubuntu-trusty-64 dhcpd: DHCPACK on 172.30.3.235 to a8:f9:4b:aa:36:59 via eth