Вы никогда не задумывались, а куда вообще коннектится все то что у вас дома в сети ? Все эти Windows, MacOS, iOS и прочие проприетарные и умные утюги ? А это не сложно посмотреть. Сегодня в нашем кружке 'Оч.умелые ручки' мы будем следить за теми, кто следит за нами.
Наша цель - построить карту и графики того куда коннектится все то что сидит в сети дома. И не по трафику, понятно что какая-то там условная Амедиатека будет в топе, а именно про то, куда устанавливаются соединения. Готовить будем на Mikrotik, Grafana и Victoria Logs. В результаты мы получим что-то вроде вот этого:
![](https://habrastorage.org/getpro/habr/upload_files/579/f25/bb7/579f25bb76f75e92efad7854e57af3fb.png)
Для изготовления 'блюда' нам понадобится всего 4 ингредиента:
Mikrotik
Linux или MacOS
Docker (вместе с его другом, composerом)
Немного умения консольных команд
1. Mikrotik это просто
Для начала зальём в mikrotik вот примерно такой конфиг, который будет следить за всеми новыми коннектами и вероломно сливать их нам по UDP syslog протоколу в victoria logs. Не забываем заменить x.x.x.x на адрес машины где будет поднята victoria logs, а y.y.y.y на внутренний адрес роутера
Скрытый текст
/system logging action set 3 remote=x.x.x.x remote-port=5514 src-address=y.y.y.y syslog-facility=local0
/system logging add action=remote prefix=:Firewall topics=firewall
/ip firewall filter add action=passthrough chain=forward comment="all new connections" connection-state=new log=yes log-prefix=new-connection
2. Готовим микросервисы
Дальше все еще проще
Ставим на машину git, docker и docker compose если у вас Linux и git, orbstack и docker compose если у вас MacOS
Клонируем себе заранее приготовленную репку https://github.com/sergeygalkin/habr.git
Виртуозно исполняем всего пару команд
cd habr/mikrotik-victorialogs-mapip
docker compose up -d
В результате которых должно:
Cтартануть 3 сервиса
Появится два docker volume (для графаны и victoria logs)
Собраться один имидж тупенького сервиса на питоне, который по запросу графаны лезет в victoria logs, запрашивает статистику за последний день, конвертит адреса в города, страны и координаты и отдает в виде json
Запустится графана с одной дашбордой IP Map и datasource настроенный на сервис из пункта 3
3. Как пользоваться этой шнягой
Если вы все настроили правильно то должно произойти следующее
На адресе http://127.0.0.1:9428/select/vmui у вас должен появится вот такой симпатишный UI, который можно использовать для поиска всякого по ip адресам и портам
![](https://habrastorage.org/getpro/habr/upload_files/3e0/56c/d72/3e056cd7210ea42d242c1cca59b22738.png)
Команда`curl http://127.0.0.1:5555/city_data` должна отдавать что-то такоe:
Скрытый текст
[{"city":"Moscow","count":19},{"city":"Paris","count":3},{"city":"Falkenstein","count":2},{"city":"Engel's","count":6},{"city":"Frankfurt am Main","count":32},{"city":"Dublin","count":19},{"city":"San Jose","count":1},{"city":"Stockholm","count":19},{"city":"Victoria","count":1},{"city":"Khasavyurt","count":1},{"city":"Boardman","count":3},{"city":"Helsinki","count":6},{"city":"Amsterdam","count":7},{"city":"Los Angeles","count":2},{"city":"M\u00fcnchwilen","count":1},{"city":"San Francisco","count":6},{"city":"Marseille","count":1},{"city":"Hangzhou","count":1},{"city":"London","count":2},{"city":"Newark","count":1},{"city":"Kansas City","count":7},{"city":"Perm","count":1},{"city":"Ashburn","count":32},{"city":"Kista","count":6},{"city":"Warsaw","count":7},{"city":"Sassenburg","count":1},{"city":"Bucharest","count":6},{"city":"Mountain View","count":1},{"city":"Tokyo","count":3},{"city":"Phoenix","count":1},{"city":"D\u00fcsseldorf","count":3},{"city":"Montreal","count":2},{"city":"Edison","count":1},{"city":"Groningen","count":2},{"city":"Boydton","count":5},{"city":"Lappeenranta","count":3},{"city":"B\u00f6nen","count":1},{"city":"Chicago","count":1}]
На урле http://127.0.0.1:3000/d/geiop/ после ввода логина и пароля
admin/SuperSecret
должна появится дашборда как на первом скриншоте.
Особенности 'блюда'
Секурность у описанного сетапа близка к нулю, пароль только на графане, http вместо https, порты торчат наружу, так что не надо это разворачивать на виртуалке в интернете, но для дома вполне сойдет.
Самописный сервис на питоне не зря пишет при старте `WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead` он именно такой, исключительно для домашней нагрузки
Если вы заметили на дашборде графны нельзя выбрать интервал времени как обычно, интервал в 1 день захардокожен в строке " _time:1d"
Надо понимать что запись в логе микротика
new-connection
говорит о том что что-то внутри пыталось установить соединение, но это не значит что это сделать удалось
Бон аппетит.
Комментарии (8)
DikSoft
15.02.2025 07:42Порядок запуска в WSL2: Сработает в Windows 11 version 22H2 и выше
1) в каталоге HOMEPATH (обычно это C:\Users\user_name\ )создаем или правим файл .wslconfig чтобы он содержал строку:[wsl2] networkingMode=mirrored
2) В Windows Firewall создаем два правила , одно для UDP 5514 , второе для TCP 3000 , 5555 , 9428
3) В запущенном WSL:
sudo passwd root # вводим новый пароль для root su - ip a # - запоминаем IPv4 адрес для Mikrotik apt install git docker docker-compose git clone https://github.com/sergeygalkin/habr.git cd habr/mikrotik-victorialogs-mapip docker-compose up -d
Дальше по тексту.
PS Можно завернуть входящий трафик в WSL ещё несколькими способами, но этот самый простой, хотя и менее безопасный.
DikSoft
15.02.2025 07:42PS2 В таком варианте подключиться к WEB морде можно будет :
1) С соседнего компьютера по IP машинки с WSL2
и/или
2) С того же самого компьютера с браузера, установленного в WSL2:apt install chromium
3) Запускаем браузер: Linux GUI App in WIndows 11 Start menu
chaynick
Прелестно, просто прелестно! Не расскажите только как может тот же 8.8.8.8 находится в США если RTT из Москвы до него 5-10 мс - можете сами посчитать что оказывается США от Москвы находится в 1500 км теоретического предела - и это без учета не прямой прокладки линий, задержки на оборудовании и меньшей скорости света в волокне. Может не стоит уже использовать geoip в век CDN и bgp anycast?
sergeygals Автор
мне кажется 8.8.8.8 не очень удачный пример, на запросы в него давно отвечают провайдеры, а не cам 8.8.8.8. Такие сервисы надо заворачивать куда нужно и тогда пинг становится ~80 ms. ну и в целом надо понимать что geoip да еще на статичной базе на диске далека от 100% точности
lantonov
Если бы bgp не было такого быть не может так как каждая. Область имеет владельца и ели что через Россию очень много транзита идёт
sergeygals Автор
Ну я примерно представляю что такое bgp и протоколы маршрутизации, как и роутинг, но мысли все равно не понял :) какая разница как идёт трафик если составители базы знают (или утверждают что знают) что вот это конечный ip живёт в такой то стране ?
lantonov
Иза количества пирингов Гугла между провайдерами как и cloudflare так время задержки сокрящяетя так работает протокол bgp