Jump to content
Калькуляторы
On 5/9/2019 at 1:49 PM, max1976 said:

Очень часто встречаются кривые клиенты, постоянно запрашивающие адрес, что приводит к нагрузкам на БД.

Постоянно, это сколько раз в секунду в сумме от всех?

Как же вебхостинги с сайтами живут-то.

Share this post


Link to post
Share on other sites

В 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.

 

 

 

Share this post


Link to post
Share on other sites

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.

 

 

 

спасибо! буду разбираться.

Share this post


Link to post
Share on other sites

В 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

Можете помочь с решением?

Share this post


Link to post
Share on other sites

В 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": [
            ...
        ]
   }
]

Edited by Стич

Share this post


Link to post
Share on other sites

В 24.05.2022 в 11:00, Стич сказал:

В kea Option82 работает и без хуков по сравнению с isc очень шустро.

Уже работает и общедоступен? раньше было только через премиум модуль

Share this post


Link to post
Share on other sites

В 24.05.2022 в 13:32, ixi сказал:

Уже работает и общедоступен? раньше было только через премиум модуль

Да общедоступен. Скачал исходники kea-2.0.2 скомпилировал без доп настроек всё работает.

Параметр relay4 описан здесь

https://kea.readthedocs.io/en/latest/arm/classify.html

 

Share this post


Link to post
Share on other sites

мой сенсей наказал поделиться моим решением и поблагодарить общество. Выполняю его просьбу.

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 и разбил на инклюды.

Share this post


Link to post
Share on other sites

А есть пример как по порту клиента вытаскивать из базы соответствие IP адреса и предлагать его?

Share this post


Link to post
Share on other sites

На самом деле пример выше не совсем то что нужно. В данном случае "пул" на один адрес для клиента, но если клиент поменяет MAC, то пока аренда не закончится, новое устройство адрес не получит. Нам необходимо, чтобы любое устройство подключенное в порт всегда сразу получало один и тот же IP адрес. Мне кажется без хуков тут не обойтись.

Share this post


Link to post
Share on other sites

В общем всё оказалось гораздо проще, не надо никаких классов и даже пулов, работает лучше всего через 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";         }

 

 

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

Share this post


Link to post
Share on other sites

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, который игнорирует время лизы ))

Share this post


Link to post
Share on other sites

Да, работает именно так как нужно. Нашёл впервые упоминание этой функции 12 лет назад, народ там прямо пишет, что фичу портировали в версии 4.х из IPv6, но почему-то забыли об этом упомянуть в документации.

я год искал решение, уже начали писать хук для Kea, наткнулся совершенно случайно.

Share this post


Link to post
Share on other sites

вы не представляете, сколько люди страдали... ))

спасибо огромное, теперь есть повод сразу и на kea перепрыгнуть. пойду тестить.

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

11 hours ago, nixx said:

вы не представляете, сколько люди страдали... ))

Вы сами хотели страдать.

https://forum.nag.ru/index.php?/topic/64849-dhcp-server-with-sql-support-on-perl/page/15/

 

Share this post


Link to post
Share on other sites

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

мы уже хлебнули с Axiros, который на python написан. А касаемо перла, регулярно переписываем старые скрипты с перла на питон.

Edited by Serzh

Share this post


Link to post
Share on other sites

8 часов назад, Serzh сказал:

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

Скажем так, у меня это решение проработало лет 5, при тестах я понял что у меня скорее узким местом будет база от количества запросов, чем этот микроскопический скриптик.

Share this post


Link to post
Share on other sites

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:

А касаемо перла, регулярно переписываем старые скрипты с перла на питон.

То вам петон не нравится то вы на него переписываете :))))

Share this post


Link to post
Share on other sites

Народ подскажите

на практике сколько клиентов смогут держать два kea dhcp сервера в режиме load-balancing.

Интересуют реальные данные что за сервера и сколько клиентов на них.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

В 17.05.2024 в 12:21, Serzh сказал:

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

Я не просил давать оценку моему вопросу.

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

Поэтому и просьба поделится инфой по  реальным данным для KIA, что за сервера и сколько абонентов на них обслуживается.

Share this post


Link to post
Share on other sites

Вы путаете роутер где PPS и bandwidth единственные характеристики и DHCP сервер, где важно requests per sec (RPS).

 

Если у вас абоненты вдруг сгенерят сильно больше RPS чем держит DHCP - не страшно, он обслужит кого сможет, а те кто не получил с первого раза отправят запросы ещё раз, таким образом у вас будет RPS всегда уменьшатся доходя до фонового значения.

 

Для сети есть условно фоновый DHCP RPS который складывается из тех кто продляет и тех кто получает после подключения/ребута.

RPS продляльщиков можно вычислить по формуле в которой будет и количество хостов и время (не помню какое именно из конфига).

А RPS прочих - это некоторая статистическая величина, тут проще узнавать у тех кто держит сети. Но условно я бы считал её равной предыдущей.

 

А RPS своих железок на стенде вы и сами можете замерить, это не ахти какой рокетсаенс.

ИМХО я бы больше беспокоился за релейагентов на всяких коммутаторах :)

Share this post


Link to post
Share on other sites

2 часа назад, Ivan_83 сказал:

Вы путаете роутер где PPS и bandwidth единственные характеристики и DHCP сервер, где важно requests per sec (RPS).

 

Если у вас абоненты вдруг сгенерят сильно больше RPS чем держит DHCP - не страшно, он обслужит кого сможет, а те кто не получил с первого раза отправят запросы ещё раз, таким образом у вас будет RPS всегда уменьшатся доходя до фонового значения.

 

Для сети есть условно фоновый DHCP RPS который складывается из тех кто продляет и тех кто получает после подключения/ребута.

RPS продляльщиков можно вычислить по формуле в которой будет и количество хостов и время (не помню какое именно из конфига).

А RPS прочих - это некоторая статистическая величина, тут проще узнавать у тех кто держит сети. Но условно я бы считал её равной предыдущей.

 

А RPS своих железок на стенде вы и сами можете замерить, это не ахти какой рокетсаенс.

ИМХО я бы больше беспокоился за релейагентов на всяких коммутаторах :)

Я считаю что профиль среднего абонента у среднего провайдера одинаковый. Зачем мне всё это. Когда можно ориентироваться на практические значения.

Share this post


Link to post
Share on other sites

3 minutes ago, Стич said:

Я считаю что профиль среднего абонента у среднего провайдера одинаковый. Зачем мне всё это. Когда можно ориентироваться на практические значения.

Это ложное предположение.

1. Разные провайдеры скорее всего имеют разный renew интервал, так что фоновый RPS может сильно различаться.

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

3. Нагрузочная способность самого DHCP сервера может заметно плавать из за различных настроек ОС, доп сервисов, самого конфига DHCP демона и железа.

 

Потому можете взять классический ответ: "ТРИСТА!" и интерпретировать его на себя :)

 

Можете поискать тут: https://forum.nag.ru/index.php?/topic/64849-dhcp-server-with-sql-support-on-perl/page/15/#comments

это не кеа, но кеа точно хуже не будет работать, ибо как минимум железо стало сильно лучше.

 

Share this post


Link to post
Share on other sites

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.