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

8

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

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

Andomar
источник
Какой 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

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

Zypher
источник
Разве мы не должны были бы сбрасывать dhcpd каждый раз, когда есть изменение? Можно ли динамически определять членство в пуле с помощью вызова скрипта?
Андомар
@ Andomar: Да, вы бы. К сожалению, я так не думаю - но я могу быть очень не прав
Зайфер
0

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

Zak
источник
На самом деле, переключения VLAN - это то, чего мы хотели бы избежать. Коммутаторы VLAN сбивают с толку модемы клиента и требуют много времени для выполнения
Andomar