Наглядная карта локальной сети и контейнеров без лишней возни
Когда на домашнем сервере или рабочем хосте скапливается пара десятков контейнеров, виртуалок и тестовых сервисов, ориентироваться в них становится трудно. Рано или поздно ловишь себя на мысли: на каком IP сейчас крутится база данных, какие порты открыты наружу и в какие именно docker-сети включен тот старый воркер? Обычно приходится открывать терминал, грепать выводы docker inspect, гонять nmap и вручную сводить данные в голове.
Недавно наткнулся на проект Atlas от разработчика Karam Ajaj. Это опенсорсный инструмент, который берет эту рутину на себя: сканирует локальные подсети, вытягивает детали о контейнерах через сокет Docker и рисует интерактивную карту сети прямо в браузере.
Что внутри и как это устроено
Архитектура Atlas собрана из нескольких привычных компонентов, упакованных в один контейнер:
- Сканер написан на Go 1.22. Бинарник выполняет низкоуровневые сетевые запросы через ARP и ping, ходит в сокет Docker и делает глубокий опрос открытых портов. Все находки он складывает в локальную базу SQLite.
- Серверная часть работает на FastAPI. Она отдает найденные хосты по REST API, управляет сессиями и принимает команды на запуск сканирования.
- Веб-интерфейс сделан на React, а раздает его NGINX, который заодно проксирует API-запросы.
Такая связка работает автономно. Внутри контейнера нет нужды настраивать cron: периодический опрос подсетей запускается таймерами на Go.
Главные возможности
Детальный опрос Docker
Многие похожие утилиты спотыкаются, если у контейнера несколько сетевых интерфейсов. Atlas отслеживает каждый интерфейс отдельно. Если у контейнера есть несколько внутренних IP и MAC-адресов, все они отобразятся на графе с привязкой к конкретным именам сетей. Заодно утилита парсит метаданные образов, пытаясь определить тип операционной системы.
Поиск соседних хостов
Atlas не ограничивается локальным хостом. Через переменную SCAN_SUBNETS можно задать список подсетей через запятую, например 192.168.1.0/24,10.0.0.0/24. Сканер найдет доступные устройства, снимет отпечатки ОС и проверит доступные порты. При этом один и тот же хост, видимый с разных сетевых адаптеров, помечается соответствующими лейблами интерфейсов.
Интерактивная визуализация
Граф сети можно переключать между круговой и иерархической раскладкой. Если графическое представление в конкретный момент неудобно, доступна обычная таблица хостов со всеми параметрами, фильтрами и поиском. Интерфейс адаптирован под мобильные экраны, так что состояние сети можно глянуть со смартфона.




Гибкое расписание через API
Интервалы проверок задаются на старте, но их можно менять на лету без перезапуска контейнера. Для этого есть отдельные эндпоинты в API:
# Проверить текущие интервалы
curl http://localhost:8888/api/scheduler/intervals
# Изменить частоту быстрого сканирования на 30 минут
curl -X PUT http://localhost:8888/api/scheduler/intervals/fastscan \
-H "Content-Type: application/json" \
-d '{"interval": 1800}'
Как развернуть у себя
Самый быстрый способ оценить работу — запустить готовый Docker-образ. Инструменту нужен доступ к сети хоста и сокету демона:
docker run -d \
--name atlas \
--network=host \
--cap-add=NET_RAW \
--cap-add=NET_ADMIN \
-v /var/run/docker.sock:/var/run/docker.sock \
-e ATLAS_UI_PORT='8888' \
-e ATLAS_API_PORT='8889' \
-e ATLAS_ADMIN_USER='admin' \
-e ATLAS_ADMIN_PASSWORD='change-me' \
-e SCAN_SUBNETS="192.168.1.0/24" \
keinstien/atlas:latest
Флаги NET_RAW и NET_ADMIN требуются для отправки низкоуровневых пакетов при сканировании. Если пароль администратора не задан, аутентификация в UI отключается по умолчанию. Когда безопасность критична, задаем ATLAS_ADMIN_PASSWORD, после чего веб-интерфейс закроется экраном логина, а эндпоинты API потребуют bearer-токен.
После запуска веб-интерфейс доступен по адресу http://localhost:8888, а интерактивная документация Swagger — на http://localhost:8888/api/docs.
Кому пригодится
Atlas отлично вписывается в домашние лаборатории, небольшие офисные инфраструктуры или на выделенные staging-серверы, где часто поднимаются и тушатся тестовые стенды. Проект избавляет от необходимости держать в голове карту локальных адресов и помогает вовремя заметить забытый открытый порт.
Если хочется сначала пощупать интерфейс вживую, автор держит публичное демо на https://atlasdemo.vnerd.nl/ с логином admin и паролем change-me. Исходный код распространяется под лицензией MIT, поэтому проект можно смело адаптировать под собственные скрипты автоматизации.
