Jump to content

Recommended Posts

Posted

Подскажите, как определить класс для dhpcd, основываясь на relay agent ip address. Опция 82 в данном случае не используется, надо просто определить класс, основываясь на IP агента, переславшего запрос.

Posted

Честно говоря, трудно придумать зачем это нужно, но если очень хочется, то это делается так:

 

class relayip1

{

match if (packet(24,4)) = 0a:00:00:01);

}

 

где 0a:00:00:01 это 10.0.0.1 . Можно в принципе и более читабельно сделать, но это уже не суть вопроса.

 

P.S. откуда всё-таки такая задача берётся?

 

Posted (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 by xcme
Posted

Раз все молчат, значит правильно. :)

 

Можно в принципе и более читабельно сделать, но это уже не суть вопроса.

Более читабельно, это вот так?

class "10-0-0-1" { match if binary-to-ascii(10,8,".",packet(24,4))="10.0.0.1"; }

 

Спасибо за подсказку, все работает!

Posted

Правильно здесь будет определить класс типа

 

класс управление
{
  в опции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 адреса из сеток управления будут раздаваться только самим свитчам.

Posted

Без обид, но почему бы Вам не почитать man самому?

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

Posted

В маны/гуглы тыкать мы все умеем. Раз спрашиваю, значит не разобрался сам, ну тупой я, да. :)

 

Не заморачивайтесь. Сейчас все работает, благодаря вашей предыдущей подсказке. Так что за помощь спасибо, в любом случае.

Posted

Перед тем как отправить к ману, я сказал что надо там смотреть. Ради интереса потратил 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.

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.