nrdhcp
Скрипт задуман как DHCP SERVER, который не поддерживает некоторые функции DHCP описанные в RFC 2131
Работая в телекоме 5 лет и подбирая подходящий DHCP сервер для своих проектов так и не нашел нужного. Нет нужного значит делаем сами :)!
Постановка ТЗ
Являсь провайдером в сети используем схему подключение vlan на клиента. Клиентов много поэтому используем QinQ.
Из вышесказанного следует одно следствие - любой клиент однозначно идентифицируется парой Svid.Cvid Svid - service vlan id, Cvid - customer vlan id
Описание реализации
Сервер слушает RAW сокет на адреса 0.0.0.0 порт 67
Из полученного пакета узанет с какого интерфейса пришел пакет и в этот интерфейс отвечает
Из ТЗ и релизации следует несовместимость с RFC 2131 состоящая в следующем.
Серев не может обслуживать запросы от релеев.
Сервер может слушать и отвечать на интерфейсах не имеющих ip адресов.
В качестве базы даннх используется SQlite в памяти.
При старте сервер восстанавливает базу данных из файла если такой существует, затем читает конфигурационные файлы клиентов и обновляет базу данных сетей и лиз. Каждые 5 минут серве сохраняет базу данных в файл, также при выходе сохраняет базу данных.
Перечитывание конфигов реализовано через сигнал HUP. По сигналу сервер перечитывает конфигурационные файлы.
Функция синхронизации базы данных с конфигурационными файлами сделана в виде модуля, в будущем возможно допишу модуль заполняющий бад из одного конфигурационного файла.
The wiki uses Markdown syntax.