en
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

Open in Telegram

Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru

Show more

📈 Analytical overview of Telegram channel Bash Days | Linux | DevOps

Channel Bash Days | Linux | DevOps (@bashdays) in the Russian language segment is an active participant. Currently, the community unites 23 744 subscribers, ranking 5 638 in the Technologies & Applications category and 27 972 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 23 744 subscribers.

According to the latest data from 04 July, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -144 over the last 30 days and by 7 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 25.26%. Within the first 24 hours after publication, content typically collects 12.90% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 5 998 views. Within the first day, a publication typically gains 3 062 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 30.
  • Thematic interests: Content is focused on key topics such as bashdays, linux, bash, docker, скрипт.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.r...

Thanks to the high frequency of updates (latest data received on 05 July, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

23 744
Subscribers
+724 hours
-47 days
-14430 days
Posts Archive
Из каждого чайника слышу про ZED, это такой новомодный IDE от авторов Atom. Славится своей скоростью и минимализмом, никаких тебе новогодних ёлок и перегруженных интерфейсов. Чем-то напоминает VIM. Дошли руки потыкать. Но одного желания мало, под винду сука дистрибутив не завезли. Хочешь под винду? Скомпилируй из исходников! 😀😃😄😁😅😂🤣😊 😇🙂🙃😉😌😍🥰😘 😗😙😚😋😛😝😜🤪 🤨🧐🤓😎🤩🥳😏😒 Да легко! Спустя 4 часа ебатни и дебага — спасибо, идите нахуй!
Если официальный мануал по компиляции писала жопорукая обезьяна, тут уже ничего с этим не поделаешь.
Залил в себя пару пиалок до-хун-пао, словил дзен и нашел выход. Пиздуем на сайт и ищем ZED. Ебала жаба гадюку! Всё уже придумано и собрано за нас. Верните мне 4 часа компиляции! Открываем CMD и хуячим:
scoop bucket add extras
scoop install extras/zed
Всё! Если не установлен scoop, ставим так:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
Что по IDE? Моё почтение, все нужные мне плагины по девопсовым делам — есть. Даже маркдаун и превью работает. Шикарно! Из коробки есть подключение к удаленным серверам. То есть подключаешься к своему удаленному серверу разработки и пишешь код. В лучших традициях VSCode. Чтобы по умолчанию в качестве терминала у тебя не открывался CMD, делаем финт ушами и дружим ZED с WSL.
  "terminal": {
    "shell": {
      "program": "C:\\Windows\\System32\\wsl.exe"
    },
    "font_family": "Hack Nerd Font Mono",
    "font_size": 15,
    "line_height": "standard"
  }
Теперь открывается ZSH, или что там у тебя установлено в WSL.
Ааа, забыл, в ZED можно подключить ИИ агенты, причем можешь локально поднять дипсик или т.п. и использовать его прям в IDE.
Больше добавить пока нечего, всё нравится. Буду тыкать, а там уже посмотрим. 🛠 #windows #ide #dev @bashdays @linuxfactory @blog

Обсуждаем бэкапы и аварийное восстановление 🔐 вместе с Cloud․ru на вебинаре 26 августа В программе вебинара: ➡️ что такое ре
Обсуждаем бэкапы и аварийное восстановление 🔐 вместе с Cloud․ru на вебинаре 26 августа В программе вебинара:
➡️ что такое резервное копирование и аварийное восстановление; ➡️ в чем между ними разница и когда они нужны; ➡️ как использовать облако для непрерывности данных; ➡️ как еще можно защитить вашу информацию.
А еще в прямом эфире эксперты проведут демо: настроят резервное копирование и аварийное восстановление в облаке. Зарегистрироваться 👈

Как-то давненько пришлось мне отлаживать большущую APIху, но под рукой была только консолька. Ни о каком GUI и речь не шла. А
Как-то давненько пришлось мне отлаживать большущую APIху, но под рукой была только консолька. Ни о каком GUI и речь не шла. А пулять запросы через curl я заебался. Тем более хотелось что-то организованное и визуально приятное. Postman сразу мимо, это гавно сделали настолько перегруженным, что им пользоваться уже нереально, да и под чистым терминалом его не запустишь. Выбор пал на Posting. Это TUI клиент со всем необходимым функционалом. Так он и прижился, сейчас если что-то нужно отладить или потестить у меня есть эта замечательная тулза. Не перегружена хуйнёй и дружелюбная. Есть все самое необходимое, даже мышкой можно тыкать. Ну и сессии сохраняет со всеми запросами. Ставится элементарно:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install --python 3.13 posting
uv — это современный инструмент для Python, который объединяет в себе функционал менеджера пакетов и виртуальных окружений, задумывается как замена pip + venv/virtualenv + pip-tools.
Для хакерменов прям мастхев. Забирай в копилку, годнота! 🛠 #linux #utilites @bashdays @linuxfactory @blog

😭Устали находить в продакшене критические уязвимости слишком поздно? На открытом уроке «От идеи до воплощения – как обезвред
😭Устали находить в продакшене критические уязвимости слишком поздно? На открытом уроке «От идеи до воплощения – как обезвредить программный код?» мы покажем, как встроить сканеры SAST, SCA и DAST прямо в пайплайн CI/CD. Вы увидите живую демонстрацию настройки и запуска инструментов, которые автоматически выявляют уязвимости ещё на этапе сборки. Представьте, что каждая сборка проходит чек-лист безопасности без ручных проверок, а вы уверены в надёжности выпускаемого кода. 🔥Встречаемся 21 августа в 20:00 МСК, зарегистрируйтесь и получите скидку на большое обучение «Внедрение и работа в DevSecOps»: https://vk.cc/cOJqkG Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Хотел бы предложить пост о деградации батареи в Linux. 🔤🔤🔥🔤🔤🔤🔤🔤🔤🔤🔤🔤🔤 Оригинал статьи написал для своего блога и хотел бы поделиться с интересующейся Linux-ом аудиторией 👇 https://alchemmist.xyz/ru/articles/battery-degradation/ 🛠 #балансбатл #людипишут @bashdays @linuxfactory @blog

🔥 Прожарка резюме от Василия Озерова: что действительно важно DevOps-инженеру Рекрутер может передать ваше резюме дальше — н
🔥 Прожарка резюме от Василия Озерова: что действительно важно DevOps-инженеру Рекрутер может передать ваше резюме дальше — но решение принимать будет нанимающий инженер. И он смотрит совсем на другое: сложность задач, уровень ответственности, глубину технического опыта, а не «знание Kubernetes». 📅 3 сентября в 18:30 мск приглашаем на вебинар с Василием Озеровым — DevOps-инженером, сооснователем Rebrain и нанимающим специалистом с 12+ годами опыта. Что будет: - живой разбор резюме участников — джун, мидл, синьор - что вызывает доверие, а что — сомнения при найме инженером - как презентовать опыт и стек, чтобы сразу было видно ваш уровень - матрица компетенций DevOps: разберём, как её использовать для роста и подготовки резюме 🎁 Бонусы за регистрацию: - гайд с матрицей компетенций DevOps - плейлист по поиску работы Хотите, чтобы ваше резюме разобрали в прямом эфире? 👉 Ждем на эфире 3 сентября в 18:30 по МСК: жмите скорее и участвуйте Реклама. ООО "РЕБРЕИН", ИНН: 7727409582, erid: 2W5zFHqUBQk

Безумству храбрых поём мы песню Ну чё, принёс я тебе «остров с сокровищами». ㅤ На карте наш подписчик рандомом разбросал 100
Безумству храбрых поём мы песню Ну чё, принёс я тебе «остров с сокровищами». На карте наш подписчик рандомом разбросал 100 кодов. Каждый код ты можешь обменять на 500 настоящих рублей. Все коды установлены на поверхности для простоты поисков.
Дополнительно установлены 10 кодов на два бесплатных месяца обучения в Linux Factory.
Поиск кодов это не основное, можно банально встретиться 1x1 и набить друг другу ебальник. Ну или просто почилить, отгрохать себе подземную базу или построить личный дата-центр. Если будут лаги и т.п. пиши сюда @linuxfactorybot, бум разбираться. Я нашел код, что дальше? 1. Делаешь скрин кода и координат XYZ (нажать F3) 2. Скидываешь эту инфу Максу 3. Забираешь приз Что бы не было соблазна схитрить, предприняты меры, все ходы записаны, так что будь честен.
Учти, что за тобой будут охотиться специально обученные боты-вжопуебаки.
Как начать? Качаешь клиент отсюда или берешь официальный. Версия сервера 1.21.8 Подключаешься к mc.bashdays.ru и погружаешься в приключения. Регистрация
/reg <пароль> <пароль>
/log <пароль>
Время работы сервера: c 05:00 МСК до 19:00 МСК 😀😃😄😁😅😂🤣😊 😇🙂🙃😉😌😍🥰😘 😗😙😚😋😛😝😜🤪 🤨🧐🤓😎🤩🥳😏😒 Что дальше? А дальше посмотрим, если сервак переживет эту неделю и не будет уничтожен письками, то таблички с промокодами будут пополняться каждую неделю. Ну и время работы сервера будет увеличено. А по пятницам можно сходки устраивать, голосовой чатик замутить, пиво, все дела. На этом пока всё. Хорошей тебе рабочей недели. 🛠 #островсокровищ @bashdays @linuxfactory @blog

🎮 Как насчёт начать кодить с нуля? «Школа 21» от Сбера — это бесплатная школа цифровых технологий. Здесь ты соберёшь портфол
🎮 Как насчёт начать кодить с нуля? «Школа 21» от Сбера — это бесплатная школа цифровых технологий. Здесь ты соберёшь портфолио и получишь востребованную профессию в ИТ Всё это — совершенно бесплатно. Без лекций, преподавателей и ограничений. Только практика и нетворкинг. 📌 Что еще? — кампусы, которые работают 24/7 в Москве, Уфе, Казани, Новосибирске, Белгороде, Липецке, Нижнем Новгороде и других городах России. — возможность совмещать с работой или учебой в вузе. — сюда поступают независимо от образования: 50% участников пришли без опыта в ИТ. — гарантированная стажировка в ИТ-компании. — востребованные профессии: разработчик, devops/sre-инженер, data scientist, qa-инженер, специалист по кибербезопасности, бизнес- и системный аналитик. 🎯 Не упускай возможность — подавай заявку прямо сейчас: https://21-school.ru/ Реклама. Заказчик АНО «Школа 21» ИНН 7736316133

Бесплатный онлифанс
begin 644 bashdays.txt
MT)_1@-"XT++0M=&"+"#1@="ZT+[0N]&,T+K0OB#0L=&#T+30M=&"(#$P,"\P
M+C4L(-"]T+#0O]"XT8C0N"#0OM&"T++0M=&"(-"R(-"ZT+[0O-"\T+70O=&"
MT+#1@-"XT8_1A2#0NB#0O]"^T8'1@M&#(-"X(-"RT+[0M]"\T+[0MM"]T+X@
IT8$@T8+0OM"QT+[0N2#1@="RT8_0MM"UT8+1@=&/(-"<T+#0NM&!+@H`
`
end
😀😃😄😁😅😂🤣😊 😇🙂🙃😉😌😍🥰😘 😗😙😚😋😛😝😜🤪 🤨🧐🤓😎🤩🥳😏😒 🛠 #xfiles @bashdays @linuxfactory @blog

ну я его без мультистейджа собирал и сжатие дополнительно использовал

Kubernetes, который не бесит В мире managed Kubernetes обычно происходит одно из двух: либо вам подсовывают урезанный сервис с кучей ограничений, либо предлагают «гибкость», которая на деле означает «разбирайтесь сами». Timeweb Cloud пошел третьим путем, – создал собственную платформу управления Kubernetes на k0s. Теперь не нужны танцы с бубном самостоятельной установкой и настройкой всех компонентов Kubernetes. Вот что получилось: под капотом — чистый контроль без сюрпризов. Виртуалки под control plane вместо абстракций, работающий etcd с прозрачными метриками и поддержка всего, что может понадобиться (от простых подов до сложных CSI-драйверов и GPU-ворклоадов). При этом кластеры собираются за пять минут, сами обновляются и чинятся, а если что — можно забрать свои данные и уйти без замков. Главное — это не просто «голый» k0s, а продуманный managed-сервис с полноценным cloud-native стеком: CNI, S3, маркетплейс аддонов, GPU под AI. Можно интегрировать DBaaS в свою приватную сеть, чтобы обеспечить изолированное взаимодействие между кластером и базой данных. Управление kubectl/k9s/Lens/Dashboard. Автоматизация — Terraform/API/CLI. Для тех, кто реально нагружает кластеры, это один из немногих вариантов, где managed не значит «кастрированный». Штука еще в том, что есть зарубежные локации. Сервис развернут в четырех дата-центрах — в Москве, Санкт-Петербурге, Амстердаме и Франкфурте. Запустить кластер tags: #Kubernetes #DevOps #k0s Реклама. ООО «ТАЙМВЭБ.КЛАУД», ИНН: 7810945525, Erid: 2VtzqwDsqN1

Как я проебал 4 часа из-за кавычки Балансбатл заебал, теперь пишу Я, одним дублем, на ошибки не триггеритесь 🥳
Самое главное в ходе дебага, не выйти на самого себя.
Да всё просто. После блокировок появилось много тикетов от клиентов, в которых говорилось - хочу GPT чат ёпта и чтобы блядь как раньше, нажал кнопочку и пошел работать. Да, без GPT уже никто не работает, деградировали все сука в зеленые сопли. Тут даже не «вайб-кодинг», а прям массовая истерия и осмысленный слив корпоративных данных. Нужно проверить договор? Так этож его читать нужно, нахуй надо, заливаем в GPT, а он пусть анализирует риски и неточности. Ну и всё в таком духе. 😀😃😄😁😅😂🤣😊 😇🙂🙃😉😌😍🥰😘 😗😙😚😋😛😝😜🤪 🤨🧐🤓😎🤩🥳😏😒/ Левой дрочу, правой жопу щекочу! Короче спрос есть, тем более я умею настраивать openconnect да и сам им пользуюсь в личных целях. Хуль, пошел настраивать на серваки клиентов, настроил, пытаюсь подключиться с локальной машины. ХУЙ ТАМ ПЛАВАЛ! Сервер нотфаунд. Пробую курлы, телнеты, меняю порты — ничего! Ладно, думаю у клиента сервак с плохим айпишником, пошел настраивать другому клиенту. Такая же история. Хм… уже закономерность какая-то. Иду к третьему клиенту, переношу полностью образ своего сервера на его сервер. Ну теперь 100% заработает! Ага, история повторяется… Сервер нотфаунд. Ну не может же такого быть. У меня с моим сервером все работает, а с клиентскими не работает. Даж не курлит и не телнетит ничего. Однако. Как говорится:
Лох этот тот, кто пытается понять что вокруг происходит, хотя все кругом уже это понимают.
Утро вечера мудренее. Если что-то не получается, нужно это дело отложить и вернуться к нему позже. Так и сделал. На утро вернулся и подумал иначе. А что если проблема — во мне? Нужно проверить эту гипотезу. Беру ноут для созвонов, ставлю openconnect клиента и без проблем подключаюсь ко всем 3м серверам которые вчера настраивал. Хм… иду за комп на котором все вчера настраивал — сервер нотфаунд. Да ёбтавоюмать! Это как в nginx с редиректами, ебешься 5 часов, а потом понимаешь что дело не в nginx, а в твоём браузере. Оно закешировало запросы и похуй ему, редиректит по умолчанию, даже если меняешь конфиг nginx. Что было? 😀😃😄😁😅😂🤣😊 😇🙂🙃😉😌😍🥰😘 😗😙😚😋😛😝😜🤪 🤨🧐🤓😎🤩🥳😏😒 Антивирус блядь! Какой не скажу, а то опять придут люди из 90х и начнут в меня письками тыкать и угрожать. Мыж с вами достаточно медийные, обсирать никого нельзя. В антивирусе есть галка — Блокировать нерекомендуемые сайты. Методом подбора эта галка была определена, она и блочила все мои попытки подключения. Это даже не фаервол, фаервол я отключал, когда настраивал openconnect. Всегда фаер отключаю когда работы подобного плана делаю. Это чисто хуйня, которая блядь неочевидно скрыта в другом разделе. И до сих пор непонятно, почему айпишники моих серверов это рекомендуемые, а айпишники клиентов это не рекомендуемые. Так и живем. Один лишний пробел, одна не поставленная запятая, забытый таб, вполне может уничтожить твой день. Но опять же опыт. Теперь при настройке подобного гавна, буду иметь это ввиду. Но это не точно. Я люблю по 5 раз наступать на грабли. Говорят на ошибках учатся, но это не про меня. Век живи, век учись! 🛠 #рабочиебудни @bashdays @linuxfactory @blog

Если в каком-то скрипте лень заморачиваться с логами, можно воспользоваться утилитой systemd-cat. Она отправляет логи прямиком в journald. 🔤🔤🔥🔤 🔤🔤🔤🔤🔤🔤 Например:
echo "Successful backup" | systemd-cat -t my-backup
Просмотреть логи можно по тегу:
journalctl -t my-backup
Можно указать приоритет сообщения текстом или числом, как в syslog:
echo "Шеф, усё пропало!" | systemd-cat -t my-backup -p 1
А можно и префиксом в начале сообщения (число в угловых скобках):
echo "<1>Шеф, усё пропало!" | systemd-cat -t my-backup
В случаях отправки через pipe в journald попадет только то, что вывелось в stdout. Для логирования stderr можно либо отправить stderr в stdout, либо запускать команду как аргумент systemd-cat:
ls non-exists 2>&1 | systemd-cat -t my-log
systemd-cat -t my-log ls non-exists
Во втором случае можно задать отдельный приоритет для сообщений из stderr: --stderr-priority. 😀😃😄😁😅😂🤣 😇🙂🙃😉😌😍🥰 😗😙😚😋😛😝😜 🤨🧐🤓😎🤩🥳😏 🛠 #балансбатл @bashdays @linuxfactory @blog

Главные по контейнеризации в России приглашают на второй митап Deckhouse User Community. 21 августа | Москва Приходите, если
Главные по контейнеризации в России приглашают на второй митап Deckhouse User Community. 21 августа | Москва Приходите, если работаете с Kubernetes или планируете начать. Разберём три практических кейса: → как DKP управляет узлами кластера — от создания до вывода из кластера; → как построить платформу обучения на Community Edition быстрее ванильного Kubernetes; → как автоматизировать контроль архитектуры с помощью фитнес-функций. Будет полезно инженерам эксплуатации, платформенным разработчикам и всем, кто хочет прокачать навыки работы с современными подходами в DevOps. Только офлайн. Пицца и нетворкинг в программе. Регистрируйтесь!

Делал это для автоматического выполнения разных команд на сетевом оборудовании и парсинга по разным критериям. 🔤🔤🔥🔤🔤🔤🔤🔤 🔤🔤 Подключение к telnet c аутентификацией
def respond_to_telnet_commands(sock, data):
    """Отвечает на IAC-команды, отправляя WONT на все DO и DONT на все WILL."""
    i = 0
    while i < len(data):
        if data[i] == 0xff and i + 2 < len(data):  # IAC
            command, option = data[i + 1], data[i + 2]
            if command == 0xfd:  # DO
                sock.send(bytes([0xff, 0xfc, option]))  # WONT
            elif command == 0xfb:  # WILL
                sock.send(bytes([0xff, 0xfe, option]))  # DONT
            i += 3
        else:
            i += 1
respond_to_telnet_commands - функция понадобится только если в ответе от сервера получаем такое b"\xff\xfb%\xff\xfb&\xff\xfd\x18\xff\xfd \xff\xfd#\xff\xfd'\xff\xfd$". Если же в конце этой кишки будет login то всё ок можно сразу отправлять логин sock.send(b'login\r\n') Подключение через ipython:
import socket
sock = socket.socket()
sock.connect(('192.168.1.100', 5000))
data = sock.recv(1024)
print(data)
respond_to_telnet_commands(sock, data)
data = sock.recv(1024)
print(data)
respond_to_telnet_commands(sock, data)
data = sock.recv(1024)
print(data)
sock.send(b'<login>\r\n')
data = sock.recv(1024)
print(data)
sock.send(b'<pass>\r\n')
data = sock.recv(1024)
print(data)
sock.send(b'<command>\r\n')
data = sock.recv(1024)
print(data.decode())
Подключение к telnet без аутентификации В /etc/inetd.conf добавить:
5000 stream tcp nowait root /usr/local/bin/telnet_noauth 
telnet_noauth - 5000 можно заменить на любой порт или написать просто telnet будет использоваться для подключения порт 23 <service_name>: имя службы (например, telnet), соответствует записи в /etc/services. <socket_type>: обычно stream (для TCP) или dgram (для UDP). <protocol>: протокол, например, tcp или udp. <wait/nowait>: wait (ждёт завершения процесса) или nowait (многопоточный). <user>: пользователь, от имени которого запускается служба (например, root). <server_program>: путь к исполняемому файлу службы (например, /usr/sbin/in.telnetd). <server_args>: аргументы для программы (обычно имя программы). Добавить скрипт telnet_noauth с содержимым:
#!/bin/bash                                                           

/bin/bash -i
Дать права на исполнения:
chmod +x /usr/local/bin/**telnet_noauth**
Подключение через ipython:
import socket
sock = socket.socket()
sock.connect(('192.168.1.100', 5000))
data = sock.recv(1024)
print(data)
sock.send(b'<command>\r\n')
data = sock.recv(1024)
print(data.decode())
Такие дела! 🛠 #балансбатл @bashdays @linuxfactory @blog

Переворачивайте календарь вашего аутлука и бронируйте 3-е сентября 📆 Под IT-конференцию GoCloud Tech! В этом году команда Cl
Переворачивайте календарь вашего аутлука и бронируйте 3-е сентября 📆 Под IT-конференцию GoCloud Tech! В этом году команда Cloud․ru снова собирает DevOps, SRE, разработчиков, архитекторов, дата-сайентистов, техлидов, чтобы вместе обсудить работу с облаками и AI. Будут четыре трека:
🤖 AI&ML — узнаете, как устроены RAG-системы и мультиагентные системы и как начать их использовать. ☁️ Cloud Infrastructure — нюансы сетевой архитектуры, проектирование IaaS‑кластеров на K8s, возможности балансировщиков и производительность SDN. 📈 Data&Analytics — про современные подходы к Big Data: тренды, интеграцию с AI-агентами и инструменты для хранения, обработки и анализа. ⚙️ Dev Platform Services — заглянем «под капот» решений, чтобы облегчить повседневную рутину разработки и настройки сервисов.
А еще вас ждут демо, воркшопы, карьерные консультации, кастомный мерч и яркое afterparty. Не пропустите🖱

Учим Docker в SNAT Последнее время всё чаще начал сталкиваться с тем, что IP сервера висит на Dummy интерфейсе и вещаются в сторону сетевиков организации/хостера/провайдера по BGP. 🔤🔤🔥🔤🔤🔤🔤🔤🔤 Вроде бы всё выглядит и ничего, и всё работает, но: 1. У меня есть Docker на таких серверах 2. И он в упор отказывается SNAT-ить контейнеры с IP Dummy-ка Это надо как то исправить. Смотрим, то что мы имеем Такс, у нас есть: Железонька стандартная, с двумя сетевыми интерфейсами, которые воткнуты в сеть провайдера. - На интерфейсе p1p0 у нас адрес 10.0.0.1/31 (у провайдера соответственно 10.0.0.0/31) - На интерфейсе p1p1 у нас адрес 10.0.0.3/31 (у провайдера соответственно 10.0.0.2/31) - На интерфейсе dummy-moew у нас висит адрес 188.222.33.1/32 - На сервере стоит гордый птыц bird, который делает bgp с провайдером Зачем 30e и 31е маски? Потому что могу, да и ну его, айпишники тратить на 30е маски... Делаем докериную сетку (bridge) и запускаем контейнер (например alpine:3), проверяем сетку:
docker network create -d bridge br-dzhigurda
docker run -it --rm --network br-dzhigurda alpine:3
ping -c 1 8.8.8.8
Получаем:

PING 8.8.8.8 (8.8.8.8): 56 data bytes

--- 8.8.8.8 ping statistics ---

1 packets transmitted, 0 packets received, 100% packet loss
Херня, товарищи! Идём смотреть правила в iptables:
-A POSTROUTING -s 198.18.66.0/24 ! -o br-dzhigurda -j MASQUERADE
Видим, что Docker делает MASQUERADE. Это обычный, всем привычный NAT, но! оно работает только с физическими сетевыми интерфейсами. И весь трафик от сервера выходит с IP именно физических интерфейсов. Нам такое не подходит. Имеем, то что мы смотрим Закапываемся в доку Docker и трём глаза в изумлении, ничего не нашли. Отлично, полезем в кишочки разбираться. Нам надо попробовать сделать вместо MASQUERADE - SNAT. Идём в сырцы Docker (а точнее в moby/moby), грепаем, копаемся, и видим волшебные грибы которые потребляли разработчики строчки:

// Файл integration/network/network_linux_test.go

    ipv4SNATAddr := "172.0.0.172"

    // Create a bridge network with --opt com.docker.network.host_ipv4=172.0.0.172

    bridgeName := "hostIPv4Bridge"

    network.CreateNoError(ctx, t, c, bridgeName,

        network.WithDriver("bridge"),

        network.WithOption("com.docker.network.host_ipv4", ipv4SNATAddr),

        network.WithOption("com.docker.network.bridge.name", bridgeName),

    )
Ага. В доке этого не было. Поехали, попробуем!

docker network create -d bridge br-fuckingsnat --opt com.docker.network.bridge.name=br-fuckingsnat --opt com.docker.network.host_ipv4=188.222.33.1

docker run -it --rm --network br-dzhigurda alpine:3

ping -c 1 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=108 time=16.5 ms

--- 8.8.8.8 ping statistics ---

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 16.497/16.497/16.497/0.000 ms
Отлично, связь есть. Смотрим в iptables:
-A POSTROUTING -s 198.18.66.0/24 ! -o br-fuckingsnat -j SNAT --to-source 188.222.33.1
Поразительно. Не, я точно слепой, такую же фичу не могли в документации пропустить... Или могли? Идём гуглим, и получаем всего один результат! И тот в Release Notes... Итоги Мы имеем работающие Docker контейнеры, которые SNAT-ятся с нужного нам IP, кровь из глаз после вида исходников, и непреодолимое желание написать разработчикам, что бы поправили доку. 🛠 #балансбатл #networks @bashdays @linuxfactory @blog

🤘 А у вас уже есть продуманная стратегия харденинга? Без нее не обойтись, если вы хотите строить устойчивую ИТ-инфраструктур
🤘 А у вас уже есть продуманная стратегия харденинга? Без нее не обойтись, если вы хотите строить устойчивую ИТ-инфраструктуру, вовремя находить в ней слабые места, не терять над ней контроль и проходить аудит без блоков. ⏱️ Всему этому можно научиться на четырехнедельном онлайн-практикуме «Харденинг ИТ: от дизайна до настроек», который стартует уже 25 августа. На нем вы научитесь: 🌟выстраивать непротиворечивую систему настройки — от зонирования сети до параметров виртуализации и политик в ОС; 🌟 делать инфраструктуру устойчивее с соблюдением требований регуляторов и опорой на результативную кибербезопасность; 🌟 внедрять системный подход к харденингу и меньше зависеть от внешних консультантов. Вы сможете протестировать свои решения в песочнице до внедрения в прод и разобрать типичные уязвимости на реальных кейсах. 👉 Узнать больше и подать заявку можно на странице практикума.

Был когда-то интересный квест. Ща расскажу. 🔤🔤🔥🔤🔤🔤 🔤🔤🔤 Крутился внутри сети сайт (на IP 192.168.0.87) который пулял куда-то API-запросы, с такой особенность, что работал он не как все машины через шлюз 192.168.0.1. А пулял запросы в другую сеть которая была за шлюзом 192.168.0.176 и далее в дивный неведомый интернет, хуй знает куда он там чего отправляет, это в данном случае не важно. Важно что запросы должны летать в шлюз 192.168.0.176 а общий шлюз в сети 192.168.0.1 с внешним X.X.X.X. Все было хорошо, пока манагеры не захотели видеть этот сайт снаружи сети (IP X.X.X.X, всякие DNS опустим, они тут не важны). Разраб тоже сказал что ему нужна 22 дырка снаружи, и понятно что проброс порта на шлюзе не сработает. Надо выдумывать маршруты. Присказка окончена, понеслася сказка. Пишем маршрутизацию /etc/netplan/00-installer-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses: [192.168.0.87/24]
      routes:
        - to: 0.0.0.0/0 # Весь интернет-трафик через 192.168.0.176
          via: 192.168.0.176
          metric: 100
        - to: 192.168.0.1/32 # Явный маршрут до шлюза 192.168.0.1
          via: 192.168.0.1
          metric: 50 # Более высокий приоритет
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
Применяем изменения (тут если накосячил сообщат)
sudo netplan apply
Создаем отдельную таблицу маршрутизации (table 100)
sudo ip route add default via 192.168.0.1 dev eth0 table 100
Создаем правила маршрутизации для каждого порта:
sudo ip rule add iif eth0 dport 22 lookup 100
sudo ip rule add iif eth0 dport 8080 lookup 100
Что делает: iif eth0 — трафик, пришедший на интерфейс eth0. dport 22 и dport 8080 — если это SSH (порт 22) или HTTP (порт 8080). lookup 100 — использовать таблицу 100 для маршрутизации этого трафика. Пометка исходящего трафика (iptables mangle + MARK)
sudo iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 1
sudo iptables -t mangle -A OUTPUT -p tcp --sport 8080 -j MARK --set-mark 1
Что делает: -t mangle — таблица mangle для изменения (marking) пакетов. --sport 22 и --sport 8080 — если исходящий трафик идёт с портов 22 (SSH) или 8080 (HTTP). --set-mark 1 — помечает такие пакеты меткой 1. Зачем: Метка (mark) позволяет позже применить к пакетам особые правила маршрутизации. Правило маршрутизации по метке (fwmark)
sudo ip rule add fwmark 1 lookup 100
Что делает: fwmark 1 — если пакет помечен меткой 1 (как в iptables выше). lookup 100 — использовать таблицу 100 для маршрутизации. Зачем: Это гарантирует, что ответы на SSH/HTTP-запросы (исходящие с портов 22/8080) будут направляться через шлюз 192.168.0.1 (из таблицы 100), а не через основной маршрут. Общий смысл всей настройки: Для входящих запросов на eth0 (порты 22 и 8080): Ответный трафик маркируется (mark=1). Маркированный трафик направляется через таблицу 100 (шлюз 192.168.0.1). Для исходящих ответов (SSH/HTTP с портов 22/8080): Трафик также маркируется и направляется через таблицу 100. Результат: Весь трафик, связанный с SSH (22) и HTTP (8080), всегда идёт через шлюз 192.168.0.1, даже если в системе есть другие маршруты по умолчанию. Проверяем:
ssh -p 1422 user@Х.Х.Х.Х
curl ident.me #должен вернуть внешний адрес шлюза
Если все отработало, идем дальше. При перезагрузке вся настроенная маршрутизация слетит. Надо восстанавливать при каждой перезагрузке. Тут на выбор. Пойдем по пути systemd.
В комментах содержимое portforward-routes.service, в пост не влезло.
Включаем
sudo systemctl daemon-reload
sudo systemctl enable portforward-routes.service
Перегружаемся\проверяем. 🛠 #балансбатл #networks @bashdays @linuxfactory @blog

А вы знаете, как построить инфраструктурную платформу на Kubernetes с нуля — и довести её до продакшена? На курсе «Инфраструк
А вы знаете, как построить инфраструктурную платформу на Kubernetes с нуля — и довести её до продакшена? На курсе «Инфраструктурная платформа на основе Kubernetes» вы: — Развернёте и настроите кластер Kubernetes, готовый к боевой нагрузке — Освоите CI/CD, GitOps, мониторинг, логирование, управление секретами — Поработаете с Helm, Istio, Vault и другими инструментами экосистемы — Разберёте best practices безопасности, обновлений и масштабирования — Выполните проект, который можно показать на собеседовании Формат: онлайн-вебинары + практика в реальных облачных окружениях Для кого: DevOps-инженеры, системные администраторы, разработчики, стремящиеся к production-уровню работы с Kubernetes Бонус: темы курса помогут подготовиться к сертификациям CKA и CKAD Пройдите вступительный тест и получите 62 бесплатных урока по Kuber! 👉 Записаться на курс: https://vk.cc/cOuASe Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru