Cramac Опубликовано 7 августа, 2012 (изменено) · Жалоба спасибо, попробую визуально понять о чем речь в скрипте :) П.С. правильно ли я понял: в sub db_get_routing идет выбор из базы $sth = $_[0]->prepare(" SELECT `destination`, `mask`, `gateway` FROM `subnets_routes` WHERE `subnet_id` = '$_[2]' LIMIT 30" ); и потом формуриет ответ if (defined($optClasslessRoutesCode)) { $opt_classless_routes_data .= mk_classless_routes_bin_mask(@$row[0], @$row[1], @$row[2]); т.е. на моем примере что должно быть в таблице? Изменено 7 августа, 2012 пользователем Cramac Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 28 августа, 2012 · Жалоба Собрал тестовый стенд для теста сервера. Есть клиент - ES3528M - ES4612 - DHCP на 4612 поднят релей, который со всем вланов релеит запросы на сервер. На сервере (используя сервер от Abram) в лог попадает запись что запрос пришел с ИП и мака маршрутизатора. Сейчас isc-dhcp обрабатывает опцию 82 и по маку свитча и порту выдает ИП. а тут как сделать? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 29 августа, 2012 · Жалоба Нужно написать запросы к базе и разбор ответа/запихивание ответа от базы в дхцп ответ. Обвязка вся есть, просто состыковать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 29 августа, 2012 · Жалоба Cramac, Дык используй DHCP Relay прямо на свитче, зачем на маршрутизаторе? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 29 августа, 2012 · Жалоба не пробовал :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 1 сентября, 2012 (изменено) · Жалоба помогите разобратся, что то у меня есть только дисковер от клиента на сервер и от сервера(по сниферу от релея) оффер и все на этом. dhcp.txt Изменено 1 сентября, 2012 пользователем Cramac Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 2 сентября, 2012 · Жалоба Вроде так и должно быть, дальше клиент должен слать запрос на аренду. Только обратите внимание: IP: 10.10.10.254 (0:12:cf:39:97:40) > 10.10.10.50 (0:d:61:35:2a:72) OP: 1 (BOOTPREQUEST) .... GIADDR: 172.20.2.254 и в ответе: IP: 10.10.10.50 (0:d:61:35:2a:72) > 172.20.2.254 (0:12:cf:39:97:40) OP: 2 (BOOTPREPLY) дойдёт ли оно до релей агента... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 3 сентября, 2012 · Жалоба 10.10.10.254 (0:12:cf:39:97:40) он же 172.20.2.254 это релей (edge core ES4612) снифер на абонентском ПК видит этот оффер, но никак не реагирует. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 3 сентября, 2012 · Жалоба Тогда либо попробовать с другим релей агентом и другим клиентом, либо сдампить и там пакет, так трудно сказать почему не принимает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 3 сентября, 2012 (изменено) · Жалоба пробовал isc-dhcp работает через релей... dhcp_client.pcap.txt может в базе что не так? dhcp.sql.txt Изменено 3 сентября, 2012 пользователем Cramac Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 4 сентября, 2012 · Жалоба Если не забуду - вечером скормплю дамп софтине и посмотрю что там. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 5 сентября, 2012 · Жалоба Итак. Это из пкап дампа: Started Build date: Sep 6 2012 00:54:59 Rozhuk Ivan, 2011 [00:55:03] DisconnectSocket: all sockets closed [00:55:13] Received 300 bytes from 0.0.0.0:68 -> 255.255.255.255:67 DHCP head: op = 1 (1) - BOOTREQUEST htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 0 (0) xid = ff5f6da0 (4284444064) secs = 0 (0) flags = 8000 (32768) [b=1, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 0.0.0.0 chaddr = 0016361155bb sname = file = 053 [001]: DHCP message type: 01 (001) - DISCOVER 116 [001]: Auto Configure: enabled 061 [007]: DHCP Client identifier: 010016361155bb 012 [015]: Host name: microsof-3380a5 060 [008]: Vendor class identifier: MSFT 5.0 055 [011]: Parameter Request List: 01 (001) - Subnet mask 0f (015) - Domain Name 03 (003) - Routers 06 (006) - DNS servers 2c (044) - NetBIOS name servers 2e (046) - NetBIOS node type 2f (047) - NetBIOS scope 1f (031) - Perform router discovery 21 (033) - Static route (dst host/router) f9 (249) - MSFT - Classless route 2b (043) - Vendor specific info 043 [002]: Vendor specific info: dc00 220 [000]: NAP-SoH 255 [148]: END [00:55:19] Received 300 bytes from 172.20.2.254:67 -> 255.255.255.255:68 DHCP head: op = 2 (2) - BOOTREPLY htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 0 (0) xid = ff5f6da0 (4284444064) secs = 0 (0) flags = 8000 (32768) [b=1, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 172.20.2.254 chaddr = 0016361155bb sname = file = 053 [001]: DHCP message type: 02 (002) - OFFER 054 [004]: DHCP Server identifier: 10.10.10.50 116 [001]: Auto Configure: disabled 255 [000]: END 000 [000]: PAD [47] [00:55:27] Received 300 bytes from 0.0.0.0:68 -> 255.255.255.255:67 DHCP head: op = 1 (1) - BOOTREQUEST htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 0 (0) xid = ff5f6da0 (4284444064) secs = 300 (768) flags = 8000 (32768) [b=1, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 0.0.0.0 chaddr = 0016361155bb sname = file = 053 [001]: DHCP message type: 01 (001) - DISCOVER 116 [001]: Auto Configure: enabled 061 [007]: DHCP Client identifier: 010016361155bb 012 [015]: Host name: microsof-3380a5 060 [008]: Vendor class identifier: MSFT 5.0 055 [011]: Parameter Request List: 01 (001) - Subnet mask 0f (015) - Domain Name 03 (003) - Routers 06 (006) - DNS servers 2c (044) - NetBIOS name servers 2e (046) - NetBIOS node type 2f (047) - NetBIOS scope 1f (031) - Perform router discovery 21 (033) - Static route (dst host/router) f9 (249) - MSFT - Classless route 2b (043) - Vendor specific info 043 [002]: Vendor specific info: dc00 220 [000]: NAP-SoH 255 [152]: END [00:55:28] Received 300 bytes from 172.20.2.254:67 -> 255.255.255.255:68 DHCP head: op = 2 (2) - BOOTREPLY htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 0 (0) xid = ff5f6da0 (4284444064) secs = 300 (768) flags = 8000 (32768) [b=1, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 172.20.2.254 chaddr = 0016361155bb sname = file = 053 [001]: DHCP message type: 02 (002) - OFFER 054 [004]: DHCP Server identifier: 10.10.10.50 116 [001]: Auto Configure: disabled 255 [000]: END 000 [000]: PAD [47] [00:55:29] Received 300 bytes from 0.0.0.0:68 -> 255.255.255.255:67 DHCP head: op = 1 (1) - BOOTREQUEST htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 0 (0) xid = ff5f6da0 (4284444064) secs = b00 (2816) flags = 8000 (32768) [b=1, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 0.0.0.0 chaddr = 0016361155bb sname = file = 053 [001]: DHCP message type: 01 (001) - DISCOVER 116 [001]: Auto Configure: enabled 061 [007]: DHCP Client identifier: 010016361155bb 012 [015]: Host name: microsof-3380a5 060 [008]: Vendor class identifier: MSFT 5.0 055 [011]: Parameter Request List: 01 (001) - Subnet mask 0f (015) - Domain Name 03 (003) - Routers 06 (006) - DNS servers 2c (044) - NetBIOS name servers 2e (046) - NetBIOS node type 2f (047) - NetBIOS scope 1f (031) - Perform router discovery 21 (033) - Static route (dst host/router) f9 (249) - MSFT - Classless route 2b (043) - Vendor specific info 043 [002]: Vendor specific info: dc00 220 [000]: NAP-SoH 255 [160]: END [00:55:30] Received 300 bytes from 172.20.2.254:67 -> 255.255.255.255:68 DHCP head: op = 2 (2) - BOOTREPLY htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 0 (0) xid = ff5f6da0 (4284444064) secs = b00 (2816) flags = 8000 (32768) [b=1, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 172.20.2.254 chaddr = 0016361155bb sname = file = 053 [001]: DHCP message type: 02 (002) - OFFER 054 [004]: DHCP Server identifier: 10.10.10.50 116 [001]: Auto Configure: disabled 255 [000]: END 000 [000]: PAD [47] Я просмотрел это в первом дампе, на стороне сервера - в оффер нужно давать настройки, и IP тоже!!!!! Офер на то и оффер, чтобы клиент собрал со всех дхцп серверов варианты и выбрал что больше нравится, и уже потом он посылает понравившемуся серверу запрос на аренду того что ему предложили. У вас сервер клиенту отдаёт 0.0.0.0 адрес, не выдаёт маску и вообще ничего не отдаёт, только выключает автоконфиг на клиенте (запрещает ему брать адреса из 169.254...). Посмотрите ещё раз в сервер и хотя бы руками для тестов пропишите адрес и маску на отдачу, раз из базы почему то не берёт. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 5 сентября, 2012 (изменено) · Жалоба хм, странно конечно, попробую, спасибо за анализ :) Изменено 5 сентября, 2012 пользователем Cramac Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 6 сентября, 2012 (изменено) · Жалоба Спасибо Ivan_83. Дело было в МАКах в базе, из за этого ничего не выдавалось. П.С. Нормально отработало на стенде с релеем на маршрутизаторе (accton ES4612) Изменено 6 сентября, 2012 пользователем Cramac Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 7 сентября, 2012 (изменено) · Жалоба О знающие люди, подскажите как оживить функцию db_get_routing при формировании ответа клиенту на запрос. В db_get_requested_data есть такой вызов db_get_routing($_[0], $dhcpreqparams, $result->{subnet_id}, $dhcp_opt82_vlan_id); что надо поправить в db_get_routing что бы формировалось две опции 121 и 249 если для указанного влана присутствуют в базе маршруты? сама функция: sub db_get_routing { #my $dbh = $_[0]; #my $dhcpreqparams = $_[1]; #my $subnet_id = $_[2]; #my $dhcpresp = $_[3]; my $sth; my $opt33Enbled; my $optClasslessRoutesCode; # do not add routes if not requested if (defined($_[1]) == 0) { return(); } $opt33Enbled = index($_[1], DHO_STATIC_ROUTES()); if ($opt33Enbled == -1) { $opt33Enbled = undef; } $optClasslessRoutesCode = index($_[1], 121); if ($optClasslessRoutesCode == -1) { $optClasslessRoutesCode = index($_[1], 249); if ($optClasslessRoutesCode == -1) { $optClasslessRoutesCode = undef; }else{ $optClasslessRoutesCode = 249; } }else{ $optClasslessRoutesCode = 121; } if (defined($opt33Enbled) == 0 && defined($optClasslessRoutesCode) == 0) { # nothink to do, return return(); } $sth = $_[0]->prepare(" SELECT `destination`, `mask`, `gateway` FROM `subnets_routes` WHERE `subnet_id` = '$_[2]' LIMIT 30" ); $sth->execute(); if ($sth->rows()) { my $ref; my $row; my $opt33_data = undef;# routes to single hosts my $opt_classless_routes_data = undef;# routes to nets $ref = $sth->fetchall_arrayref; foreach $row ( @{$ref} ) { if (defined($opt33Enbled) && @$row[1] eq '255.255.255.255') { # pack dst $opt33_data .= pack('CCCC', split(/\./, @$row[0])); # pack gw $opt33_data .= pack('CCCC', split(/\./, @$row[2])); } if (defined($optClasslessRoutesCode)) { $opt_classless_routes_data .= mk_classless_routes_bin_mask(@$row[0], @$row[1], @$row[2]); } } if (defined($opt33_data)) {# add option $_[3]->addOptionRaw(DHO_STATIC_ROUTES(), $opt33_data); } if (defined($opt_classless_routes_data)) {# add option $_[3]->addOptionRaw($optClasslessRoutesCode, $opt_classless_routes_data); } } $sth->finish(); } Изменено 7 сентября, 2012 пользователем Cramac Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bomberman Опубликовано 14 сентября, 2012 · Жалоба Новые версии данной разработки имеются? :) Автор не забросли свою, на мой взгляд, замечательную идею? :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 14 сентября, 2012 · Жалоба если багов нет, нет и новых версий :) Тестил, вроде все работает как надо и задумалось... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bomberman Опубликовано 14 сентября, 2012 · Жалоба Ну хотелось бы ещё видеть работу демона без релея. Если кто допилил, поделитесь пжлст. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 14 сентября, 2012 · Жалоба Чтобы работало без релея нужно через bpf/pcap интерфейс работать, самому формировать полностью эзернет+IP+юдп пакеты и разбирать тоже. В принципе то не сложно переписать. У нас ISP и всё равно через релей летят, а допиливания требует именно логика работы с базой, которая не выкладывалась ибо специфично для наших нужд. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 18 сентября, 2012 · Жалоба Для статического IP в принципе понятно как прикрутить, ничего особо заумного там нет... Для общего развития: как с динамикой быть? Нужно вести таблицу лиз ведь? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 19 сентября, 2012 · Жалоба Да, именно так. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 22 сентября, 2012 · Жалоба Вроде как прилепил к абиллсу, статика без опции 82 (пока большего не требуется, хотя опцию 82 в коде предусмотрел но не тестировал), и вроде даже работает оно на стенде. Только несколько перепилил собссно логику демона/журналирование/прочее сопутствующее и подправил код, + основной поток сделал watcher'ом за worker потоками, чтобы пересоздавал потоки при их смерти. Приеду с отпуска - буду пытаться внедрять... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 19 октября, 2012 · Жалоба Запустил таки, пока вроде полет нормальный. Из замеченого - некоторые клиенты отваливаются либо шлют часто запросы (что-то им не нравится, в частности - один с дир-300 роутером, судя по имени хоста; хотя может роутер протаращило - он и в логи isc dhcpd гадил так же). Желающие могут потестировать у себя. abills-perl-dhcp.tar.gz Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
KaDaBRa Опубликовано 20 ноября, 2012 · Жалоба Запустил таки, пока вроде полет нормальный. Из замеченого - некоторые клиенты отваливаются либо шлют часто запросы (что-то им не нравится, в частности - один с дир-300 роутером, судя по имени хоста; хотя может роутер протаращило - он и в логи isc dhcpd гадил так же). Желающие могут потестировать у себя. Было бы чудестно, если бы вы выложили еще и структуру базы и веб-морду :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bomberman Опубликовано 21 ноября, 2012 (изменено) · Жалоба KaDaBRa Я так пологаю Web-интерфейс и структура берутся из abills. NiTr0 Какая нагрузка на данный момнет у вас на нём? Сколько абонентов? Сколько в среднем запросов к серверу? Где релеете? Спасибо посмотрим. Может пригодится. :) Изменено 21 ноября, 2012 пользователем bomberman Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...