Назначение блоков DHCP на лету


8

У нас есть большое количество клиентов, которые подключаются к нашей машине DHCP. Мы хотим назначить некоторые из них другому IP-блоку, который маршрутизируется с более низким приоритетом. При каждом продлении аренды DHCP мы хотели бы проверить базу данных и решить, на какой IP-блок мы бы хотели назначить клиента.

Есть ли способ заставить DHCP-сервер выполнять сценарий, просматривать базу данных или выполнять какой-либо динамический код при принятии решения, какой адрес назначать в каком пуле? Каждый клиент уникально идентифицируется опцией 82, также называемой «Опция информации агента ретрансляции DHCP».


Какой DHCP-сервер на какой ОС?
Zypher

Это звучит как установка типа носителя ... так ли это? Я был бы удивлен, если бы что-то подобное уже существовало в открытых инструментах. Я бы, наверное, посмотрел на это сам. Хотя очень интересный вопрос!
MikeyB

@Zypher: ОС Debian, обычный dhcpd @MikeyB: Да, настройка носителя
Andomar

Ответы:


2

В идеале вы должны модифицировать dhcpd для поддержки назначения адресов на основе Option82, эквивалентного «аппаратным» строкам в хост-объектах. Я сделал это с OpenBSD dhcpd, когда работал с провайдером, который имеет более простую внутреннюю структуру, чем isc-dhcpd.

Если вы не можете этого сделать, посмотрите на omapi (3) и omshell (1); вы бы использовали OMAPI для динамического создания объектов "class" и "pool", чтобы реализовать предложение Zypher. Я только что проверил, dhcpd.hи classструктура имеет OMAPI_OBJECT_PREAMBLE, так что это должно быть возможно. Помните, что документация по OMAPI может быть немного ... скудной.


Решение, предложенное Zypher, - это то, что мы имеем в настоящее время. И я не думаю, что системные администраторы оценят отредактированную версию dhcpd. Но OMAPI кажется хорошей альтернативой, спасибо!
Андомар

3

Так что я не сделал этого с опцией 82, но лучше всего было бы использовать классификацию в isc dhcpd.

Что бы вы сделали, это настроить класс, как:

class "userclass1" { 
    match if substring(option agent.circuit-id, 2, 2) = "<your_id1>";
}
class "userclass2" { 
    match if substring(option agent.circuit-id, 2, 2) = "<your_id2>";
}

Тогда в вашем заявлении пула:

pool {
  allow members of "userclass1";
  range 10.0.0.11 10.0.0.50;
}
pool {
   allow members of "userclass2";
   range 10.0.0.51 10.0.0.100;
}

Ссылка: dhcpd.conf

Это должно, по крайней мере, привести вас на правильный путь, у меня нет игрового сервера, чтобы проверить его, но я сделал нечто подобное с другими вариантами.


Разве мы не должны были бы сбрасывать dhcpd каждый раз, когда есть изменение? Можно ли динамически определять членство в пуле с помощью вызова скрипта?
Андомар

@ Andomar: Да, вы бы. К сожалению, я так не думаю - но я могу быть очень не прав
Зайфер


0

Один из способов сделать это - назначить этих клиентов отдельной VLAN, тогда DHCP-адрес, который эти клиенты получат, будет автоматически находиться в другом пуле.


На самом деле, переключения VLAN - это то, чего мы хотели бы избежать. Коммутаторы VLAN сбивают с толку модемы клиента и требуют много времени для выполнения
Andomar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.