xcme Posted February 10, 2011 Posted February 10, 2011 Подскажите, как определить класс для dhpcd, основываясь на relay agent ip address. Опция 82 в данном случае не используется, надо просто определить класс, основываясь на IP агента, переславшего запрос. Вставить ник Quote
SokolovS Posted February 10, 2011 Posted February 10, 2011 Дак это просто subnet <network> { } Вставить ник Quote
s.lobanov Posted February 10, 2011 Posted February 10, 2011 Честно говоря, трудно придумать зачем это нужно, но если очень хочется, то это делается так: class relayip1 { match if (packet(24,4)) = 0a:00:00:01); } где 0a:00:00:01 это 10.0.0.1 . Можно в принципе и более читабельно сделать, но это уже не суть вопроса. P.S. откуда всё-таки такая задача берётся? Вставить ник Quote
xcme Posted February 11, 2011 Author Posted February 11, 2011 (edited) P.S. откуда всё-таки такая задача берётся?Хочу решить вот такую задачу:У меня работает сервер, который выдает IP адрес на основе порта. Remote_ID равен IP коммутатора. Я определяю классы вида remote_id(IP)/port и каждому классу назначается подсеть из одного адреса. То есть 1 адрес на 1 порт. Теперь решил на этом же сервере сделать выдачу IP адресов для устанавливаемых строителями коммутаторов. Вышестоящий L3, куда они их подключают, об опции 82 ничего не знает. Если же я просто объявляю подсеть на dhcp-сервере, то он сразу начинает предлагать ее всем подрят. Ну или может не всем подрят, а тем, кому не досталось адреса (например, у абонента больше 1 компа на порту). Потому подумалось, что надо выделить класс, который не будет пересекаться с абонентским классом. На основе mac'а делал - все нормально. Но так не очень удобно. Вот пришла мысль сделать класс на основе IP релей агента. То есть пришел запрос с 10.0.0.1 - это одна управляющая подсеть, там выдаем одни адреса коммутаторам. С адреса 10.0.10.1 - другая подсеть, другие адреса. И не возникнет пересечений с абонентами. Или правильнее как то по другому? Edited February 13, 2011 by xcme Вставить ник Quote
xcme Posted February 13, 2011 Author Posted February 13, 2011 Раз все молчат, значит правильно. :) Можно в принципе и более читабельно сделать, но это уже не суть вопроса. Более читабельно, это вот так? class "10-0-0-1" { match if binary-to-ascii(10,8,".",packet(24,4))="10.0.0.1"; } Спасибо за подсказку, все работает! Вставить ник Quote
s.lobanov Posted February 13, 2011 Posted February 13, 2011 Правильно здесь будет определить класс типа класс управление { в опции82 пусто; } потом наплодить сеток управления subnet 10.0.0.0 netmask 255.255.255.0 { pool { #failover peer "dhcp-partner"; #deny dynamic bootp clients; option routers 10.0.0.1; range 10.0.0.2 10.0.0.254; option subnet-mask 255.255.255.0; allow members of "управление"; } } Т.к. dhcp-запросы с абонентских портов приходят на сервер с опцией82, а запросы от самих свитчей приходят без неё, то ip адреса из сеток управления будут раздаваться только самим свитчам. Вставить ник Quote
xcme Posted February 13, 2011 Author Posted February 13, 2011 в опции82 пусто; А это как описать? Вставить ник Quote
s.lobanov Posted February 13, 2011 Posted February 13, 2011 Без обид, но почему бы Вам не почитать man самому? Если не получится, пишите ближе к середине недели, соберу стенд, посмотрю как составить такой класс. Вставить ник Quote
xcme Posted February 13, 2011 Author Posted February 13, 2011 В маны/гуглы тыкать мы все умеем. Раз спрашиваю, значит не разобрался сам, ну тупой я, да. :) Не заморачивайтесь. Сейчас все работает, благодаря вашей предыдущей подсказке. Так что за помощь спасибо, в любом случае. Вставить ник Quote
s.lobanov Posted February 13, 2011 Posted February 13, 2011 Перед тем как отправить к ману, я сказал что надо там смотреть. Ради интереса потратил 5 минут и нашёл там фичу "exists" (http://linux.die.net/man/5/dhcp-eval ) : exists option-name The exists expression returns true if the specified option exists in the incoming DHCP packet being processed. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.