This is an old revision of the document!
DHCP на Perl
Возможности
поддержка любых опций, включая опцию 82, маршруты
возможность работы с любой базой или файлами
легкость модификации
масштабируемость: как многопоточность так и возможность работы одновременно на нескольких серверах
умеет отправлять копии пакетов на указанный IP адрес
умеет работать в качестве демона
несколько уровней вывода отладочной информации
Требования
perl с поддержкой многопоточности
набор пакетов к perl указанный в начале скрипта
дописать запросы к базе данных, местами можно и закомментировать (release, decline)
Опции командной строки
-b - <ip> IP адрес для приёма запросов, по умолчанию: 0.0.0.0 (bind addr)
-sp - <port> порт для приёма запросов, по умолчанию: 67 (bind port)
-cp - <port> порт для отправки ответов клиенту напрямую, по умолчанию: 68
-id - <ip> IP адрес - DHCP server ID, Обязательно установить!, Должен быть реальным IP адресом сервера.
-m - <ip> IP адрес куда отправлять копии всех принятых запросов
-t - <threads> количество потоков, рекомендуется: CPU cores * 2, по умолчанию: 4
-dbs - параметры подключения к базе данных: DriverName:database=database_name;host=hostname;port=port
-dbl - логин для подключения к базе данных
-dbp - пароль для подключения к базе данных
-P - <path> имя файла куда сохранять PID
-v - <level> отображать отладочную информацию: 1 - от кого, кому, время обработки, 2 - тоже что и 1 плюс декодинг содержимого пакетов, по умолчанию 0 - ничего не отображать.
-d - работать в режиме демона
Замечание
Для все параметры подключения к базе данных: логин, пароль, адрес - могут быть прописаны в скрипте.
Пример запуска
dhcpd.pl -id 192.168.0.1 -m 192.168.0.2 -t 2 -v 1
192.168.0.1 - адрес дхцп сервера (настроенный в релеях) к которому должны обращаться клиенты
-
2 - потока
1 - выводить минимум отладочной информации о запросах: от кого получено, кому отправлено, сколько времени заняло
Замечание
Биндить лучше на 0.0.0.0, потому как если забиндить на конкретный IP то ответы будут уходить только с него, в случае нескольких адаптеров/алиасов остальные задействованны не будут. В таких случаях сервер будет получать, обрабатывать запрос но ответ уходить не будет.