Отворен код • Python

AISMixer — AIS NMEA 0183 мултиплексор и сигурно препращане

AISMixer е Python услуга с отворен код за AIVDM/AIVDO AIS NMEA 0183 потоци. Тя приема данни от няколко приемника и приложения, премахва дубликати, сглобява multipart съобщения, нормализира мета хедъри и препраща чист обединен поток. Станциите могат да използват nmea_sproxy за автентикирана, криптирана и удобна за NAT защитена UDP връзка към AISMixer.

Накратко

  • UDP вход от множество AIS приложения/устройства
  • Multipart !AIVDM сглобяване (g-тагове)
  • Дедупликация и почистване/пренаписване на мета хедъри
  • Политика за времевия c-таг
  • Форуърд към няколко дестинации
  • AISMixer смесва и дедупликира; nmea_sproxy препраща сигурно един локален UDP вход към един SEC вход
  • ECDSA автентикация, AES‑GCM данни, криптиран ping/pong и възстановяване на връзката

Основни възможности

🔁

Обединяване и дедупликация

Обединява данни от няколко AIS източника, премахва повторенията и запазва най-актуалното съобщение за обработка.

⚙️

Интелигентни тагове

Управлява политиката за времевия c-таг, сглобява multipart съобщения чрез g-тагове и почиства външни мета хедъри.

🧭

Препращане

Разпределя чистия обединен поток към няколко UDP/TCP цели с отделни настройки за потребители и станции.

🛡️

Реализиран защитен транспорт

ECDSA автентикация, AES‑GCM криптирани данни, ping/pong проверка на връзката и възстановяване на сесията. Ключовете на станцията са station_private.pem и station_public.pem.

📦

Опашки и производителност

Независими опашки за обикновени и защитени портове, ефективна обработка на потоците и настройваем TTL кеш.

🌍

IPv4 и IPv6

Двустеков UDP вход и изход за станции и сървъри в различни мрежови среди.

🔍

Наблюдаемост

Проектът предвижда метрики и крайни точки за проверка на състоянието, а тестовете включват известни набори от дублирани AIS съобщения.

🚀

Развитие на проекта

Планирани са Docker образи и облачен панел за дистанционно управление на локални станции.

Архитектура

Поток на данните

  1. AIS приемник или приложение изпраща AIVDM/AIVDO съобщения към локален UDP вход.
  2. nmea_sproxy може да прехвърли потока по криптиран SEC вход към AISMixer; поддържат се и директни обикновени UDP входове.
  3. AISMixer обработва c/g тагове, сглобява multipart съобщения и премахва дубликати.
  4. След почистване и нормализиране потокът се препраща към конфигурираните цели.

Ясно разделени роли

AISMixer обединява потоци, дедупликира, управлява тагове и разпределя резултата към няколко цели.

nmea_sproxy е клиентски защитен прокси: един процес свързва един локален UDP вход с един криптиран SEC вход. Той не смесва потоци.

Работа в реални мрежи

Защитеният транспорт е предназначен за станции зад NAT, CGNAT или мобилна връзка. Автентикацията, криптираният ping/pong и възстановяването на сесията поддържат връзката надеждна без публичен адрес на станцията.

За кого е полезен AISMixer

Оператори на AIS станции

За хора и организации, които събират данни от няколко приемника и искат един чист поток без повторения към собствени или външни системи.

Морски общности и изследователи

Подходящ е за споделени приемни мрежи, тестови среди и анализ на AIS данни, където качеството и проследимостта на входа са важни.

Разработчици и интегратори

Отвореният Python код и ясното разделение между смесване и защитено препращане улесняват интеграцията с локални приложения, сървъри и специализирани морски системи.

Първи стъпки

Изтеглете проекта от GitHub и стартирайте AISMixer директно с Python. За една локална станция може да стартирате и отделен процес nmea_sproxy:

$ git clone https://github.com/iliyan85/aismixer
$ cd aismixer
$ python3 aismixer.py
$ cd nmea_sproxy && python3 nmea_sproxy.py
$ sudo systemctl start nmea_sproxy@boat

Името на systemd инстанцията, например boat, е свободно избран етикет. Нейната конфигурация описва връзката от един локален вход към един защитен изход.

Подробните настройки, примерите и актуалните инструкции са в README документацията.

Контакт и проект

AISMixer се разработва като проект с отворен код. Кодът, документацията и историята на промените са достъпни в GitHub хранилището.

Ако разполагате с AIS поток за тестване, набор от предварително означени дубликати или предложение за подобрение, отворете сигнал в GitHub.