Назад | Перейти на главную страницу

соответствие класса dhcpd по имени хоста или MAC-адресу

Мы запускаем DHCPD 4.1.1-P1 на сервере RHEL 6. В настоящее время у нас есть 1 класс, определенный для целей отказа. Теперь у нас есть потребность в сопоставлении классов, чтобы разрешить все устройства, соответствующие переменной, и запретить все остальное. Наша текущая конфигурация класса выглядит следующим образом, и мы совпадаем по MAC-адресу:

## Define denied

class "denied" {
match if substring (hardware,1,3) = 00:54:36;
}

И в объявлении пула мы запрещаем класс:

 pool {
            deny members of "denied";
            range 192.168.100.100 192.168.100.200;
    }

Конфигурация нашего нового класса будет следующей:

## Define denied

class "denied" {
match if substring (hardware,1,3) = 00:54:36;
}

class "allowed" {
match if substring (hardware,1,3) = 00:42:12;
)

С объявлением пула:

 pool {
            allow members of "allowed";
            deny members of "denied";
            range 192.168.100.100 192.168.100.200;
    }

Мой первый вопрос: нужен ли нам класс deny после того, как мы добавим класс allow? Насколько я понимаю, allow неявно отрицает все остальное. Кроме того, как мы могли бы сопоставить класс с нашим разрешенным классом по имени хоста, а не по MAC-адресу? В своем исследовании мне не удалось выяснить, как на самом деле будут выглядеть утверждения на примерах, которые я видел. В /var/lib/dhcp/dhcpd.leases у нас есть 2 строки возможных процентов для каждой записанной аренды.

hardware ethernet xx:xx:xx:xx:xx:xx;
client-hostname "hostname";

Я предполагаю, что если бы мы хотели сопоставить класс по имени хоста, это выглядело бы примерно так:

class "allowed" {
match if substring (client-hostname) = "hostname";
}

И объявление пула будет выглядеть так:

pool {
            allow members of "allowed";
            deny members of "denied";
            range 192.168.100.100 192.168.100.200;
    }

Итак, снова резюмируя мои 2 вопроса.

1) оператор "разрешающий член" в объявлении пула неявно отрицает все остальное, и мне больше не понадобится мой оператор отказа?

2) Каков правильный синтаксис сопоставления классов для сопоставления имени хоста?

По первому вопросу:

неявно ли отрицает все остальное оператор "allow member"?

Ответ на этот вопрос можно найти на странице руководства dhcpd.conf:

  • Если у пула есть список разрешений, то только те клиенты, которые соответствуют определенным записям в списке разрешений, будут иметь право на получение адресов из пула.
  • Если у пула есть запрещенный список, то будут иметь право только те клиенты, которые не соответствуют ни одной записи в запрещенном списке.
  • Если для пула существуют списки разрешений и запретов, то доступ будет разрешен только клиентам, которые соответствуют списку разрешений и не соответствуют списку запретов.

На второй вопрос совпадение по имени хоста

вы имеете в виду имя хоста запроса или имя хоста, настроенное на вашем dhcp-сервере?

Чтобы отреагировать на отправленное имя хоста, оно должно быть просто

match if (option host-name = “foobar”);

или для частичного:

match if substring(option host-name,0,2) = “foo”;

Соответствие опции конфигурации не работает