telephonist Опубликовано 14 апреля, 2011 · Жалоба Всем привет! Реализуем опцию 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 - где достаточно перечислить правила привязок МАК-ИП, при чем сделать это можно вне описания подсетей и неважно в какой последовательности. Спасибо! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Negator Опубликовано 14 апреля, 2011 · Жалоба И все клиенты, входящие в эту подсеть, должны вписываться внутрь этой конструкции и удаляться изнутри ее. не обязательно. И еще не обязательно писать все в один конфиг. Разбивайте на несколько файлов Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
telephonist Опубликовано 14 апреля, 2011 (изменено) · Жалоба На разные файлы да, так и есть. Но хочется в статических файлах описать подсети, а в инклудах конфигурировать привязки ip к клиенту. Это отлично работает с host {} и прязкой ip-mac, т.к. все привязки в любом порядке описываются в инклуде. Никаких проблем. Подскажите пожалуйста - как тоже самое сделать для опции 82? Как описывать привязки ip клиентов вне структуры subnet используя switch_mac&switch_port(как в примере в первом сообщенит)? Сервер говорит, что структуру pool {} нельзя описывать вне subnet. :-( Если не сложно - приведите пожалуйста пример, как это можно сделать? Спасибо огромное! Изменено 14 апреля, 2011 пользователем telephonist Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
telephonist Опубликовано 14 апреля, 2011 (изменено) · Жалоба Коллеги, я надеюсь, что разобрался немного. Подскажите пожалуйста, правильно ли. 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 для всех моих клиентов. Насколько это правильная конструкция? Спасибо еще раз! Изменено 14 апреля, 2011 пользователем telephonist Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
telephonist Опубликовано 16 апреля, 2011 · Жалоба Подскажите пожалуйста - правильная ли конфигурация? Наблюдается странное поведение на разных свичах. На алькателе вроде все хорошо, а вот на длинке линукс отлично получает адрес, а вин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 все равно не хотел получать адрес спустя даже несколько минут. Может еще какое волшебное слово нужно где-то сказать? Заранее спасибо! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Negator Опубликовано 16 апреля, 2011 · Жалоба 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. Подробности на форуме длинка. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
telephonist Опубликовано 16 апреля, 2011 · Жалоба Спасибо! К сожалению IP свича в качестве remote_id испольовать не получается. Потому как в центре "большой" коммутатор Л3, коммутирует вланы и является релеем DHCP. В итоге к серверу DHCPD в опции 82 приходит не адрес свича доступа, а адрес центрального свича в конкретном влане, а мак приходит от свича доступа. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 21 апреля, 2011 · Жалоба А как Вы связываете базу пользователей с адресами получаемыми по дхцп? Или монтажники делают какие то манипуляции при подключении? Передают номер порта? Или еще как то? Планируем переводить на дхцп все, но сеть полу умная полу тупая, и там где умные хочется использовать опцию 82. С существующими абонентами проще перевести со статики на динамику, есть таблицы соотношения порт/мак, а как быть с новыми? Кто как делает? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...