Думаю, многие разработчики, которые используют Docker, согласятся с тем, что он предоставляет обширные возможности для контроля прав контейнеров. Тут есть инструменты на любой вкус: хочешь открывай порты наружу, хочешь меняй права контейнера через cap_add / cap_drop, хочешь показывай контейнеру все процессы, а хочешь - можешь разрешить использовать девайсы или сеть хоста, ну и так далее.Погружение в проблемуОднако, работая с Docker вот уже более 7 лет, я заметил, что я часто сталкиваюсь с одним…
Если вы являетесь Go-разработчиком, то вне зависимости от того, из какого языка программирования пришли в Go, наверняка когда-то задавались вопросами «А есть ли тут тернарный оператор? Нет? А почему?»Конечно, можно заглянуть в секцию FAQ документации Go и найти там ответ авторов. Но останавливаться на этом — удел слабых, так?) Иногда ведь так хочется удобно написать присвоение результата в зависимости от условия... Без заведения лишних временных переменных, и может быть даже в одну строчку...А …
Статья посвящена низкоуровневой работе с сетевым стеком Linux на языке Go. Разберем, как создать и настроить виртуальные TUN-интерфейсы для перехвата и модификации IP-трафика в userspace. Напишем минимальную программу, реализующую логику NAT: подмена адресов в заголовках пакетов и инкрементальный пересчет контрольных сумм для IP и TCP.Программа написана на Go и создает на одной машине два виртуальных TUN-интерфейса. Схема работы выглядит так: tun0 -> go app -> tun1 -> inet. Первый инте…
В этой статье мы перенесем разработанный инструмент на macOS. Логика работы с трафиком в userspace сохраняется, но интеграция с системой требует иных решений. Разберем особенности создания utun-интерфейсов, настройки маршрутизации через ifscope и использования pf для NAT. По итогу запустим цепочку tun0 -> go app -> tun1 -> inet на новой платформе.Принципиальных изменений в коде нет, но туннели создаются и настраиваются иначе. В Linux-варианте я открывал туннель без сторонних библиотек,…
Привет, Хабр! Я — Владимир Балун, и это — вторая часть материала о пакете с отпугивающим названием «unsafe» в Go и том, чем он может быть реально полезен. В первой части мы рассмотрели его содержимое, особенности и нюансы, оптимизации кода с использованием unsafe — все это вы можете освежить в памяти по ссылке.Сегодня перейдем непосредственно к той самой «магии»: трюки, хаки, советы и лучшие практики с моей стороны. Трюки и хакиВажно понять: я не говорю, что вы должны делать именно так на работ…
Проблема: тяжёлые AI-агенты на маленьком железеПоследнее время я экспериментировал с AI-агентами на Raspberry Pi 5.И довольно быстро столкнулся с проблемой: большинство существующих агентных фреймворков оказываются слишком тяжёлыми для небольшого железа.Типичная архитектура таких решений включает:Python-фреймворкнесколько фоновых сервисовorchestration слойиногда векторную базудовольно сложную конфигурациюНа сервере это нормально работает. Но на Raspberry Pi всё начинает ощущаться иначе:долгий с…
Всем привет!В этой статье мы рассмотрим следующий кейс. Есть некоторый внешний поставщик zip архивов, эти архивы содержат в себе множество папок, которые в свою очередь содержат различные js, html и css файлы. Архивы являются 3D турами, для обзора различных помещений музеев. Наша задача, как бекенд разработчика, предоставить пользователю возможность загружать эти архивы на сервер, для последующего просмотра их на соотвествующих страницах веб-сайта.Графическое администрирование файлов, может осу…
Ранее я начал писать небольшую программу на Go, чтобы прокидывать трафик между компьютером и своим сервером. Назначение программы исследовательское - посмотреть "как это работает" и разобраться, как именно работают механизмы, мешающие нормальному интернету.В продолжение эксперимента: имеется подключение к интернету через менее дружелюбного провайдера и ноут на macOS (первая версия была под Linux). Прежде чем усложнять код, решил запустить программу на маке без изменения логики. Напомню:…
Предыдущая статьяВведениеВ предыдущей статье цикла мы успели разобраться с темами создания и запуска сервера, обработчиками и промежутками обработчиками http-запросов, обработкой статических файлов, embed FS и другими базовыми механики net/http.Вторая часть цикла получилась очень объемной и поэтому, в целях повышения читаемости я разделил её на 3 связанные части:Фундамент. Принимаем POST-запросы, загружаем файлы и создаем In-memory хранилище.Архитектура и безопасность. Внедряем Clean Architectu…