Привет, Хабр!


Меня зовут Дмитрий Макаров, я руководитель продукта MULTIDIRECTORY — российской службы каталогов с ядром собственной разработки.

После ухода Microsoft с российского рынка многие инженеры и администраторы столкнулись с вопросом: чем заменить Active Directory? При этом ещё нужно сохранить совместимость и привычные инструменты, обеспечить надежность и безопасность. Samba и FreeIPA казались логичным выбором, но на практике часто оказывались либо сильно устаревшими, либо слишком сложными для использования.

Мы решили начать с нуля и создать службу каталогов, которая сочетала бы знакомый функционал AD с современным стеком, гибкой архитектурой и возможностью интеграции в гибридные инфраструктуры. Так началась история MULTIDIRECTORY (MD).

Почему начали с чистого листа

На старте мы рассмотрели все популярные решения — OpenLDAP, Samba AD-DC, FreeIPA, 389 Directory Server. Но у каждого из них оказались ограничения, не позволяющие построить действительно масштабируемую и отказоустойчивую систему.

Почему не Samba?

Samba — проект, глубоко осевший в эпохе Windows NT, чьи корни уходят во времена ранних версий Windows Server. Несмотря на свою популярность среди Linux-пользователей, этот инструмент имеет ряд существенных недостатков, которые делают его малопригодным для современных высоконагруженных инфраструктур:

Доменные контроллеры 

Контроллеры доменов Samba спроектированы таким образом, что плохо справляются с высокими нагрузками. Это особенно заметно при увеличени�� числа пользователей и сервисов внутри инфраструктуры.

Масштабируемость 

Расширение сети на большее количество серверов требует значительных усилий и затрат ресурсов. Добавление новых узлов — трудоёмкий процесс со сложной конфигурацией, необходимо проводить долгие настройки каждого нового элемента системы.

Устаревший стек 

Проект исторически развивается на языке C и в 90-е годы это было естественным возможным решением. Сегодня такой технологический стек усложняет развитие продукта, повышает стоимость поддержки и делает внедрение современных практик безопасности и масштабирования трудоёмким. Работа с низкоуровневым кодом затрудняет быстрые изменения и интеграцию новых возможностей, тогда как современные решения требуют гибкости, модульности и расширяемости. 

Почему не FreeIPA?

FreeIPA — это open-source-проект для управления пользователями, политиками и аутентификацией, ориентированный прежде всего на Linux-инфраструктуру. Он действительно закрывает многие базовые сценарии, но при этом имеет ряд архитектурных особенностей и ограничений, которые становятся серьёзным препятствием при использовании в корпоративных средах.

Плоская структура организации
В FreeIPA отсутствует привычная для многих иерархическая структура подразделений (OU), как в Active Directory. Все объекты — пользователи, группы, компьютеры — размещаются в общей плоской структуре. Это может быть удобно для простых сценариев, но становится существенным ограничением при масштабировании или необходимости разграничения прав доступа между подразделениями, филиалами или бизнес-единицами.

Производительность 

Из-за сложной архитектуры и большого количества промежуточных слоёв FreeIPA работает медленнее, чем специализированные решения. Каждая операция проходит через многочисленные компоненты, что замедляет работу всей системы в целом.

Обслуживание 

Обновления и поддержка становятся настоящим испытанием, поскольку изменения в одном компоненте могут привести к непредвиденным последствиям в других частях проекта. Здесь нужно поддерживать высокий уровень экспертизы инженеров.

Сложности с интеграцией
Решение FreeIPA слабо совместимо с экосистемой Windows и Active Directory. Двусторонние доверительные отношения (trust) реализованы ограниченно и нестабильно, что мешает полноценной интеграции в гибридные инфраструктуры. Настройка таких связей требует тонкой ручной работы, часто сопровождается багами и вызывает трудности при эксплуатации.

Асинхронное ядро службы каталогов MULTIDIRECTORY

Мы отказались от идеи наследовать чужой код и решили писать своё ядро на Python. У этого языка зрелая экосистема, высокая читаемость и нет санкционных рисков, как у .NET или Go-приложений. 

MULTIDIRECTORY строится как модульная система с веб-интерфейсом на FastAPI и асинхронной моделью обработки запросов через asyncio. Это даёт стабильную производительность даже при высокой нагрузке.

Сервис разделён на несколько независимых компонентов — LDAP-каталог, MIT Kerberos, DNS (Bind9), Kea DHCP, SaltStack и административный API. Такое разделение упрощает масштабирование и обновление.

Схема LDAP адаптирована под Microsoft Active Directory, поэтому большинство приложений и сервисов видят MD как знакомое AD и работают без изменений. Для интеграции с внешними системами реализован REST API, который позволяет управлять пользователями, группами и политиками через стандартные HTTP-запросы, что удобно для автоматизации и внедрения в существующую инфраструктуру.

Хранение данных: PostgreSQL вместо LDAP-БД

Вместо специализированных LDAP-хранилищ мы выбрали PostgreSQL — стабильную, гибкую и хорошо поддерживаемую систему. Это позволило использовать инструменты, знакомые большинству инженеров: например, мониторинг, резервное копирование и репликацию.

Для надёжности применяется архитектура Master-Replica на базе Patroni: при сбое основного узла система автоматически переключается на резервный. Синхронная репликация исключает потерю данных, а совместимость с российскими форками (Postgres Pro, Jatoba и др.) обеспечивает локальную поддержку.

Контейнеризация и деплой

Чтобы упростить жизнь администраторам, мы упаковали MD в Docker-контейнеры. Это позволило значительно сократить время запуска инфраструктуры — теперь буквально за считанные минуты можно развернуть рабочую версию приложения на любом сервере или рабочей станции.

Преимущества подхода:

  • Универсальность: приложения работают на стандартной операционной системе Linux Debian, которая известна своей надёжностью и проверена временем

  • Простота настройки: чтобы запустить систему, нужно поменять всего один специальный файл настроек (docker-compose.yml) или создать конфигурационные файлы для управления контейнерами, например, в Kubernetes

  • Совместимость: MD запускается одинаково хорошо на любых компьютерах, где установлен Docker — неважно, используете вы Windows, macOS или разные версии Linux

  • Масштабирование: удобное масштабирование и управление с помощью Kubernetes

Единая точка истины

Вся информация в службе каталогов MULTIDIRECTORY хранится централизованно в единой базе данных, что кардинально отличается от Active Directory. В AD каждый развёрнутый контроллер домена обладает собственной базой данных, и для поддержания согласованности между ними осуществляется постоянный процесс обмена информацией (процесс репликации). 

В MD всё логичнее: здесь используется единая база данных. Это упрощает администрирование системы, поскольку отсутствуют проблемы с конфликтующими версиями данных и ошибками, возникающими вследствие некорректной репликации.

Модель данных MD позволяет администраторам гибко добавлять собственные атрибуты, не ломая при этом само ядро. Такой подход повышает удобство управления системой и снижает риск возникновения ошибок при внесении изменений в схему данных.

Что MD дает инженеру

Служба каталогов MULTIDIRECTORY была создана как ответ на ограничения существующих решений вроде Samba и FreeIPA. В ней реализовано всё, что действительно нужно администраторам, без избыточной сложности.

В MD сохранён базовый функционал Active Directory, но на современном технологическом стеке с удобным интерфейсом и поддержкой двухфакторной аутентификации через решение MULTIFACTOR — оно работает для всех протоколов без внешних модулей и адаптеров.

Система устойчива к сбоям, быстро разворачивается и проста в обслуживании. Доступны две версии — Community (бесплатная версия с базовым функционалом) и Enterprise (с максимальным набором функций для организаций с повышенными требованиями к безопасности). Связаться с разработчиками и получить консультацию напрямую можно в Telegram-чате.

Что в итоге

MULTIDIRECTORY — это результат нашего решения пересобрать службу каталогов, опираясь на реальный опыт эксплуатации и современные принципы проектирования, а не просто российская замена Active Directory.

Если вы хотите мигрировать с AD, работаете с FreeIPA или просто интересуетесь архитектурой каталогов — попробуйте MD, поэкспериментируйте и расскажите в Telegram-чате, что вам показалось удачным, а что требует доработки. Обратная связь от инженеров для нас очень важна.

А если вы хотите узнать больше о продукте и увидеть его в действии, приглашаем вас 4 декабря в 11:00 (МСК) на вебинар «Твоя безопасность. Твои правила. Твой контроль. Всё о службе каталогов MULTIDIRECTORY».

В прямом эфире расскажем:

— почему сегодня важно переходить на российские решения;
— как устроена архитектура и функционал MULTIDIRECTORY в версиях Community и Enterprise;
— как работают групповые политики;
— каким образом реализована безопасность через ролевую модель;
— как управлять парольными политиками;
— и как работает 2FA на отечественных ОС.

Регистрируйтесь и подключайтесь!

Комментарии (31)


  1. aegoroff
    13.11.2025 11:20

    В MD всё логичнее: здесь используется единая база данных. Это упрощает администрирование системы, поскольку отсутствуют проблемы с конфликтующими версиями данных и ошибками, возникающими вследствие некорректной репликации.

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


    1. Orky
      13.11.2025 11:20

      Не, ну да, постгрес, конечно, не подвергается нормальному геораспределению, лол.


      1. aegoroff
        13.11.2025 11:20

        Дело не только в постгресе - вы же не будете из Москвы делать запросы в Омск или наоборот. Коли приложение рассчитано на работу с реляционной БД, это всегда расчет на то, что база где-то рядом. Репликация данных должна быть на уровне приложения и тогда особого толку от использования РСУБД нет никакого, коли у каждого узла она будет своя.


        1. aegoroff
          13.11.2025 11:20

          Немного фигню написал - получается что вы геораспределение сняли со своего приложения, и хотите переложить на СУБД, - ну что же - немного странный подход


    1. Romain6G
      13.11.2025 11:20

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

      Геораспределённый кластер на PostgreSQL прекрасно строится с помощью Patroni со схемой master–replica.
      Для удалённых филиалов можно использовать реплику в режиме read-only для аутентификации и авторизации, а master — для операций записи. Даже при обрыве связи с master филиал остаётся полностью работоспособен в локальных сценариях.

      Что касается нагрузок и Python — здесь важно понимать масштаб.
      Даже у крупнейших компаний в России количество активных пользователей не превышает сотен тысяч. Например, если взять инфраструктуру компании с численностью порядка 400 000 пользователей, — такая нагрузка без проблем обслуживается Python-сервисами при правильной архитектуре.
      Python давно используется в высоконагруженных системах — от брокеров сообщений до крупных web-сервисов. Его легко масштабировать горизонтально: микросервисная архитектура, асинхронные фреймворки, балансировка через Nginx/Traefik, worker-пулы для фоновых задач и т.п.


      1. aegoroff
        13.11.2025 11:20

        Ну то есть получается что все это переложили на плечи СУБД, как вариант наверно можно, но сопровождение такой системы так себе занятие, особенно когда начинаются проблемы, и уж они точно не будут проще, чем вариант с честным AD


      1. ildarz
        13.11.2025 11:20

        Геораспределённый кластер на PostgreSQL прекрасно строится с помощью Patroni со схемой master–replica.

        А AD - мультимастер. И это не просто так.

        Для удалённых филиалов можно использовать реплику в режиме read-only для аутентификации и авторизации, а master — для операций записи.

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


      1. Wundarshular
        13.11.2025 11:20

        Геораспределённый кластер на PostgreSQL прекрасно строится с помощью Patroni со схемой master–replica.

        Для удалённых филиалов можно использовать реплику в режиме read-only для аутентификации и авторизации, а master — для операций записи.

        Но ведь при master-replica точка записи у вас только одна, а в остальных "местах" только чтение, и я не очень понимаю, как это решает проблему геораспределённости ваших пользователей. Изменения всё равно нужно сначала доставить на мастер, а потом докатить до ближайшей реплики. Те. какое-либо обновление будет довольно продолжительным. Вы исходите из предположения, что активная запись в БД происходит значительно реже чем массовое чтение?

        Вообще, конечно, назвать решение multimaster, но использовать master-replica БД мне кажется хитрым маркетинговым ходом.


    1. NotMusk
      13.11.2025 11:20

      Правильно написали, географически распределенность и устойчивость к разделению. Условно, если у вас разоралась связь между филиалами, то контроллер в Новоосибе не сможет обслуживать пользователей, если его БД в Москве.

      Да и гонять запросы между кд в Новосибе и бд в Москве через узкий канал между филиалами - такая себе идея, это очень большие потери пакетов = ошибки в бд и низкая производительность. Хотя у postgresql, в принципе, низкая производительность в задачах ldap (низкая частота записи, высокая чтения, и поиска)


  1. ildarz
    13.11.2025 11:20

    В MD всё логичнее: здесь используется единая база данных.

    Из разряда "как попытаться выдать недостаток за достоинство". Искренне надеюсь, что ваши специалисты на самом деле не думают, что мультимастер структура AD - это потому, что ребята не знали, как "логично" сделать.


    1. Orky
      13.11.2025 11:20

      Там я выше написал, что можно сделать единую геораспределённую базу, да, это пипец непривычно, но по сути классное решение, ведь вы разделяете зону хранения и зону обработки данных на разные инстансы, а не так, как сделано в АД: один инстанс - одно хранилище, которое еще надо научить нормально синхронизироваться


    1. Romain6G
      13.11.2025 11:20

      Из разряда "как попытаться выдать недостаток за достоинство". Искренне надеюсь, что ваши специалисты на самом деле не думают, что мультимастер структура AD - это потому, что ребята не знали, как "логично" сделать.

      Multimaster‑структура AD — это историческая особенность архитектуры. Она была разработана в 2000 году под специфические задачи: работу с непостоянными каналами связи (спутниковые линии, филиалы с ограниченной связью) с так называемыми окнами доступности.
      Отсюда и функционал репликации по расписанию в течение суток, который кажется избыточным в современных реалиях.

      В современном мире, при стабильных постоянных каналах связи, схема master → multireplica полностью покрывает все сценарии: аутентификация, авторизация. Никакой особой логики здесь нет — просто исторический дизайн учитывал условия и ограничения того времени.


      1. aegoroff
        13.11.2025 11:20

        В современном мире, при стабильных постоянных каналах связи

        вот это фундаментальное заблуждение - каналы связи между регионами были и есть ненадежны по определению, и далеко не всегда они быстрые


      1. ildarz
        13.11.2025 11:20

        В современном мире, при стабильных постоянных каналах связи

        Мы тут как раз недавно с коллегами обсуждали, как бы нам реализовать работу офиса клиента в одной маленькой северной деревеньке, куда проводной интернет всё проводят и проводят уже несколько лет в режиме "через четыре года здесь будет город-сад". Причем как раз с AD-то как раз проблем ровно ноль из-за "исторических особенностей архитектуры", а вот со всем остальным... Так что спасибо, что просветили насчет "современного мира".


  1. Vedomir
    13.11.2025 11:20

    Интересно, а какие санкционные риски у .net и Go по сравнению с Python?


    1. Orky
      13.11.2025 11:20

      Кстати, хороший вопрос. Формально .net - под санкциями, но .net core - нет ) Так что, чую, это чисто дело времени, когда его подбанят. Насчёт Го не в курсе, если честно


      1. Vedomir
        13.11.2025 11:20

        Уже лет пять как нет .net core отдельного, начиная с 5 версии .net core стал просто .net и полностью открытым проектом, а развитие ветки 4.х было остановлено. На днях уже 10 версия вышла.

        И современный .net такой же открытый проект как и Python.


    1. Romain6G
      13.11.2025 11:20

      Интересно, а какие санкционные риски у .net и Go по сравнению с Python?

      Санкционные риски напрямую зависят не только от языка, а от экосистемы и юрисдикции. .NET — продукт Microsoft, целиком под контролем американской корпорации. Даже при наличии .NET Core с открытым исходным кодом, зависимость от инфраструктуры (NuGet, tooling, Visual Studio, лицензии) остаётся высокой.
      Go — развивается под управлением Google, что тоже создаёт риски.

      Python — полностью открытый, развивается международным сообществом под управлением Python Software Foundation, зарегистрированной как некоммерческая организация. В нём нет корпоративного вендора, способного одномоментно ограничить использование или распространение.


      1. Busla
        13.11.2025 11:20

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


  1. Andrei9385
    13.11.2025 11:20

    Samba-DC: По умолчанию при инициализации домена используется база данных TDB.
    - TDB: Максимальный размер составляет 4 ГБ, поскольку базы данных используют 32-разрядные структуры. Поэтому в крупной организации с 100 тысяч объектов и больше стоит сменить базу данных на LMDB.
    - LMDB: Начиная с Samba 4.9, контроллер домена можно настроить для хранения своих данных в формате LMDB вместо формата TDB. Поскольку LMDB является настоящей 64-разрядной базой данных, максимальный размер ограничен только объемом памяти, доступной в системе.

    Я видел внедрения до 5000 пользователей и не видел проблем с производительностью.


    1. Romain6G
      13.11.2025 11:20

      LMDB действительно снимает ограничение по размеру базы, но не решает главные проблемы Samba — архитектурные.

      Проект исторически создавался как реализация протоколов Windows NT в Linux-среде. Со временем в него “дописывали” поддержку AD, Kerberos и LDAP, но эти компоненты остались слабо связанными и разношерстными по архитектуре.
      Репликация и обработка политик реализованы в однопоточном режиме, а кэширование и индексация данных крайне ограничены. На десятках тысяч объектов наблюдаются задержки репликации и рост времени отклика LDAP. Это подтверждается тестами крупных организаций и интеграторов.


  1. mexxy
    13.11.2025 11:20

    Samba — проект, глубоко осевший в эпохе Windows NT, чьи корни уходят во времена ранних версий Windows Server. 

    Samba 4.23 поддерживает SMB по протоколу QUICK. Это показывает, что проект SAMBA развивается и идет в ногу со временем.


    1. NotMusk
      13.11.2025 11:20

      У samba есть одна проблема из которой вытекают все остальные.

      Главным функциональным заказчиком samba является французское правительство. За какие фичи оно заплатило, то в samba и запилят. У проекта samba сейчас нет цели полностью повторить технологии Microsoft. Есть цель обслужить один конкретный кейс, за который платят.

      Отсюда и такая неоднородность и разброс. Что-то в samba до сих пор на уровне NT.

      Поэтому, если вы что-то строите на samba, учитывайте, что это далеко не MS AD и готовьтесь самостоятельно лезть в код на C и дорабатывать под себя.

      ВТБ со своим Эллис это попытался сделать (сейчас проект мертв)


  1. Litemanager_remoteadmin
    13.11.2025 11:20

    Да можно заменить AD , прикольно)


  1. nitro80
    13.11.2025 11:20

    По старой доброй традиции на сайте стоимость продукта спрятана?