ivan999 Posted February 6, 2011 афтору написал, пока нет ответа. Напишите - в чем проявляются побочные эффекты? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ivan999 Posted February 7, 2011 афтору написал, пока нет ответа.Напишите - в чем проявляются побочные эффекты? Аффтар ответил - скинул патченые исходники. Работает даже в сети Docsis ( кабельные модемы, которые работают через сеть кабельного ТВ. Там есть хитрая заморочка с опцией 82 - специально придуманная для docsis. Есть хитрожопый параметр allow leasequery (dhcpleasequery)) В сети Ethernet Тоже пашет. _____ Пока тока 5 минут прошло : ) Будем сореть, как дальше будет.... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 7, 2011 Ничего сложного там нет, в дхцп. Для доксиса вроде несколько субоций в опции 82 выделено. // RFC 3046 DHCP Relay Agent Information Option (sub opt 1-2) // RFC 3256 The DOCSIS (Data-Over-Cable Service Interface Specifications) Device Class DHCP (Dynamic Host Configuration Protocol) Relay Agent Information Sub-option (add subopt 4 to RFC 3046) // RFC 3527 Link Selection sub-option (add subopt 5 to RFC 3046) // RFC 3993 Subscriber-ID Suboption (add subopt 6 to RFC 3046) // RFC 4014 RADIUS Attributes Suboption (add subopt 7 to RFC 3046) // RFC 4030 Authentication Suboption (add subopt 8 to RFC 3046) // RFC 4243 Vendor-Specific Relay Suboption (add subopt 9 to RFC 3046) // RFC 5010 Relay Agent Flags Suboption (add subopt 10 to RFC 3046) // RFC 5107 Server ID Override Suboption (add subopt 11 to RFC 3046) Вам какая интересна? Могу добавить в утилиту: http://www.netlab.linkpc.net/download/tmp/DHCPTool.exe пока только ловит и декодирует все опции стандартных типов и субопции тоже жуёт. На днях хочу добавить декодирование для маршрутов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ivan999 Posted February 7, 2011 У меня все работает ок уже 3 года. Опции я разбираю утилитой dhcpdump Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 7, 2011 В dhcpdump всё очень скромно, в сравнении :) dhcpdump не показывает: - когда у параметра ответ не верной длинны: те должно быть 4 байта число, а сервер выдал 1 байт - dhcpdump перевирает флаги дхцп: вместо 8000 показывает хх80 - хотя возможно у меня под фряхой порт собран с каким нибудь выравниванием не тем - dhcpdump не знает новых опций и кое чего со старых - dhcpdump не разбирает субопции вендора (43 которых код, там бывает куча субопций) - у меня dhcpdump не декодирует ремонтеИД в опции 82 - опять же может косяк адаптации порта Зато dhcpdump показывает аппаратные адреса, а моя прога такого не может. Откатаю код под виндой - можно будет портировать, взяв за основу работы с сетью как раз dhcpdump. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 7, 2011 Пример работы, пакеты зеркалил сам сервер на релей, а релей на программу, потому везде: "172.16.0.254:67 -> 172.16.0.3:67" [21:37:56] Received 548 bytes from 172.16.0.254:67 -> 172.16.0.3:67 DHCP head: op = 1 (1) - BOOTREQUEST htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 1 (1) xid = 56be006b (1455292523) 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 = 10.1.4.249 chaddr = 00265a2dfe0b sname = file = 053 - DHCP message type: 01 (001) - DISCOVER 061 - DHCP Client identifier: 0100265a2dfe0b 012 - Host name: DIR-300 055 - Parameter Request List: <list below> 01 (001) - Subnet mask 03 (003) - Routers 06 (006) - DNS servers 0f (015) - Domain Name 2c (044) - NetBIOS name servers 2e (046) - NetBIOS node type 2f (047) - NetBIOS scope <end list> 082 - Relay Agent Information: <sub options list below> 001 - Circuit ID: <sub options list below> 000 - VLAN(xx)/Module(x)/Port(x): 0004000d <end list> 002 - Remote ID: <sub options list below> 000 - MAC address: 001e58a0dc93 <end list> <end list> 255 - END 000 - PAD [257] [21:31:47] Received 320 bytes from 172.16.0.254:67 -> 172.16.0.3:67 DHCP head: op = 1 (1) - BOOTREQUEST htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 1 (1) xid = 5b0cc216 (1527562774) secs = 0 (0) flags = 0 (0) [B=0, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 10.1.4.80 chaddr = 001fc66ce47f sname = file = 053 - DHCP message type: 03 (003) - REQUEST 061 - DHCP Client identifier: 01001fc66ce47f 050 - Request IP address: 10.1.4.166 054 - DHCP Server identifier: 10.1.4.87 012 - Host name: eeepc 060 - Vendor class identifier: MSFT 5.0 055 - Parameter Request List: <list below> 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 f9 (249) - MSFT - Classless route 2b (043) - Vendor specific info <end list> 043 - Vendor specific info: <sub options list below> 220 - NAP-SoH: 00 <end list> 082 - Relay Agent Information: <sub options list below> 001 - Circuit ID: <sub options list below> 000 - VLAN(xx)/Module(x)/Port(x): 00010008 <end list> 002 - Remote ID: <sub options list below> 000 - MAC address: 001562c63d80 <end list> <end list> 255 - END [21:31:47] Received 313 bytes from 172.16.0.254:67 DHCP head: op = 2 (2) - BOOTREPLY htype = 1 (1) - Ethernet (10Mb) hlen = 6 (6) hops = 1 (1) xid = 5b0cc216 (1527562774) secs = 0 (0) flags = 0 (0) [B=0, MBZ=0] ciaddr = 0.0.0.0 yiaddr = 10.1.4.166 siaddr = 0.0.0.0 giaddr = 10.1.4.80 chaddr = 001fc66ce47f sname = file = 053 - DHCP message type: 05 (005) - ACK 054 - DHCP Server identifier: 10.1.4.87 051 - IP address lease time: 180 058 - Renew time (T1): 600 059 - Rebind time (T2): 900 001 - Subnet mask: 255.255.255.0 003 - Routers: <list below> 10.1.4.87 <end list> 006 - DNS servers: <list below> 8.8.8.8 195.46.116.1 <end list> 116 - Auto Configure: disabled 082 - Relay Agent Information: <sub options list below> 001 - Circuit ID: <sub options list below> 000 - VLAN(xx)/Module(x)/Port(x): 00010008 <end list> 002 - Remote ID: <sub options list below> 000 - MAC address: 001562c63d80 <end list> <end list> 255 - END Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 8, 2011 а как вы генерируете конфиг для дхцп сервера, подскажите идею... а то у нас сеть на половину управляемая, думаю как генерить чтоб не отключить всех... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
true.ru Posted February 8, 2011 (edited) в своем случае часть конфига для dhcp сервера, где расписаны классы и ip, делал таким образом. думаю, что сможете адаптировать под себя. #!/bin/bash d=2 for mac in 0:19:5b:6b:fa:53 0:19:5b:6b:fa:54 0:19:5b:6b:fa:55; do for n in $(seq 1 24) do echo 'class "'$mac'_'$n'" {match if (binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1)) ="'$n'") and' echo ' (binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6)) = "'$mac'");' echo ' }' echo ' pool {range xxx.xxx.xxx.'$d'; allow members of "'$mac'_'$n'"; }' if [ $a -ge 254 ]; then break 2 fi let "a=$a+1" done done когда надо учитывать изменение третьего октета: #!/bin/bash d=240 c=207 for mac in 0:17:9a:5:39:14 0:17:9a:5:7:4e; do for n in $(seq 1 24) do if [ $d -eq 255 ]; then let "c=$c+1" if [ $c -gt 207 ]; then break 2 fi let "d=-1" fi echo 'class "'$mac'_'$n'" {match if (binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1)) ="'$n'") and' echo ' (binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6)) = "'$mac'");' echo ' }' echo ' pool {range ххх.ххх.'$c'.'$d'; allow members of "'$mac'_'$n'"; }' let "d=$d+1" done done Edited February 8, 2011 by true.ru Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
xcme Posted February 13, 2011 Расскажите в чем суть упоминаемого выше патча и зачем он нужен? Проблему перетыкальщиков решил перезапуском сервера с очищением аренд раз в 5 минут. Время аренды ставлю большое, чтобы не долбали сервер запросами. Перезапуск так и так нужен, чтобы применить новый конфиг. В принципе, можно его хоть каждую минуту делать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
StSphinx Posted February 14, 2011 Расскажите в чем суть упоминаемого выше патча и зачем он нужен? Проблему перетыкальщиков решил перезапуском сервера с очищением аренд раз в 5 минут. Время аренды ставлю большое, чтобы не долбали сервер запросами. Перезапуск так и так нужен, чтобы применить новый конфиг. В принципе, можно его хоть каждую минуту делать. Суть патча в том, что при выдаче аренды не учитывается MAC-адрес станции которая запрашивает аренду, а только Option 82. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 23, 2011 и еще не в тему вопрос, а как Вы отслеживаете клиентов кто к какому порту подключен при раздаче адресов по опции 82? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Gunner Posted February 23, 2011 и еще не в тему вопрос, а как Вы отслеживаете клиентов кто к какому порту подключен при раздаче адресов по опции 82? ЭЭЭ что ? опт 82 возвращает порт в который включен клиент + ип мак или еще что-нибудь от коммутатора . Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 23, 2011 сгенерив конфиг дхцп, мы знаем какой ип на каком порту на каком свитче, а как узнать потом какой клиент получил этот ип? если только из биллинга брать когда подключится по впн... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted February 23, 2011 (edited) Cramac Записывать опцию82(и remote-id и circuit-id) в биллинг. Кто(включенец или девочки в офисе) и когда(до или после физического включения) это будет делать зависит от того как у вас организованы бизнес-процессы. В любом случае, у вас должно быть где-то(биллинг/ тех.учёт/ конфиг dhcp-сервера) взаимнооднозначное соответствие между абонентом(а точнее, его идентификатором) и портом коммутатора. Если у вас такой информации нет, то как вы восстанавливаете лямки, когда охотники за металлом их срежут? И пожалуй самое интересное, зачем вам вообще нужна option82, если у вас впн? Edited February 23, 2011 by s.lobanov Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 24, 2011 (edited) Хочется уйти от впн. сейчас у нас ип выдаются статически, а адреса выдаются при генерации договора, но вот номер порта/свитча нигде пока не учитывается. Edited February 24, 2011 by Cramac Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
(= dd =) Posted March 11, 2011 Суть патча в том, что при выдаче аренды не учитывается MAC-адрес станции которая запрашивает аренду, а только Option 82. Cуть патча в том, что я описывал в сопроводительном письме к оному. К маку имеет отдаленное и очень условное отношение. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LMik Posted May 16, 2011 Патч пашет. Спасибо разработчику. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
kt Posted May 19, 2011 поделитесь патчиком плиз Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Negator Posted May 19, 2011 дык напиши автору патча. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Makariy Posted July 7, 2011 поделитесь патчиком плз на makariy11<сабака>gmail.com ато автор молчит....а очень хочется Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
borcat Posted July 7, 2011 и правда - поделителсь плз - borcat(a)gmail.com Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
mravenger Posted July 25, 2011 кто бы и со мной поделился ? Действительно (=dd=) в подполье ушел :( vxbs[a]rambler.ru Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Negator Posted July 25, 2011 сгенерив конфиг дхцп, мы знаем какой ип на каком порту на каком свитче, а как узнать потом какой клиент получил этот ип? если только из биллинга брать когда подключится по впн... А проблема на самом деле серьезная. Обьясню: Украли у нас свич с чердака, отрезали все подписанные квартиры, ну или просто порезали все провода на чердаке. Поставили мы новый свич, восстановили все. А дальше? Кого в какой порт пихать? В итоге Васю включим в порт Пети -он получит адрес Пети и будет сидеть на его тарифе и т.д. Адреса получат все, а вот кто чей -неизвестно. Если только маки смотреть -но это не вариант ибо юзер у себя дома может воткнуть все что угодно. Остается только брать записи метража из диагностики кабеля при подключении и по нему ориентироваться кто где. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
terrible Posted July 26, 2011 А проблема на самом деле серьезная. Обьясню:Украли у нас свич с чердака, отрезали все подписанные квартиры, ну или просто порезали все провода на чердаке. Поставили мы новый свич, восстановили все. А дальше? Кого в какой порт пихать? Выдавать не только по опции 82 IP адреса, но ещё и по последнему MAC адресу, засветившемуся на свиче, остальные звонят в техподдержку. В 95% случаем MAC-адрес у клиентов не меняется, а если и меняется, то у одно клиента со всего свича. Ищите маки, определяйте пользователей, и переформировывайте абонентов по портам свича заного, основываясь на появлении MAC адресов. Когда все заного определены - выключайте привязку к MAC адресу и выдавайте всё по старому. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
[-Alt-] Posted July 27, 2011 (edited) Как вариант на новом свитче выдавать Ip какого-то диапазона, и все запросы с этих ip перенаправлять на страницу с надписью: "Позвоните в ТП по телефону, Ваш ip такой-то." Человек звонит, исходя их полученного адреса вычисляем его порт и ставим туда уже адрес клиента из биллинга. А проблема на самом деле серьезная. Обьясню: Украли у нас свич с чердака, отрезали все подписанные квартиры, ну или просто порезали все провода на чердаке. Поставили мы новый свич, восстановили все. А дальше? Кого в какой порт пихать? В итоге Васю включим в порт Пети -он получит адрес Пети и будет сидеть на его тарифе и т.д. Адреса получат все, а вот кто чей -неизвестно. Edited July 27, 2011 by [-Alt-] Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...