Menu

Home

Michael Manerko

nrdhcp

Скрипт задуман как DHCP SERVER, который не поддерживает некоторые функции DHCP описанные в RFC 2131

Работая в телекоме 5 лет и подбирая подходящий DHCP сервер для своих проектов так и не нашел нужного. Нет нужного значит делаем сами :)!

Постановка ТЗ
Являсь провайдером в сети используем схему подключение vlan на клиента. Клиентов много поэтому используем QinQ.
Из вышесказанного следует одно следствие - любой клиент однозначно идентифицируется парой Svid.Cvid Svid - service vlan id, Cvid - customer vlan id

  1. Требуется автономная работа сервера осблуживающего клиентов (нет доступа к внешней базе данных с клиентами)
  2. На интерфейсах в сторону клиентов может не быть ip адресов
  3. Сервер не должен требовать перезагрузки при изменении количества интефейсов в системе
  4. Описание сетей dhcppools должно быть привязано к паре svid.cvid т.е. к имени интерфейса

Описание реализации

Сервер слушает RAW сокет на адреса 0.0.0.0 порт 67
Из полученного пакета узанет с какого интерфейса пришел пакет и в этот интерфейс отвечает

Из ТЗ и релизации следует несовместимость с RFC 2131 состоящая в следующем.
Серев не может обслуживать запросы от релеев.
Сервер может слушать и отвечать на интерфейсах не имеющих ip адресов.

В качестве базы даннх используется SQlite в памяти.

При старте сервер восстанавливает базу данных из файла если такой существует, затем читает конфигурационные файлы клиентов и обновляет базу данных сетей и лиз. Каждые 5 минут серве сохраняет базу данных в файл, также при выходе сохраняет базу данных.

Перечитывание конфигов реализовано через сигнал HUP. По сигналу сервер перечитывает конфигурационные файлы.

Функция синхронизации базы данных с конфигурационными файлами сделана в виде модуля, в будущем возможно допишу модуль заполняющий бад из одного конфигурационного файла.

The wiki uses Markdown syntax.

Project Members: