Jump to content

Recommended Posts

Posted

В крации, в центре стоит в ядре простенький свич, но к нему подключенны как беспроводные клиенты, так и проводные.

Через него проходят пакеты от коммутаторов доступа на конечных узлах с options 82, так и пакеты без options 82.

Хочу сейчас все пакеты которые приходят без options 82, навешать 82 опцию, чтобы dhcpd серверу было проще жить, но и в силу определенных обстоятельств, из-за необходимых измнений в дальнейшем.

 

На сервере нагенерил тучу конфигов, но сделал там классы с чисто распознование маков, сделал скриптец который выгружает все это из netup, рассовывает по конфигам и подключает в основной конфигурационный файл.

 

Теперь вопрос, а правильно ли сделал на центральном свиче:

 

Убрал, чтобы не позориться#show dhcp_relay
Command: show dhcp_relay

DHCP/BOOTP Relay Status         : Enabled
DHCP/BOOTP Hops Count Limit     : 4
DHCP/BOOTP Relay Time Threshold : 0
DHCP Relay Agent Information Option 82 State     : Enabled
DHCP Relay Agent Information Option 82 Check     : Disabled
DHCP Relay Agent Information Option 82 Policy    : Keep
DHCP Relay Agent Information Option 82 Remote ID : 00-22-B0-50-34-9C

Interface     Server 1         Server 2         Server 3         Server 4
------------  ---------------  ---------------  ---------------  --------------
System        DHCP_Server

Posted

Да, при таком раскладе работает.

Но не полностью, проблема и почему так не могу понять.

 

class "MAC-00:27:22:42:c0:0c" { match if binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) = "0:27:22:42:c0:c"; }

 

сначала было:

00:27:22:42:c0:0c

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

Posted
но когда посмотрел внимательно, то увидел что мак клиента с обрезаным нулем в начале и перед последней буквой, почему так делает система и можно ли повлиять чтобы она не резала?

 

Потому что 0xc = 0x0c = 0x000000000c

 

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

 

"%x:%x:%x:%x:%x:%x" должно быть заменено на "%02x:%02x:%02x:%02x:%02x:%02x", если я правильно помню форматирование.

 

В вашем случае, я бы начал с чтения документации про binary-to-ascii функцию, возможно глянул бы в исходник.

 

 

Posted (edited)

Во первых что за свитчь у вас в ядре, если L3 то работать будет, и релеить нужно, либо по вланам Vlan ID, либо по IP (если L3) свитчь, либо по макам L2 свитчей, почитайте внимательно описание remote-id и circuid-id в конфиге dhcp, а вообще примеров много, особенно на форуме d-link, у нас например в ядре L3, dhcp_relay работает по vlan_id подсетей которые нужно маршрутить.

Edited by alexaaa
Posted (edited)

Если оно, то кажись вот так описывают?

./common/print.c: log_debug ("chaddr = %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",

Вот так выглядеть должен кусок конфига

 

if exists agent.circuit-id

{

log(info, concat("Lease"

," IP ", binary-to-ascii(10, 8, ".", leased-address)

," MAC ", binary-to-ascii(16, 8, ":", substring(hardware, 1, 6))

," port ", binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2))

," VLAN ", binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2))

," switch ", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 20))

)

);

}

subnet 20.44.0.0 netmask 255.255.248.0 {

}

subnet 20.44.16.0 netmask 255.255.248.0 {

class "vlan1777"

{

match if ( binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2)) = "1777");

}

pool {

range 20.44.16.1 20.44.23.254;

option routers 20.44.16.1;

allow members of "vlan1777";

}

}

 

а вот детское пособие http://biparasite.ru/?p=130

Edited by alexaaa
Posted

alexaaa, спасибо, но, я же нормально написал, сеть работает, довольно большая уже и там все нормально.

есть просто абоны которые приходят с беспроводных точек в свич, хоть в центре хоть где и нужно временное решение с использованием 82 опции пока каждый абон не переведен в свой vlan.

по этому нужна связка как раз switch+mac, остальные связки в силу сложившихся событий не интересны.

 

благодаря Ivan_83, проблема ясна, почему нельзя работать полноценно с маком.

теперь стоит оптимизационный вопрос, по формирования класов на основе маков клиентов.

понятно что обрезается первый ноль, понятно что обрезается ноль если попадается выражение 0c, теперь интересно что еще обрезается пока не наступил на очередные грабли.

Posted

alexaaa, спасибо, но, я же нормально написал, сеть работает, довольно большая уже и там все нормально.

есть просто абоны которые приходят с беспроводных точек в свич, хоть в центре хоть где и нужно временное решение с использованием 82 опции пока каждый абон не переведен в свой vlan.

по этому нужна связка как раз switch+mac, остальные связки в силу сложившихся событий не интересны.

 

благодаря Ivan_83, проблема ясна, почему нельзя работать полноценно с маком.

теперь стоит оптимизационный вопрос, по формирования класов на основе маков клиентов.

понятно что обрезается первый ноль, понятно что обрезается ноль если попадается выражение 0c, теперь интересно что еще обрезается пока не наступил на очередные грабли.

нет там никаких граблей и ничего не обрезается.

Posted
Если оно, то кажись вот так описывают? ./common/print.c: log_debug ("chaddr = %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",

 

Нет, оно в лог мак пишет.

 

 

 

 

class "MAC-00:27:22:42:c0:0c" { match if binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) = "0:27:22:42:c0:c";

 

Попробуйте наоборот: ascii-to-binary (если такая функция есть) для мака, и потом сравнивать с substring(hardware, 1, 6)

 

И там ноль не обрезается, он просто не дописывается.

 

Те в пакете есть 6 байт, каждый байт может быть 0x0 - 0xff, соответственно все байты меньше или равные 0xf будут без нуля впереди при преобразовании в строку, у которой шесть групп цифр.

 

 

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 и с Политикой конфиденциальности.