
Знаете, что бесит больше всего в медицинских клиниках Саратова и Энгельса? Нет, не очереди. Отсутствие нормального Wi-Fi. Сидишь, ждёшь приёма, хочешь хоть видосик посмотреть или работу доделать — а интернета нет. Или есть, но "попросите пароль у администратора". А администратор занят, естественно.
Но вот что интересно — просто раздать пароль всем подряд клиника не может. И дело не только в том, что это небезопасно (хотя да, пускать чужие устройства в сеть, где висят базы пациентов и МРТ-аппараты — это как оставить дверь в операционную нараспашку). Есть ещё законодательство: мы обязаны фиксировать кто именно сидел в твоей сети и когда. MAC-адрес к номеру телефона привязать надо.
Коробочные решения для этого? Дорогущие. И часто неповоротливые.
Поэтому мы сделали своё. На Docker, с нуля почти.
Микросервисы — это не дань моде. Это реально удобно, когда нужно что-то обновить или перенести систему на другой сервер. Всё разбито на контейнеры:
Custom Portal — это та самая страница, которую видит пациент. С логотипом клиники, понятным интерфейсом. Никаких безликих форм "введите данные". Здесь же логика: номер ввёл, код получил, всё.
FreeRADIUS — промышленный стандарт для авторизации. Он решает, кого пускать в сеть, а кого нет. Работает как привратник между пользователем и контроллером Omada от TP-Link (управляет точками доступа).
Redis — быстрая память для временных данных. Коды авторизации, состояния сессий — всё там. Отклик мгновенный, никаких зависаний "проверяем код...".
А вот это прикольно: smsd-gammu. Вместо того чтобы платить SMS-агрегаторам за каждое сообщение, мы используем обычный USB-модем с SIM-картой. Локально отправляем коды. Дёшево, сердито, работает.

Пациент подключается → его перехватывает контроллер → показывает наш портал → вводит номер → получает SMS с кодом → вводит код → Redis проверяет → Radius говорит Omada "окей, этот можно" → интернет есть.
Простенько и со вкусом.
Медицина — это не шутки. Там данные пациентов, дорогущее оборудование, которое тоже в сети висит. Пустить туда левые смартфоны — это как... ну как пустить посторонних в серверную с открытыми портами.
VLAN Isolation — гостевой Wi-Fi живёт в своём виртуальном мире. Физически кабели общие, но логически — полная изоляция от корпоративной сети. Гости не видят серверов клиники, рабочих мест врачей, вообще ничего.
Более того — Client Isolation включена. То есть даже посетители друг друга не видят. Твой ноутбук не "увидит" смартфон соседа по очереди. ARP-спуфинг отменяется.
И да, всё логируется. MAC-адрес + номер телефона + время сессии. Если что-то пойдёт не так (допустим, кто-то начнёт DDoS-ить), можно точно сказать, кто это был и когда.
Законодательство соблюдено. Безопасность на месте.
Самое классное в собственной разработке — её можно развивать, как угодно.
Вот база номеров собирается (с согласия, естественно). Можно рассылки делать про акции. Через тот же Gammu, без допрасходов.

Или вот: если номер уже есть в CRM клиники, можно показывать персонализированное приветствие. "С возвращением, Мария Петровна!" Мелочь, а приятно.
Отказоустойчивость тоже легко добавить. SMS-шлюз упал? Система переключится на альтернативный метод — например, звонок-сброс (когда робот звонит, ты сбрасываешь, номер подтверждён).
В итоге клиника получила систему, которая работает сама по себе. Админы не лезут каждый день что-то чинить. Юристы довольны — идентификация есть. Айтишники довольны — медицинская сеть защищена. Пациенты довольны — есть Wi-Fi.
А использование OpenSource (Radius, Gammu) + Docker вместо проприетарных решений означает: никаких ежегодных лицензий, никакой привязки к вендору.
Хотите так же — пишите. Разберём вашу инфраструктуру и соберём что-то подходящее именно вам

