У нас есть большое количество клиентов, которые подключаются к нашей машине DHCP. Мы хотим назначить некоторые из них другому блоку IP, который маршрутизируется с более низким приоритетом. При каждом продлении аренды DHCP мы хотели бы проверять базу данных и решать, какой блок IP-адресов мы хотели бы назначить клиенту.
Есть ли способ заставить DHCP-сервер выполнять сценарий, просматривать базу данных или выполнять некоторый динамический код при принятии решения, какой адрес назначить в каком пуле? Каждый клиент однозначно идентифицируется с помощью опции 82, также известной как «Опция информации агента ретрансляции DHCP».
Так что я не делал этого с опцией 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 для поддержки назначения адресов на основе Option82, что эквивалентно строкам «оборудования» в объектах хоста. Я сделал это с помощью OpenBSD dhcpd, когда работал у интернет-провайдера, который имеет более простую внутреннюю структуру, чем isc-dhcpd.
Если вы не в состоянии сделать это, посмотрите на omapi (3) и omshell (1); вы должны использовать OMAPI для динамического создания объектов «класса» и «пула», чтобы реализовать предложение Zypher. Я только что проверил dhcpd.h
и class
структура имеет OMAPI_OBJECT_PREAMBLE
, так что это должно быть возможно. Помните, что документация по OMAPI может быть немного ... скудной.
Может быть, вы можете начать отсюда:
Никогда не использовал, но я думаю, что с небольшим скриптингом это может сработать.
РЕДАКТИРОВАТЬ
man omshell (1) может привести еще несколько примеров
Один из способов сделать это - назначить этих клиентов отдельной VLAN, тогда DHCP-адрес, который получают эти клиенты, автоматически будет в другом пуле.