Перейти к содержимому
Калькуляторы

DHCP option 82 и ISC DHCPD ...помогите допилить связку

Всем привет! Реализуем опцию 82 у себя в сети и застряли с ДХЦП сервером.

 

 

Итак. Когда мы конфигурируем обычный ДХЦП с привязкой ИП к МАК-адресу клиента все очень просто.

 

1. В верху конфигурации dhcpd.conf описываем все интересующие нас подсети, например:

shared-network subs_Eth1 {

deny unknown-clients;

# abonents

subnet 10.177.2.0 netmask 255.255.255.0 {

range 10.177.2.1;

option routers 10.177.2.254;

option domain-name-servers 10.0.0.128;

server-identifier 10.0.0.128;

}

}

2. Потом делаем инклуд:

include "/dhcpd/include-fixed.conf";

 

3. В этом инклуде для каждого абонента с фиксированным ИП, привязанным к маку делаем одну запись:

host host-10.177.2.2 {

hardware ethernet 00:e7:19:d0:32:00;

fixed-address 10.177.2.2;

}

 

4. Перезапускаем сервер.

 

Таким образом, получается, что мы или добавляем в инклуд нужную запись для нового клиента или же удаляем(пересоздаем инклуд) в случае удаления клиента. Т.е. оперируем с одним плоским файлом, что вполне адекватно.

 

 

--------------------------------- Проблемы с использованием опции 82 ------------------------

Хотелось бы здесь сделать точно так же, т.е. оперировать с одним плоским файлом - добавлять нужные сроки для связки client_IP, switch_MAC, switch_PORT ну или удалять ненужные(пересоздавать файл).

 

В общем-то необходимо использовать две конструкции, например:

# CLIENT 1.1.1.1

class "host-1.1.1.1-class" {

match if binary-to-ascii (16, 8, ":", suffix ( option agent.remote-id, 6)) = "f:f5:ff:ef:1:f" - это switch_MAC

and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "5"; - это switch_PORT

}

 

pool "host-1.1.1.1-pool" {

range 1.1.1.1;

allow members of "host-1.1.1.1-class";

}

 

Но! Проблема в том, что эти конструкции должны быть вписаны внутри описания подсети, т.е. правильно писать вот так:

 

subnet 1.0.0.0 netsmask 255.0.0.0 {

# CLIENT 1.1.1.1

class "host-1.1.1.1-class" {

match if binary-to-ascii (16, 8, ":", suffix ( option agent.remote-id, 6)) = "f:f5:ff:ef:1:f" - это switch_MAC

and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "5"; - это switch_PORT

}

 

pool "host-1.1.1.1-pool" {

range 1.1.1.1;

allow members of "host-1.1.1.1-class";

}

}

 

И соостветственно в этом сабнете должны быть описаны адреса гейта и ДНС для клиентов этой подсети. И все клиенты, входящие в эту подсеть, должны вписываться внутрь этой конструкции и удаляться изнутри ее. Учитвая тот факт, что подсетей много(как минимум на каждый vlan) необходимо таких вот сложенных конструкций иметь много и менять конфиг внутри каждой подсети с учетом адреса клиента. Этот процесс выглядит весьма нетривиальным. Т.е. очень не хотелось бы из-за сложности скриптов конфигурирования создавать лишние проблемы, способные привести к остановке DHCP сервера при любой ошибке в файлах конфигурации.

 

Внимание вопрос: Возможно можно как-то более просто приписывать адрес клиенту при использовании опции 82? Так что бы все прописывалось для каждого клиента последовательно в одном плоском файле, как в примере с fixed-address - где достаточно перечислить правила привязок МАК-ИП, при чем сделать это можно вне описания подсетей и неважно в какой последовательности.

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И все клиенты, входящие в эту подсеть, должны вписываться внутрь этой конструкции и удаляться изнутри ее.

не обязательно.

И еще не обязательно писать все в один конфиг. Разбивайте на несколько файлов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На разные файлы да, так и есть. Но хочется в статических файлах описать подсети, а в инклудах конфигурировать привязки ip к клиенту. Это отлично работает с host {} и прязкой ip-mac, т.к. все привязки в любом порядке описываются в инклуде. Никаких проблем.

 

Подскажите пожалуйста - как тоже самое сделать для опции 82? Как описывать привязки ip клиентов вне структуры subnet используя switch_mac&switch_port(как в примере в первом сообщенит)? Сервер говорит, что структуру pool {} нельзя описывать вне subnet. :-( Если не сложно - приведите пожалуйста пример, как это можно сделать?

 

Спасибо огромное!

Изменено пользователем telephonist

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

1. Есть статический файл, с основной конфигурацией и описанием подсетей dhcpd.conf:

---------------------------------------------- dhcpd.conf ----------

option domain-name-servers 10.0.0.2;
local-address 10.0.0.2;
log-facility local7;
authoritative;

shared-network HomeNet_Eth1 {
       subnet 10.0.0.0 netmask 255.255.255.0 {
               option routers 10.10.0.2;
       }
       subnet 10.17.0.0 netmask 255.255.255.0 {
               option routers 10.17.0.254;
       }
       include "/dhcpd/include82.conf";
}

----------------------------------

 

2. Здесь есть одна вставка include82.conf где я делаю связку данных опции 82(switch_MAC-switch_port-client_IP), пример для клиента, которому я хочу дать адрес 10.17.0.3:

------------------------------------- include82.conf -----------------

# CLIENT 10.17.0.3 PORT=2 SWITCH=0:12:df:5c:9:20
class "host-10.17.0.3-class" {
         match if binary-to-ascii (16, 8, ":", suffix ( option agent.remote-id, 6)) = "0:12:df:5c:9:20"
               and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) =  "2";
}
pool {
       range 10.17.0.3;
       allow members of "host-10.17.0.3-class";
}

----------------------------------------------------------------------

 

Соответственно мне достаточно из скриптов и БД генерировать только файл include82.conf, добавляя/удаляя записи class&pool для всех моих клиентов. Насколько это правильная конструкция?

 

Спасибо еще раз!

Изменено пользователем telephonist

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите пожалуйста - правильная ли конфигурация? Наблюдается странное поведение на разных свичах. На алькателе вроде все хорошо, а вот на длинке линукс отлично получает адрес, а вин2008(и домашний рутер длинк-300) не хочет... и еще вот такое сообщение появляется в логе

DHCPREQUEST for 10.17.0.39 (10.0.0.2) from 00:26:18:ea:ec:b7 via 10.17.0.254: lease 10.17.0.39 unavailable.

 

Время жизни лиза ставил в 1 минуту, вин2008 все равно не хотел получать адрес спустя даже несколько минут.

 

Может еще какое волшебное слово нужно где-то сказать?

 

Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

option agent.remote-id -не вижу смысла использовать -это надо еще и базу мак адресов анализировать и переписывать конфиг если свич поменяли

 

проще опираться на IP свича с которого пришел запрос

Вот тут описана конструкция и пример. http://biparasite.ru/?p=130

 

class "192.168.10.5:p1" {
match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "1"
and binary-to-ascii(10, 8, ".", packet(24, 4)) = "192.168.10.5";
}

pool {
range 10.0.0.10;
allow members of "192.168.10.5:p1";

}

 

В остальном- все похоже на правду, но есть особенности:

1-Если выдавать по 1 адресу на порт -то при попытке получить адрес на другой машине(с другим мак -адресом) до истечения lease time -адрес получить не получится -сервер напишет что no free leases - что логично.

Лечится разными способами:

можно удалять инфу из leases.conf, можно уменьшить время лизы до минимума -что некрасиво, можно юзать патч для dhcpd -ищи на этом форуме.

 

2-На длинках множаться запросы dhcp discover -потому что relay не отрабатывает как положено, броадкаст в абонентском влане дойдет до всех свичей в этом влане и все они сделают discover на сервер.

Лечится убиванием dhcp на всех портах свичей доступа с помощью ACL. Подробности на форуме длинка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо!

 

К сожалению IP свича в качестве remote_id испольовать не получается. Потому как в центре "большой" коммутатор Л3, коммутирует вланы и является релеем DHCP. В итоге к серверу DHCPD в опции 82 приходит не адрес свича доступа, а адрес центрального свича в конкретном влане, а мак приходит от свича доступа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как Вы связываете базу пользователей с адресами получаемыми по дхцп? Или монтажники делают какие то манипуляции при подключении? Передают номер порта?

Или еще как то?

Планируем переводить на дхцп все, но сеть полу умная полу тупая, и там где умные хочется использовать опцию 82. С существующими абонентами проще перевести со статики на динамику, есть таблицы соотношения порт/мак, а как быть с новыми? Кто как делает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.