DevOps Brain 🧠
1.21K subscribers
127 photos
16 videos
119 links
Пишу про kubernetes, terraform, linux, сети, автоматизации и полезные тулзы. Без спама и щитпостинга.

Хотите пообщаться? @devopsbrain_chat

Автор: @itcaat
Download Telegram
Media is too big
VIEW IN TELEGRAM
🔖 Полезные TUI тулзы - git-igitt

У меня скопилось какое-то количество крутых TUI тулов, которыми пользуюсь и хочу с вами тоже делиться.

Некоторые супер известные - из серии lazydocker, lazygit и тд. Но банальщину оставим на потом. Хочется показать менее известные TUI-тулзы.

И первая тулза это git-igitt. Она нужна для просмотра Git-истории с читаемыми графами веток прямо в терминале.

Плюшки:

• визуальные Git-графы в терминале
• навигация по коммитам
• просмотр diff-ов
• кроссплатформенный

Установить можно через cargo или скачав соотвествующий бинарь со страницы релизов.


# Установить cargo можно командой curl https://sh.rustup.rs -sSf | sh
cargo install git-igitt


Навигация очень простая - просто стрелками на клавиатуре вверх вниз влево и вправо.

#tools #git

---
DevOps Brain | Github
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Media is too big
VIEW IN TELEGRAM
🔖 Полезные TUI тулзы - dive

Рано или поздно у тебя или твоих коллег появляется Docker-образ, который по какой-то причине весит в разы больше, чем ожидали. Часто виной тому - лишние логи, кэш пакетных менеджеров (apt, npm, pip), или даже исходный код, который не нужен в runtime.

Как следствие pull образа занимает вечность, ну а дальше сильно замедляется развертывание в кластерах или на нодах.

Возникает вопрос: как посмотреть, что находится внутри этого образа и как сделать его меньше? Именно для этого и нужен dive.

По сути dive - это рентген для Docker-образов, который покажет:

- Все реальные слои файловой системы образа.
- Какие именно файлы были добавлены, изменены или удалены в каждом слое.

Попробуйте запустить dive на своем самом большом образе - гарантирую, вы удивитесь =)


# https://github.com/wagoodman/dive
dive <your-image:tag>


#tools #tui

---
DevOps Brain | Github | YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥121
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы - ncdu

ncdu - самая топовая тулза для быстрого поиска куда утекло место на серваке или локальной машинке.

В отличие от обычной команды du, утилита ncdu предоставляет удобный интерфейс, который облегчает навигацию по папкам, позволяет быстро и наглядно находить самые жирные файлы и директории.

Я покажу 2 примера использования - в базовом варианте ( будет достаточно для 99 процентов случаев ):


ncdu <some_path>


Расширенный пример с самыми интересными параметрами, которые потенциально могут пригодиться.


# --exclude-caches - не учитывать кеши
# --exclude '*.log' - не учитывать log-файлы
# --color dark - темная тема
# --show-percent - показывать процент от общего размера
# -- graph-style - стиль графической полоски (чисто вкусовщина для красоты)
ncdu --exclude-caches \
--exclude '*.log' \
--exclude '/proc/*' \
--color dark \
--show-percent \
--graph-style half-block <some_path>


Пакет доступен для всех популярных linux-дистрибутивов и macos. Пример как она работает есть на видео - как видно больше всего места в моем домашнем каталоге жрет Counter Strike oO.

#tools #cli #linux

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤‍🔥1
🔖Симулируем сети в GNS3. Часть 1 - настройка под MacOS

Я тут в праздники упоролся и подготовил материал на тему проектирования сетей в графическом симуляторе GNS3. Это будет небольшой цикл из нескольких статей в которых мы:

- Научимся работать в GNS3
- Настроим MikroTik RouterOS через консоль
- Изучим конфигурацию статических и динамических IP-адресов с разными пулами адресов
- Реализацем NAT для доступа в интернет
- Настроим Firewall правила на MikroTik:
- Воспользуемся адресными списками для упрощения управления
- Реализуем сегментацию сети и реализауем политики безопасности

Ну и на вкусное: пересоберем сеть с использованием Cisco L2-коммутатора, настроим VLAN и подрубим OSPF. Ну и вообще разберемся раз и навсегда на реальном примере как это работает на самом деле и зачем это нужно =)

Но для начала, если у тебя macOS на m-проце, я подгтовил пост как там настроить GNS3. К сожалению, там надо немного поплясать что симулятор заработал. Для остальных ОС проблем нет поставить и настроить. В общем - надеюсь тебе будет интересно.

https://habr.com/ru/articles/983362/

---
📱 Telegram 📱 Github 📱 YouTube 📱 Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤‍🔥73
🔖Симулируем сети в GNS3. Часть 2 - делаем свою первую сеть

Как и обещал я выкатываю 2-ую часть по симулятору сетей GNS3.

В статье мы разберем:
- Работу с GNS3 для моделирования сетей.
- Настройку MikroTik RouterOS через консоль (CLI).
- Конфигурацию статических и динамических IP-адресов.
- Настройку DHCP-серверов с разными пулами адресов.
- Реализацию NAT для доступа в интернет.
- Создание и применение Firewall правил.
- Использование адресных списков для упрощения управления.
- Сегментацию сети и реализацию политик безопасности.

Я буду очень рад если вы накидаете плюсов на хабре под постом. 😌

➡️ https://habr.com/ru/articles/988152/

---
📱 Telegram 📱 Github 📱 YouTube 📱 Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы - posting

Продолжаю делиться с вами крутыми TUI-тулзами. И сегодня на очереди posting - это супер крутой терминальный клиент для HTTP-запросов. Типа Postman, только без лишнего мусора в интерфейсе.

Вот ключевые фишки:

🔵 Вставка одной командой. Берете свой curl-запрос и нажимаете ctrl+v(cmd+v) и ваш запрос полностью переносится в интерфейс posting со всеми параметрами.
🔵 Экспорт обратно в curl делается также легко как и вставка.
🔵 Command palette + автодополнение - запросы собираются в пару нажатий.
🔵 Возможность использовать переменные окружения и env-файл.
🔵 Есть разные темы под любое настроение.

Тебе точно зайдет posting, если ты:

🔵 уверенно пользуешься curl, но хочется чего-то удобнее и быстрее
🔵 периодически отлаживаешь API и уже устал каждый раз руками собирать запросы
🔵 хочешь красивый и понятный интерфейс, но без Postman’овского “космолёта”
🔵 хочешь крутой tui-тул для работы с http-запросами

---
📱 Telegram 📱 Github 📱 YouTube 📱 Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥3
🔖Полезные TUI тулзы - witr

Иногда в проде происходит самая раздражающая вещь: ты видишь, что что-то запущено, но не понимаешь почему оно вообще живёт.

• ps покажет PID
- ss покажет порт
- systemctl покажет сервис

А вот связать всё это в одну понятную картинку - обычно ручной квест. И вот тут внезапно очень хорошо заходит утилита witr.

Сразу разберем пример использования на моей экспериментальной виртуалке где-то во Франции =)).


# Посмотрим по имени процесса.
root@dns:~# witr angie
Multiple matching processes found:

[1] angie (pid 35980)
angie: master process v1.11.2 #1 [/usr/sbin/angie -c /etc/angie/angie.conf]
[2] angie (pid 35981)
angie: worker process #1

Re-run with:
witr --pid <pid>

# Не повезло - у нас несолько пидов(уж простите за сквернословие)
# Поэтому посмотрим что там скрывается и почему работает 35981
root@dns:~# witr --pid 35981
Target : angie
# Это воркер, которого породил мастер-процесс ибо forked
Process : angie (pid 35981) {forked}
User : angie
Command : angie: worker process #1
Started : 6 days ago (Wed 2026-01-21 15:56:34 +00:00)
Restarts : 1

# Вот эта и есть killer-фича. Мы видим кто его породил!
# Systemd поднял master-процесс angie, а тот породил worker.
# Те это нормальный сервис под управлением init-системы
# А не кто то руками запустил.
Why It Exists :
systemd (pid 1) → angie (pid 35980) → angie (pid 35981)

Source : systemd

Working Dir : /

# Сразу видим порты на которых висит процесс мордой вперед
Listening : 0.0.0.0:44301
0.0.0.0:443
[::]:443
0.0.0.0:80

# Предупреждения - все по делу, ибо нефиг. Надо исправлять!
Warnings :
• Process is listening on a public interface
• Process is running from a suspicious working directory: /


И последнее - witr не пытается заменить systemd или сетевые утилиты. А просто экономит время, особенно когда ты на дежурстве и голова уже не варит.

Ну и бонусом можно не по pid-у пробивать процесс, а по занятому порту и дальше уже подключать детальный вывод с pid:


root@dns:~# witr --port 44301
Multiple matching processes found:

[1] angie (pid 35980)
angie: master process v1.11.2 #1 [/usr/sbin/angie -c /etc/angie/angie.conf]
[2] angie (pid 35981)
angie: worker process #1

Re-run with:
witr --pid <pid>


Полная инструкция и примеры использования: https://github.com/pranshuparmar/witr

---
📱 Telegram 📱 Github 📱 YouTube 📱 Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы - cli-stash

Ребята, я сегодня релизнул cli-stash. Это TUI-утилита на Go + Bubble Tea для сохранения shell-команд в "избранном".

Она решает простую боль: сложные команды (docker, kubectl, ffmpeg) постоянно забываются, а копаться в history каждый раз это страдание.

Что умеет:
• Ctrl+A открывает историю шелла с поиском для добавления в избранное
• Нечеткий поиск
• Сортировка по частоте использования

И самое крутое, что команда вставляется прямо в терминал. Таким образом вам не надо ничего копипастить: нашел → выбрал → enter → команда уже в cli.

Установка в Linux:
go install github.com/itcaat/cli-stash@latest

# Build and install from source code
git clone https://github.com/itcaat/cli-stash.git
cd cli-stash
go build -o cli-stash .
sudo mv cli-stash /usr/local/bin/

Установка в MacOS:
# Install MacOS
brew install itcaat/tap/cli-stash

Использовать так (см. демку):
cli-stash

Исходники и инструкция по использованию есть на github

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥9❤‍🔥32
This media is not supported in your browser
VIEW IN TELEGRAM
Ребята, важная инфа 🚨

Я запускаю закрытый канал “Сундук айтишника”.

Несколько раз в день туда будут попадать самые сочные open-source находки с GitHub.

Что внутри?
🔸 6-8 самых сочных opensource-проекта в день с кратким описанием.
🔸 Никаких лонгридов. Коротко, по делу, только суть.
🔸 Фильтр на 95% шума. Только работающие и актуальные инструменты.

⚡️ Для первых 1000 подписчиков — бесплатно навсегда. Потом только — платный вход.

Забрать бесплатный доступ...

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4😁4🔥331
🔖Симулируем сети в GNS3. Часть 3 — Переходим на Cisco и VLAN

Вчера выложил 3-ю часть по сетям хабр, которая позволяет все больше погрузиться в практику конфигурирования сетей.

В ней мы пройдем полный путь построения сегментированной корпоративной сети. Начнем с настройки простейшей сети на MikroTik RouterOS в GNS3, настроим базовую маршрутизацию и DHCP.

Затем добавим интернет-доступ через NAT. После этого заменим простые виртуальные PC на Alpine Linux для реалистичности.

Далее научитимся создавать правила для фильтрации трафика между сегментами (сотрудники, гости, серверы), использовать адресные списки и логировать срабатывания.

По итогу получим готовую, безопасную и масштабируемую сетевую инфраструктуру с продуманными политиками доступа. Все этапы сопровождаются подробными командами, скриншотами и пояснениями.

Тыц...

UPD: скорее всего не буду больше продолжать цикл. Можно было уже перейти дальше к динамической маршрутизации, но там можно бесконечно масштабировать эту историю. К сожалению дальше продолжать цикл ни времени ни желания уже нет, лучше выделю время на более интересные штуки.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6😁2
🔖OOM Killer в Linux - press F to pay respects

Когда в Linux заканчивается оперативная память, система стоит перед критическим выбором: зависнуть полностью или пожертвовать одним из процессов, чтобы выжить. За это жёсткое, но необходимое решение отвечает механизм OOM Killer (Out-of-Memory Killer).

Он не убивает процессы случайно. Вместо этого для каждого вычисляется "рейтинг плохости". Процесс с наивысшим рейтингом признаётся наименее важным и подлежит уничтожению. В расчёте участвуют почти все процессы, кроме init и потоков ядра (kernel threads).

Мы не будем вдаваться сейчас в детали реализации этого механизма - об этом написано уже множество статей. Вместо этого мы сразу посмотрим на сервере какой рейтинг у каждого процесса с помощью однострочника:


for p in /proc/[0-9]*; do pid=${p##*/}; [ -r $p/oom_score ] && printf "%4s %5s %8s %s\n" "$(cat $p/oom_score 2>/dev/null)" "$(cat $p/oom_score_adj 2>/dev/null)" "$pid" "$(cat $p/comm 2>/dev/null)"; done | sort -nr | column -t


Нам интересны 1 и 3 колонки, в которых oom_score и PID соответственно. Наш вывод говорит что, если придет oom kill, то первый “на вылет” fail2ban-server.


**700 0 131351 fail2ban-server**
693 0 1254 node
692 0 131649 fwupd


А теперь самое интересное...На самом деле можно принудительно вызывать oom killer командой:


$ sudo echo f > /proc/sysrq-trigger
$ sudo dmesg

[114247.906865] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/fail2ban.service,task=fail2ban-server,pid=131351,uid=0
[114247.906966] Out of memory: Killed process 131351 (fail2ban-server) total-vm:886820kB, anon-rss:19928kB, file-rss:30592kB, shmem-rss:0kB, UID:0 pgtables:628kB oom_score_adj:0


[PRESS F TO PAY RESPECTS] как говорится. Совпадение это или нет мы не знаем. Но я почти уверен, что 10 лет назад один из контибьютов в ядро Linux (mchehab) сделал отсылку к Call Of Duty намеренно. 🤯

Всем хорошей пятницы! А если тебе интересно как именно ядро считает тот самый oom_score - поставь 🔥

UPD: ошибочка вышла - это просто совпадение =(

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤‍🔥62
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Kubernetes & terraform starter kit

Ребята, я тут вспомнил что когда-то делал репозиторий для того, что бы можно было пощупать kubernetes+terraform локально прямо в Docker Desktop. Сегодня я его немного причесал и готов показать вам.

Если вам нужна песочница, в которой вы могли бы пощупать IAC и кубер, то забирайте тут https://github.com/itcaat/terraform-kubernetes-desktop-startkit

Внутри:
• Ingress Nginx
• cert-manager выпускает валидные TLS-сертификаты локально
• echo-сервис для экспериментов

Это не продакшн-решение. Это учебная песочница, чтобы понимать, как оно работает под капотом, а не просто читать. А полноценный гайд по использованию есть в readme.

---
Telegram | Github | YouTube | X | 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1342
Нашёл интересный опенсорс-инструмент для тех, кто живёт в Proxmox / Docker / Kubernetes. Это такой “single pane of glass”.

• Инфра, ворклоады, бэкапы, сторидж – сгруппировано по задачам, а не по источникам.
• Алерты Slack / Discord / Telegram / Email из коробки.
• Есть персистентное хранение истории с retention.
• Нормальный визуальный обзор бэкапов.
• Можно подключить AI и задавать вопросы по инфраструктуре.


docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest



Это не замена полноценному продовому мониторингу уровня большой компании. Но как операционный обзор + AI-ассистент по инфраструктуре – выглядит очень прикольно.

Live Demo: https://demo.pulserelay.pro
Repo: https://github.com/rcourtman/Pulse

---
Telegram | Github | YouTube | Twitter
🔥63❤‍🔥2
🎮 Выкатил симулятор закрытых задач iKanban

Ну его нафиг, эту улицу с -14 “за бортом”. Всё утро с кофе и ноутом: допиливал пет-проекты и новую браузерку до состояния “не стыдно показать людям”.

Идея родилась на работе, когда мы с коллегами обсуждали, что кайфово когда задачки закрываешь. Мозг же реально выдает дофамин, когда задача уходит в DONE. Получается, что мем "Секс – это круто, но пробовали ли вы закрывать таски?" – уже не шутка, а жиза.

Поэтому я собрал игру, где вы:
• Выбираете персонажа (DevOps, SRE, Backend, Frontend)
• Получаете тонны абсурдных задач
• Хватаете дофамин от их выполнения
• Угараете в чате над виртуальными коллегами и залипаете кайфовую музыку

Залипать сюда 👉 https://t.me/ikanban_bot?startapp или просто на https://ikanban.ru.

P.S. Если что-то пойдет не так или захочется поругать – велкам в комменты. Похвала тоже принимается. А если хотите чтобы я рассказал в следующих постах как быстро поднимать микро-продукты – то ставьте 🔥.

---
🚀 Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18😁1
Простите, после обеда не могу больше работать. У меня кошка заблокировала ноут. 😁
❤‍🔥20
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы snitch

Нашел htop для сетевых соединений - назвается snitch.

Открываешь и сразу понятно:
• кто слушает порт
• какой PID
• какой процесс
• какие соединения висят в established
• куда сервис вообще ходит
• можно прибить прямо из интерфейса

Также можно фильтровать TCP/UDP, отдельно LISTEN, отдельно ESTABLISHED, искать, сортировать.

Ставится "изи-пизи":


brew install snitch

или


go install github.com/karol-broda/snitch@latest


Забрать тут: https://github.com/karol-broda/snitch

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11😁21
Информации стало слишком много и нужно что-то с этим делать. Сколько у вас там сохранных статей и видео, которые вы скорее всего никогда не прочитаете и не посмотрите?

Вот у меня такая же печаль. Я вижу очень большую проблему в структурировании данных которых мне нужны как для работы, так и для повседневной жизни.

И проблема даже не в том, что мы плохие и ленивые - дело в контексте. Мы думаем да - это классная статья, я сохраню и потом прочитаю. Но когда настает время прочитать появляется другая классная статья. А через какое-то время еще и еще… А ваш контекст уже переключился на что-то другое и вот в вашей коллекции еще один артифакт.

А что по поводу внезапных идей? Мы идем по улице и БАЦ к вам приходит какая то мысль: это может быть какое улучшение, новый сервис или вы поняли как решить проблему, которую не могли решить уже несколько дней. Хочется куда записать… В голосовухи? В телегу в Saved Messages который итак уже скоро разорвет от хаоса внутри? Короче, это боль. Я умею структурировать данные, я просто не хочу больше это делать. Мне надело быть “оператором ЭВМ” (в 90-е была такая профессия кстати).

И вчера вечером я немного завис над созданием Telegram-бота в роли персонального мультиагентного асситента с памятью о всех переписках и данных которые в него попадут. Я хочу мини-монстрика, в который кормишь просто любую инфу, узкопрофильные вопросы (например по автомобилю, бизнесу, ветеринарии для кошки и тд), свои календари, внутренню базу знаний и оно автоматом все структурирует. Пока цель MVP просто кидаю текст, голос, ссылку или документ в pdf формате в бота и потом могу обращаться через бота к этим данным, например также отправив голосовуху: “Напомни мою идею про то как починить прод =)”. А еще сразу хочу, чтобы если мог попросить ответить голосом, на случай если я за рулем, то оно слало голосовуху.

Почему не взять готовые инструменты? Не хочу. Да, вот так тупо. Мне интерсно поковыряться в векторных базках и построить что-то сложное на базе n8n. В итоге поставил selfhosted n8n + supabase на тестовую вмку где-то в Нидерландах, что бы накрутить MVP и сразу получил в бубен по утилизации =)).

Ну и вопрос к вам - вы как у себя решаете эту проблему структурирования информации и сколько оно отнимает у вас времени и сил?

---
Telegram | Github | YouTube | Twitter
🔥16❤‍🔥3😁2
В продолжении вчерашнего поста про идею создать себе AI-ассистента на базе telegram+ n8n…Решил немного поделиться с вами к чему я пришел и где я продолбался.

👏 Скажу сразу у меня получилось собрать MVP. Из плюсов – оно работает и у меня уже есть какой-то базовый ассистент. Я могу в него голосом говорить, фотки документов отправлять (кстати надо добавить туда юриста) через телегу, могу сохранять ссылки, создавать события в календаре, есть финансовый консультант и даже DBA/Sysadmin/Sre и сетевик в одном лице =) И это ОФИГЕТЬ КАК УДОБНО!

Первым делом я выпилил selfhosted supabase (нафиг он нужон то был?!) и воткнул обычный postgres + vector extension. И теперь моей виртуалочке не так больно, а то load avarage в 178 это было жоска. Ну и прикрутил туда cloudbeaver, чтобы в базку ходить и запросики выполнять. Избыточно, но просто давно хотел посмотреть на веб-версию dbeaver.

✍️ Дальше нарисовал схемку бд со слоями памяти:

conversations (рабочая память) – всё что я говорил и что отвечал ассистент. Используется для контекста текущего и прошлых разговоров. С вектором embedding можно семантически искать релевантные прошлые сообщения.

user_rules(правила пользователя) – это для оркестратора. Если ассистенту сказали “Запомни, меня надо называть МОЙ ПОВЕЛИТЕЛЬ”, то он будет так обращаться. Еще для примера можно сказать “Запомни, всегда отвечай кратко”. Суть вы поняли – через эту штуку можно корректировать поведение.

agent_memories(память конкретных агентов) – это отдельный слой, который ты спрашиваешь. Каждый агент (путешественник, финансист, айтишник и т.д.) хранит свои наблюдения о пользователе – например, психолог запомнит "у пользователя тревожность по поводу работы”.

По итогу был о накручено некоторое количество ворклошек в n8n. К счастью тут мы ограничены только нашей фантазей, так как агенты со специализацией это по сути копипаста. И мы можем уже на их основе добавлять новых агентов-специалистов.

☔️ Ну а теперь где я продолбался. И это (барабанная дробь …) single-hop архитектура. Я протупил в самом начале и теперь оркестратор выбирает одного агента и на этом цепочка заканчивается. Таким образом агенты изолированы – ни один из них не может вызвать другого.

Разберем на реальном примере: "Найди когда нам надо на прививку коту и создай запись в календаре". Orchestrator может выбрать только одного. Если выберет Ветеринара – тот ответит датой, но не создаст событие. Если выберет Календарь – у него нет знаний о прививках. А это явно не то что хочется получить в конце.

Система полностью stateless, нет multi-turn диалога. Если я попрошу создать в календаре событие – агент просто это сделает. Он не проверяет, свободно ли 15:00. По хорошему надо добавить (добавить List Events перед Create) и агент должен сказать: "В 15:00 занято, создать всё равно?". Принять следующее сообщение "да" / "нет" / "тогда в 16:00" в контексте этого вопроса и действовать от этого. Что бы это решить надо pending_actions табличку чтобы контекст не терялся. Ну и прикрутить какой то таймаут для контекста.

Короче, получается как в известном меме: “Миша, всё … – давай по новой” (с)

PS И ребят, если вам интересно что в итоге получится – пролайкате пост 😕, мне хочется понять, что небольшой перекос в продуктовые эксперименты вам тоже ок.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43😁4
🔖 Приватная сеть в ZeroTier за пару минут

Ребята, решил я недавно поиграться с Dokploy в рамках экспериментов n8n и AI-ассистента. Ну и пока настраивал, заодно решил показать вам ZeroTier.

ZeroTier – это сервис, который позволяет объединить устройства через интернет так, будто они находятся в одной локальной сети.

На самом деле очень крутая штука, тем более что в рамках free-тарифа можно добавить до 10 устройств. Таким образом у нас будет крутая overlay-сеть и мы можем изи-пизи объединить все наши VPS, ноутбуки и телефоны. И самое главное, что будет не важно, что они сидят за NAT. А вся настройка отнимет у вас минут 10:

1. Регаемся на сайте https://www.zerotier.com и прыгаем в личный кабинет.

2. Там создаем новую сеть. Cохраняем себе Network ID. Он понадобиться чтобы к сети присоединиться. У меня это 3b19b3a716137783.

3. Идем на страницу загрузки клиентов https://www.zerotier.com/download. Копируем команду установки и ставим на VPS сервер:

curl -s https://install.zerotier.com | sudo bash


4. Теперь подключимся сразу к новой сети pets. После выполнения получите 200 join OK.


sudo zerotier-cli join 3b19b3a716137783


5. Переходим в админку в нашу сеть pets и авторизуем клиента.

6. Теперь я добавлю локальную машинку. Качаю клиента под свою ОС чтобы оказаться в приватной сети с VPS. Там ввожу Network ID для подключения и делаю апрув в админке.

7. Zerotire нам выдаст рандомный ойпешник в приватной сети. Давайте слегка это исправим. Нырнем в админке в устройство 8b26a132b7 (это VPS) и пропишем в Managed IPs красивый ойпешник 10.75.142.1.

На этом базовая настройка завершена. Устройства будут видеть друг друга в рамках приватной сети 10.75.142.0/24.

Но для большей безопасности и удобства (иначе зачем это всё?) надо настроить firewall. У меня стоит Dokploy, поэтому я хочу сделать открытыми порты 80 и 443. А всё остальное будет открыто только в сети ZeroTier. (ens3 - это внешний интерфейс на VPS, zt+ - это интерфейсы ZeroTier)

8. Подключимся к VPS 10.75.142.1ЭТО ВАЖНО и забекапим текущие правила на всякий.

iptables-save > /root/iptables.backup.$(date +%F_%H%M).rules


9. Закрываемся от мира. Обратите внимание – после применения этих правил доступа к ssh по внешнему интерфейсу не будет. Но так и задумано!


# Сначала базовые allow (в начало)
iptables -I INPUT 1 -i zt+ -j ACCEPT
iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 3 -i lo -j ACCEPT

# Публично только 80/443 через ens3
iptables -I INPUT 4 -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -j ACCEPT

# Всё остальное входящее — DROP
iptables -P INPUT DROP

iptables -F DOCKER-USER

# Разрешаем ответы
iptables -A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# ZeroTier полный доступ
iptables -A DOCKER-USER -i zt+ -j ACCEPT
iptables -A DOCKER-USER -o zt+ -j ACCEPT

# Контейнерам можно инициировать соединения наружу
iptables -A DOCKER-USER -i docker0 -j ACCEPT

# Снаружи (ens3) только 80/443
iptables -A DOCKER-USER -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -i ens3 -p tcp --dport 443 -j ACCEPT

# Остальное снаружи в docker — DROP
iptables -A DOCKER-USER -i ens3 -j DROP

iptables -A DOCKER-USER -j RETURN


Установим iptables-persistent и сохраним правила, чтобы не отрыгнуло после ребута


apt-get update && apt-get install -y iptables-persistent && netfilter-persistent save


В итоге мы получаем приватную сеть с нашими девайсами, которые видят друг друга напрямую. А для внешнего интерфейса открыт только 80 и 443 – в моем случае это Traefik в docker. И теперь на VPS если я сделаю гадость вот так:


docker run -d --name my-redis -p 6379:6379 redis:latest


То порт 6379 будет доступен только в приватной сети:


$ nmap 138.124.75.165 -p6379 -PN
PORT STATE SERVICE
6379/tcp filtered redis

$ nmap 10.75.142.1 -p6379
PORT STATE SERVICE
6379/tcp open redis


ZeroTier подходит и для более сложных кейсов. Но это уже другая история...

А статью со скриншотами можно почитать тут.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы termshark

Иногда кажется, что сообщество просто постепенно переписывает весь GUI в терминал 🙂

В продолжении цикла постов про крутые TUI-тулзов сегодня на очереди инструмент termshark. Это по сути Wireshark в терминале.

Что умеет:

• открывать pcap-файлы
сниффить интерфейсы в реальном времени
• использовать display filters из Wireshark
• смотреть TCP/UDP стримы
• анализировать network conversations по протоколам
• копировать диапазоны пакетов прямо из терминала

Работает это всё через tshark, так что под капотом тот же Wireshark-движок. Особенно удобно, когда ты сидишь на удалённом сервере, а рядом лежит pcap на пару десятков гигабайт, и идея тащить его к себе через scp выглядит сомнительно.

Просто скармливаешь pcap и спокойно разбираешь трафик прямо по SSH:


termshark -r dump.pcap


https://github.com/gcla/termshark

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁21