>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
JavaScript

Wizualna mapa Twojej sieci lokalnej i kontenerów bez zbędnego zachodu

Gdy domowy serwer lub stacja robocza gromadzi kilkadziesiąt kontenerów, maszyn wirtualnych i usług testowych, śledzenie ich staje się trudne. W końcu zastanawiasz się: jaki adres IP ma aktualnie baza danych, które porty są wystawione i do jakich sieci Docker jest podłączony ten stary worker? Zazwyczaj musisz otworzyć terminal, przeszukać wyniki polecenia docker inspect, uruchomić nmap i ręcznie złożyć te informacje w głowie.

Niedawno natknąłem się na Atlas, projekt open-source autorstwa programisty Karam Ajaj. To narzędzie przejmuje tę rutynową pracę: skanuje lokalne podsieci, pobiera szczegóły kontenerów przez gniazdo Docker i renderuje interaktywną mapę sieci bezpośrednio w przeglądarce.

Co siedzi pod maską i jak to działa

Architektura Atlas łączy kilka znanych komponentów, spakowanych w jeden kontener:

  • Skaner jest napisany w Go 1.22. Binarka wykonuje niskopoziomowe żądania sieciowe przez ARP i ping, odpytuje gniazdo Docker i przeprowadza głębokie skanowanie otwartych portów. Wszystkie wyniki są przechowywane w lokalnej bazie danych SQLite.
  • Backend działa na FastAPI. Udostępnia wykryte hosty przez REST API, zarządza sesjami i przyjmuje polecenia inicjujące skanowanie.
  • Interfejs web jest zbudowany w React, serwowany przez NGINX, który również proxyje żądania API.

Ten stos działa autonomicznie. Nie trzeba konfigurować crona wewnątrz kontenera: okresowe odpytywanie podsieci jest obsługiwane przez timery w Go.

Główne funkcje

Głęboka inspekcja Docker

Wiele podobnych narzędzi zawodzi, gdy kontener ma wiele interfejsów sieciowych. Atlas śledzi każdy interfejs osobno. Jeśli kontener ma wiele wewnętrznych adresów IP i adresów MAC, wszystkie pojawiają się na wykresie powiązane z określonymi nazwami sieci. Narzędzie parsuje również metadane obrazu, próbując określić typ systemu operacyjnego.

Wykrywanie sąsiednich hostów

Atlas nie zatrzymuje się na lokalnym hoście. Zmienna SCAN_SUBNETS pozwala określić rozdzieloną przecinkami listę podsieci, na przykład 192.168.1.0/24,10.0.0.0/24. Skaner wykrywa dostępne urządzenia, pobiera odciski palców systemu operacyjnego i sprawdza dostępne porty. Ten sam host widoczny z różnych kart sieciowych jest oznaczany odpowiednimi etykietami interfejsów.

Interaktywna wizualizacja

Graf sieciowy można przełączać między układem kołowym a hierarchicznym. Jeśli widok graficzny nie jest w danym momencie wygodny, dostępna jest standardowa tabela hostów ze wszystkimi parametrami, filtrami i wyszukiwaniem. Interfejs jest przyjazny dla urządzeń mobilnych, więc możesz sprawdzić status sieci z telefonu.

Układ kołowy panelu

Układ hierarchiczny panelu

Tabela hostów

Panel logów

Elastyczne planowanie przez API

Interwały sprawdzania są ustawiane przy starcie, ale można je zmieniać w locie bez restartu kontenera. Dedykowane punkty końcowe API to obsługują:

# Проверить текущие интервалы
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}'

Jak wdrożyć to samodzielnie

Najszybszy sposób na wypróbowanie to uruchomienie gotowego obrazu Docker. Narzędzie potrzebuje dostępu do sieci hosta i gniazda demona:

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

Flagi NET_RAW i NET_ADMIN są wymagane do wysyłania niskopoziomowych pakietów podczas skanowania. Jeśli nie ustawiono hasła administratora, uwierzytelnianie w interfejsie UI jest domyślnie wyłączone. Gdy bezpieczeństwo jest krytyczne, ustaw ATLAS_ADMIN_PASSWORD, po czym interfejs web będzie chroniony ekranem logowania, a punkty końcowe API będą wymagać tokena bearer.

Po uruchomieniu interfejs web jest dostępny pod adresem http://localhost:8888, a interaktywna dokumentacja Swagger pod http://localhost:8888/api/docs.

Dla kogo to jest

Atlas idealnie sprawdza się w laboratoriach domowych, małych infrastrukturach biurowych lub dedykowanych serwerach stagingowych, gdzie środowiska testowe są często tworzone i usuwane. Projekt eliminuje potrzebę utrzymywania mentalnej mapy lokalnych adresów i pomaga w porę wykryć zapomniany otwarty port.

Jeśli chcesz najpierw zapoznać się z interfejsem, autor prowadzi publiczne demo pod adresem https://atlasdemo.vnerd.nl/ z nazwą użytkownika admin i hasłem change-me. Kod źródłowy jest wydany na licencji MIT, więc możesz śmiało dostosować projekt do własnych skryptów automatyzacji.

Powiązane projekty