Перейти к содержимому
Калькуляторы
On 5/9/2019 at 1:49 PM, max1976 said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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.

 

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 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.05.2022 в 11:00, Стич сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

11 hours ago, nixx said:

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Изменено пользователем Serzh

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.