Информация
Настройка
Новости
Контакты
Новинка
Распродажа
Оплата
Доставка
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    RADIUS клиент — SessionID не является глобально уникальным

    RADIUS клиент — SessionID не является глобально уникальным

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    RADIUS клиент — SessionID не является глобально уникальным, RouterOS
     
    cmacneill
    Guest
    #1
    0
    22.06.2012 02:45:00
    Похоже, что SessionID MikroTik для аутентификации через RADIUS сбрасывается при перезагрузке, и поэтому не может считаться уникальным идентификатором внутри одного устройства. К тому же стартовое значение SessionID не уникально между разными роутерами, из-за чего могут возникать коллизии идентификаторов сессий у совершенно разных устройств. Это время от времени вызывает проблемы с нашей RADIUS-базой, которая создаёт дублирующиеся записи.

    Корень проблемы в сетевых сбоях, из-за которых пакеты подтверждения не доходят до MikroTik. Роутер не знает, что пакет уже достиг базы, поэтому пытается отправить его повторно, что в некоторых случаях создаёт дубликат записи, а не обновляет существующую.

    RADIUS также генерирует свой собственный “AcctUniqueID”, однако он тоже не является глобально уникальным! По умолчанию он формируется на основе MikroTik SessionID и нескольких других элементов, но поскольку уникальность этих элементов не гарантирована, весь ID не может считаться глобально уникальным. Усиливает проблему и то, что «уникальный» ID RADIUS — это MD5-хеш. К сожалению, возможно (хоть и с небольшой вероятностью) получить одинаковые MD5-хеши от совершенно разных данных!

    В MikroTik и на стороне RADIUS-сервера есть несколько тайминговых параметров, которые я настраивал максимально эффективно, но полностью избавиться от проблем не удалось. Дело в том, что значения на сервере глобальные, и приходится искать компромисс. У нас на линиях сильно варьируется задержка из-за использования спутникового соединения и перегруженных xDSL DSLAM. Найти значения, которые подходят для всех случаев, сложно.

    Было бы здорово, если бы MikroTik сделал SessionID действительно уникальным — например, генерировал стартовое значение, используя несколько параметров, уникальных для конкретного роутера, и сохранял его в NVRAM, чтобы после перезагрузки его можно было восстановить. Единственная оставшаяся проблема — замена роутера. Если не будет способа вручную ввести стартовое значение SessionID, снова могут появиться дубликаты.

    Сейчас я рассматриваю возможность использовать поле Location ID в RADIUS (RADIUS WISPr-Location-ID), чтобы передавать серверу значение, гарантированно уникальное в глобальном масштабе. В него будет входить уникальный RouterID и счётчик, увеличивающийся скриптом при каждой перезагрузке роутера. Это значение в сочетании с SessionID на сервере должно обеспечить глобально уникальный идентификатор сессии, который можно будет использовать в базе данных с индексом SessionID и уникальным ограничением.

    Мне было бы интересно узнать, сталкиваются ли другие с дублирующимися записями в своих RADIUS-базах и какие меры, если таковые есть, они принимали для устранения или хотя бы смягчения этой проблемы.
     
     
     
    Aaelyen
    Guest
    #2
    0
    02.08.2016 15:11:00
    Прошло уже 4 года, а проблема до сих пор не решена. Может кто-то из MikroTik ответит на это? Когда используешь тысячи роутеров MikroTik в качестве шлюзов HotSpot и RADIUS-сервер, это превращается в серьёзную проблему.
     
     
     
    asy
    Guest
    #3
    0
    08.03.2018 17:08:00
    Да, это проблема. Я считаю, что время должно использоваться для обеспечения уникальности SessionID. В пакетах RADIUS есть TimeStamp, но с ним возникает вторая проблема. Метка времени может отличаться для повторяющегося учетного пакета. Значит, одну из этих проблем нужно решить в RouterOS (а лучше обе). Я не тестировал последнюю версию, но проблема с SessionID есть в версии v6.36.
     
     
     
    blingblouw
    Guest
    #4
    0
    08.03.2018 17:27:00
    Но почему ты используешь session ID? Можно настроить Nas Id как угодно, сделать его уникальным во всём мире. Проблема решена?
     
     
     
    asy
    Guest
    #5
    0
    08.03.2018 17:39:00
    Нет. Один NAS может сгенерировать это:

    +----------+---------------+--------------+---------------------+---------------------+
    | UserName | AcctSessionId | NASIPAddress | AcctStartTime       | AcctStopTime        |
    +----------+---------------+--------------+---------------------+---------------------+
    | XXXXXXX  | 81800055      | 172.26.83.81 | 2017-11-26 12:52:23 | 2017-11-26 13:04:24 |
    | XXXXXXX  | 81800055      | 172.26.83.81 | 2017-12-18 17:13:27 | 2017-12-18 20:53:36 |
    +----------+---------------+--------------+---------------------+---------------------+

    UserName-AcctSessionId-NASIPAddress — неплохой кандидат на уникальный ключ в SQL, но сейчас его использовать нельзя. И я не могу добавить AcctStopTime (то есть TimeStamp), потому что он может быть разным для одной сессии:

    +-----------+---------------+-----------+---------------------+
    | RadAcctId | AcctSessionId | UserName  | AcctStopTime        |
    +-----------+---------------+-----------+---------------------+
    |   1945119 | 81906399      | YYYYYYYY  | 2017-11-22 04:39:21 |
    |   1945121 | 81906399      | YYYYYYYY  | 2017-11-22 04:39:20 |
    +-----------+---------------+-----------+---------------------+

    Задача — отфильтровать дубликаты.
     
     
     
    asy
    Guest
    #6
    0
    13.03.2018 09:23:00
    Проблему можно решить с помощью атрибута RADIUS «Class», если он больше нигде не используется. «Class» может возвращаться в сообщении «Access-Accept» и, например, содержать время начала сессии. Уникальным ключом в этом случае будет сочетание «UserName-AcctSessionId-NASIPAddress-Class». Однако «Class» может использоваться и для других целей, поэтому это решение имеет ограничения.
     
     
     
    savage
    Guest
    #7
    0
    13.03.2018 11:22:00
    Acct-Session-Id не является глобально уникальным, он не уникален для каждого NAS и не уникален при перезагрузках. https://tools.ietf.org/html/rfc2866#page-15 В RFC нет требования, чтобы этот атрибут был уникальным.
     
     
     
    asy
    Guest
    #8
    0
    14.03.2018 05:41:00
    Здесь приведён очень хороший пример. Например, одна реализация использует строку из 8-значного шестнадцатеричного числа в верхнем регистре: первые две цифры увеличиваются при каждой перезагрузке (сброс каждые 256 перезагрузок), а следующие 6 цифр считаются с 0 для первого вошедшего пользователя после перезагрузки и идут до 2^24-1, примерно 16 миллионов. Но у меня уже 6 дублей с 2018-01-10 (!) на одном NAS:

    select count(*) as dup, AcctSessionId, UserName, NASIPAddress from radacct group by AcctSessionId, UserName, NASIPAddress having dup > 1;

    +-----+---------------+----------+--------------+
    | dup | AcctSessionId | UserName | NASIPAddress |
    +-----+---------------+----------+--------------+
    |   2 | 811000a2      | USER1    | 10.249.99.5  |
    |   2 | 811000ab      | USER1    | 10.249.99.5  |
    |   2 | 8120005a      | USER2    | 10.249.99.5  |
    |   2 | 81200075      | USER2    | 10.249.99.5  |
    |   2 | 81200096      | USER2    | 10.249.99.5  |
    |   2 | 81600062      | USER3    | 10.249.99.5  |
    +-----+---------------+----------+--------------+

    количество сессий за этот период — 3718. Я понимаю, что «возможны другие кодировки», но явно была выбрана очень простая методика.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры