Классы в конфиге ISC dhcpd

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Классы в конфиге ISC dhcpd

Сообщение sgfault »

Код: Выделить всё

# cat /etc/issue
Debian GNU/Linux 6.0 \n \l
# dhcpd --version
isc-dhcpd-4.1.1-P1


Допустим, есть несколько классов (в dhcpd.conf), определенных так:

Код: Выделить всё

class "wired" {
    match hardware;
}
subclass "wired"        1:00:03:0d:29:38:9a;

class "wireless" {
    match hardware;
}
subclass "wirelss"        1:00:90:4B:CE:E4:98;

class "test" {
    match if substring (option dhcp-client-identifier, 0, 4) = "test";
}

и я хочу сделать несколько пулов для клиентов из разных классов. Например, разделение на пулы будет таким:

Код: Выделить всё

wired && test = x.x.x.20 - x.x.x.29
wireless && test  = x.x.x.30 - x.x.x.39
wired && ! test = x.x.x.40 - x.x.x.59
wireless && ! test = x.x.x.60 - x.x.x.79


И вот теперь это надо переписать в allow/deny выражения dhcpd. Но, насколько я понял, два allow соответствуют объединению множеств, а не пересечению. И вот вопрос: как сделать пересечение?

ЗЫ. Единственное, решение, которое я придумал, это определять классы так

Код: Выделить всё

class "wired" {
    match hardware;
}
class "test_wired" {
    match if substring (option dhcp-client-identifier, 0, 4) = "test";
    match hardware;
}
subclass "wired"        1:00:03:0d:29:38:9a;
subclass "test_wired"        1:00:03:0d:29:38:9a;

class "wireless" {
    match hardware;
}
class "test_wireless" {
    match if substring (option dhcp-client-identifier, 0, 4) = "test";
    match hardware;
}
subclass "wirelss"        1:00:90:4B:CE:E4:98;
subclass "test_wirelss"   1:00:90:4B:CE:E4:98;

И тогда это переписывается вот так

Код: Выделить всё

pool
{
   range 20 - 29;
   allow members of "test_wired";
}
pool
{
   range 30 - 39;
   allow members of "test_wireless";
}
pool
{
   range 40 - 59
   allow members of "wired";
   deny members of "test_wired";
}
pool
{
   range 60 - 79
   allow members of "wireless";
   deny members of "test_wireless";
}

но мне не нравится этот способ, тк приходится дважды прописывать MAC. Те, фактически, для test_wired класса приходится повторять условие wired класса. А, если добавить еще один класс A, то, чтобы сделать пул для (test && wired && A) в определении класса A, придется повторить условие для классов test и wired. Ну и тд.
Спасибо сказали:
veter
Сообщения: 3
ОС: Debian, FreeBSD, Fedora

Re: Классы в конфиге ISC dhcpd

Сообщение veter »

Дружище, подскажи где взять полное описание опций конфигурационного файла для isc-dhcpd, желательно на русском. Устал по крохам вылавливать. Кое-что в http://www.bog.pp.ru/work/bootp.html нашел, но он пишет там не всё, более ранних нет, только новое. Где найти полное.

Спасибо.
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Классы в конфиге ISC dhcpd

Сообщение arkhnchul »

Losing is fun!
Спасибо сказали:
veter
Сообщения: 3
ОС: Debian, FreeBSD, Fedora

Re: Классы в конфиге ISC dhcpd

Сообщение veter »

Спасибо
Спасибо сказали:
veter
Сообщения: 3
ОС: Debian, FreeBSD, Fedora

Re: Классы в конфиге ISC dhcpd

Сообщение veter »

Интересная задачка. Я задумался. Вот такая гипотеза :

subclass "wired", "test_wired" 1:00:03:0d:29:38:9a;

т.е. можно ли занести одно значени одновременно в два класса?
Спасибо сказали: