naves Опубликовано 12 мая, 2019 · Жалоба On 5/9/2019 at 1:49 PM, max1976 said: Очень часто встречаются кривые клиенты, постоянно запрашивающие адрес, что приводит к нагрузкам на БД. Постоянно, это сколько раз в секунду в сумме от всех? Как же вебхостинги с сайтами живут-то. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Heggi Опубликовано 13 мая, 2019 · Жалоба В 09.05.2019 в 12:36, Troj сказал: можете поделится модулем? https://gist.github.com/heggi/90390c135bef31640bbb8f74e1cb0fb4 Мы для определения порта коммутатора берем последние 6 байт от remoteid (это MAC-адрес) и последний байт от circuitid (это номер порта), модуль это приводит к flexid, состоящему из 7 байт. В БД это запихивать примерно так: INSERT INTO hosts (dhcp_identifier, dhcp_identifier_type, dhcp4_subnet_id, ipv4_address) VALUES (unhex('11223344556601'), 4, 1, INET_ATON('192.0.2.160')); где 11223344556601 - это мак-адрес + номер порта в hex. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Troj Опубликовано 13 мая, 2019 · Жалоба 1 час назад, Heggi сказал: https://gist.github.com/heggi/90390c135bef31640bbb8f74e1cb0fb4 Мы для определения порта коммутатора берем последние 6 байт от remoteid (это MAC-адрес) и последний байт от circuitid (это номер порта), модуль это приводит к flexid, состоящему из 7 байт. В БД это запихивать примерно так: INSERT INTO hosts (dhcp_identifier, dhcp_identifier_type, dhcp4_subnet_id, ipv4_address) VALUES (unhex('11223344556601'), 4, 1, INET_ATON('192.0.2.160')); где 11223344556601 - это мак-адрес + номер порта в hex. спасибо! буду разбираться. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
scorpdenis Опубликовано 8 февраля, 2022 · Жалоба В 13.05.2019 в 09:33, Heggi сказал: https://gist.github.com/heggi/90390c135bef31640bbb8f74e1cb0fb4 Мы для определения порта коммутатора берем последние 6 байт от remoteid (это MAC-адрес) и последний байт от circuitid (это номер порта), модуль это приводит к flexid, состоящему из 7 байт. В БД это запихивать примерно так: INSERT INTO hosts (dhcp_identifier, dhcp_identifier_type, dhcp4_subnet_id, ipv4_address) VALUES (unhex('11223344556601'), 4, 1, INET_ATON('192.0.2.160')); где 11223344556601 - это мак-адрес + номер порта в hex. Добрый день, подниму тему, это решение прекрасно, но хотелось бы получать вместо мака свитча его ip, не хватает мне знаний чтобы поправить так чтобы вместо мака вставлялся relay ip, чтобы на выходе получить flex id вида x.x.x.x-y Можете помочь с решением? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Стич Опубликовано 24 мая, 2022 (изменено) · Жалоба В kea Option82 работает и без хуков по сравнению с isc очень шустро. "client-classes": [ { "name": "10.2.12.12_0_1", "test": "substring(relay4[1].hex,-2,2)==0x0001" }, { "name": "10.2.12.12_0_2", "test": "substring(relay4[1].hex,-2,2)==0x0002" }, .... ], "shared-networks": [ { "name": "10.2.12.12", "relay": { "ip-address": "10.2.12.12" }, "subnet4": [ { "subnet": "10.247.17.0/24", "option-data": [ { "name": "routers", "data": "10.247.17.1" } ], "pools": [ { "pool": "10.247.17.10 - 10.247.17.14", "client-class": "10.2.12.12_0_1" }, { "pool": "10.247.17.18 - 10.247.17.22", "client-class": "10.2.12.12_0_2" } ] } ] }, { "name": "10.2.12.13", "relay": { "ip-address": "10.2.12.13" }, "subnet4": [ ... ] } ] Изменено 24 мая, 2022 пользователем Стич Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ixi Опубликовано 24 мая, 2022 · Жалоба В 24.05.2022 в 11:00, Стич сказал: В kea Option82 работает и без хуков по сравнению с isc очень шустро. Уже работает и общедоступен? раньше было только через премиум модуль Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Стич Опубликовано 24 мая, 2022 · Жалоба В 24.05.2022 в 13:32, ixi сказал: Уже работает и общедоступен? раньше было только через премиум модуль Да общедоступен. Скачал исходники kea-2.0.2 скомпилировал без доп настроек всё работает. Параметр relay4 описан здесь https://kea.readthedocs.io/en/latest/arm/classify.html Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
asdas Опубликовано 30 октября, 2022 · Жалоба мой сенсей наказал поделиться моим решением и поблагодарить общество. Выполняю его просьбу. kea dhcp version 2.2.0 в kea-dhcp4.conf //...... "client-classes": [ <? include "/opt/kea/dhcp/192.168.17.134_1630.class" ?> //...... ], "shared-networks": [ { "name": "vlan_1630", "relay": { "ip-address": "10.80.130.1" }, "subnet4": [ { "id": 1630, "subnet": "10.80.130.0/24", "option-data": [ { "name": "routers", "data": "10.80.130.1" } ], "pools": [ <? include "/opt/kea/dhcp/192.168.17.134_1630.subnet" ?> //...... ] } ] }, //...... в 192.168.17.134_1630.class //...... { "name": "192.168.17.134_1630_7", "test": "(substring(relay4[1].hex,5,1)==0x07 and hexstring(substring(option[82].option[2].hex,2,6),':')=='10:47:80:36:64:b5')"}, { "name": "192.168.17.134_1630_8", "test": "(substring(relay4[1].hex,5,1)==0x08 and hexstring(substring(option[82].option[2].hex,2,6),':')=='10:47:80:36:64:b5')"}, { "name": "192.168.17.134_1630_9", "test": "(substring(relay4[1].hex,5,1)==0x09 and hexstring(substring(option[82].option[2].hex,2,6),':')=='10:47:80:36:64:b5')"}, { "name": "192.168.17.134_1630_10", "test": "(substring(relay4[1].hex,5,1)==0x0a and hexstring(substring(option[82].option[2].hex,2,6),':')=='10:47:80:36:64:b5')"}, { "name": "192.168.17.134_1630_11", "test": "(substring(relay4[1].hex,5,1)==0x0b and hexstring(substring(option[82].option[2].hex,2,6),':')=='10:47:80:36:64:b5')"}, { "name": "192.168.17.134_1630_12", "test": "(substring(relay4[1].hex,5,1)==0x0c and hexstring(substring(option[82].option[2].hex,2,6),':')=='10:47:80:36:64:b5')"}, { "name": "192.168.17.134_1630_13", "test": "(substring(relay4[1].hex,5,1)==0x0d and hexstring(substring(option[82].option[2].hex,2,6),':')=='10:47:80:36:64:b5')"}, //...... в 192.168.17.134_1630.subnet //...... { "pool": "10.80.130.7/32", "client-class": "192.168.17.134_1630_6" }, { "pool": "10.80.130.8/32", "client-class": "192.168.17.134_1630_7" }, { "pool": "10.80.130.9/32", "client-class": "192.168.17.134_1630_8" }, { "pool": "10.80.130.10/32", "client-class": "192.168.17.134_1630_9" }, { "pool": "10.80.130.11/32", "client-class": "192.168.17.134_1630_10" }, { "pool": "10.80.130.12/32", "client-class": "192.168.17.134_1630_11" }, { "pool": "10.80.130.13/32", "client-class": "192.168.17.134_1630_12" }, //...... Cтич, благодарю за пример конфига. *я всего лишь добавил привязку к мак адресу коммутатора remoute-id и разбил на инклюды. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Serzh Опубликовано 5 мая, 2023 · Жалоба А есть пример как по порту клиента вытаскивать из базы соответствие IP адреса и предлагать его? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Serzh Опубликовано 11 августа, 2023 · Жалоба На самом деле пример выше не совсем то что нужно. В данном случае "пул" на один адрес для клиента, но если клиент поменяет MAC, то пока аренда не закончится, новое устройство адрес не получит. Нам необходимо, чтобы любое устройство подключенное в порт всегда сразу получало один и тот же IP адрес. Мне кажется без хуков тут не обойтись. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Serzh Опубликовано 31 августа, 2023 · Жалоба В общем всё оказалось гораздо проще, не надо никаких классов и даже пулов, работает лучше всего через host reservation: для kea: "reservations": [ {"circuit-id": "'MA5680T-2/12/5/44/2512:548'", "ip-address": "10.81.7.99"}, {"circuit-id": "'MA5680T-20/15/0/5/2505:472'", "ip-address": "10.81.7.181"}, {"circuit-id": "'MA5680T-2/16/8/8/2517:164'", "ip-address": "10.81.6.112"} ] для старого isc-dhcpd: host IP_10_81_6_089 { fixed-address 10.81.6.89; host-identifier option agent.circuit-id "MA5680T-53/7/2/14/2507:245"; } в обоих случаях одна строка на порт, надеюсь кому-то это поможет, я год искал красивое решение и наткнулся практически случайно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nixx Опубликовано 31 августа, 2023 · Жалоба 2 часа назад, Serzh сказал: В общем всё оказалось гораздо проще, не надо никаких классов и даже пулов, работает лучше всего через host reservation: для старого isc-dhcpd: host IP_10_81_6_089 { fixed-address 10.81.6.89; host-identifier option agent.circuit-id "MA5680T-53/7/2/14/2507:245"; } в обоих случаях одна строка на порт, надеюсь кому-то это поможет, я год искал красивое решение и наткнулся практически случайно. ну то есть этой конфигурации пофигу на время аренды, и любому устройству этот адрес перевыдастся в любое время? я лет десять назад искал решение, в итоге до сих пор пользуюсь патченным dhcpd, который игнорирует время лизы )) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Serzh Опубликовано 1 сентября, 2023 · Жалоба Да, работает именно так как нужно. Нашёл впервые упоминание этой функции 12 лет назад, народ там прямо пишет, что фичу портировали в версии 4.х из IPv6, но почему-то забыли об этом упомянуть в документации. я год искал решение, уже начали писать хук для Kea, наткнулся совершенно случайно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nixx Опубликовано 1 сентября, 2023 · Жалоба вы не представляете, сколько люди страдали... )) спасибо огромное, теперь есть повод сразу и на kea перепрыгнуть. пойду тестить. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Serzh Опубликовано 1 сентября, 2023 · Жалоба представляю. сейчас обкатаем на первой тысяче устройств и если всё будет хорошо, то двинемся на остальные десятки тысяч. Да можно и не прыгать, можно на старом делать пока, мы тоже прорабатываем план перехода на Kea, но больше всего меня в ней смущают логи, пока не добились логирования необходимых параметров без излишней детализации. Больше всего нравится в Kea возможность хранить эти резервации во внешней readonly базе, чтобы те кому надо сами могли сами их делать оперативно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 1 сентября, 2023 · Жалоба 11 hours ago, nixx said: вы не представляете, сколько люди страдали... )) Вы сами хотели страдать. https://forum.nag.ru/index.php?/topic/64849-dhcp-server-with-sql-support-on-perl/page/15/ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Serzh Опубликовано 4 сентября, 2023 (изменено) · Жалоба я бы не рискнул сервер, обслуживающий сотни тысяч устройств, переводить на перловое решение. мы уже хлебнули с Axiros, который на python написан. А касаемо перла, регулярно переписываем старые скрипты с перла на питон. Изменено 4 сентября, 2023 пользователем Serzh Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pppoetest Опубликовано 4 сентября, 2023 · Жалоба 8 часов назад, Serzh сказал: я бы не рискнул сервер, обслуживающий сотни тысяч устройств, переводить на перловое решение. Скажем так, у меня это решение проработало лет 5, при тестах я понял что у меня скорее узким местом будет база от количества запросов, чем этот микроскопический скриптик. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 10 сентября, 2023 · Жалоба On 9/4/2023 at 8:09 AM, Serzh said: я бы не рискнул сервер, обслуживающий сотни тысяч устройств, переводить на перловое решение. Для такого есть тесты на стенде и тестовые зоны. Потом для сотен тыщ - одного как то маловато, не, оно конечно всем всё отдаст, но не сразу ) Когда я нагрузочные тесты проводил лет 10+ назад, там было что то типа 500 запросов/сек с базой и кажется 2к без базы, на тогда ещё дуалкоре (огрызок от коредуо) вроде. 100к оно типа должно отработать за 200 сек или 3+ минуты. Если база не будет тормозить. On 9/4/2023 at 8:09 AM, Serzh said: мы уже хлебнули с Axiros, который на python написан. А вот меня однажды собака укусила, смерть собакам!? On 9/4/2023 at 8:09 AM, Serzh said: А касаемо перла, регулярно переписываем старые скрипты с перла на питон. То вам петон не нравится то вы на него переписываете :)))) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...