💡 Полезные Советы
При подготовке материала использовались тезисы из книги Чипа Хьюена "AI-инженерия"
Не понятные термины смотрите в конце: "FAQ: Расширенный словарь терминов AI- и ML-инженера"
Индустрия искусственного интеллекта переживает тектонический сдвиг. Граница между классическим машинным обучением и созданием современных ИИ-приложений стала настолько резкой, что породила новую профессию, новые стандарты разработки и даже новые интернет-мемы. Разбираемся, чем на самом деле занимаются AI-инженеры, зачем им нужна фундаментальная математика и на какие проекты стоит обратить внимание.
Разница между ML-инжинирингом и AI-инжинирингом?
Смена парадигмы произошла в результате перехода от обучения моделей под узкие задачи к использованию готовых мультимодальных и языковых систем.
- ML-инжиниринг (традиционный) сфокусирован на полном цикле создания моделей: сборе и ручной разметке данных, конструировании признаков (feature engineering), подборе архитектур нейросетей, обучении с нуля и тонкой настройке гиперпараметров.
- AI-инжиниринг опирается на готовые базовые модели (Foundation Models, LLM). Основная работа смещается от создания архитектур к их адаптации и оркестрации: промт-инжинирингу, построению конвейеров контекста (RAG), созданию автономных агентов и дообучению.
| Критерий | ML-инжиниринг | AI-инжиниринг |
|---|---|---|
| Основная цель | Обучить эффективную модель под задачу | Адаптировать базовую модель под бизнес-процесс |
| Работа с данными | Разметка, табличные данные, feature engineering | Неструктурированные данные, векторные БД, эмбеддинги |
| Характер вывода | Детерминированный/закрытый (классы, числа) | Вероятностный, открытый (текст, код, изображения) |
| Стек технологий | Python, PyTorch, Scikit-learn, MLOps | Python/TypeScript, LangChain, LlamaIndex, vLLM |
Зачем AI-инженеру нужна "база" (ML и статистика)?
Несмотря на то что приложения на основе базовых моделей можно создавать, не имея познаний в области ML, понимание основ машинного обучения и статистики поможет разрабатывать более эффективные приложения и избежать ненужных сложностей. Для уверенной работы в сфере AI-инженерии необходимо разбираться в следующих понятиях:
- Концепции из области теории вероятности, такие как выборка, детерминизм и распределение.
- Понятия из области ML, такие как обучение с учителем, обучение без учителя, логарифмическое правдоподобие, градиентный спуск, обратное распространение, функция потерь и настройка гиперпараметров.
- Различные архитектуры нейронных сетей, включая прямое распространение, рекуррентные сети и трансформеры.
- Метрики, такие как доля правильных ответов алгоритма, F1-мера, точность, полнота, косинусное сходство и кросс-энтропия.
Специфика данных: проблема мультиязычности
При проектировании AI-приложений критически важно учитывать, на каких данных обучалась фундаментная модель. Английский язык доминирует в Интернете. Анализ набора данных Common Crawl показывает, что он составляет почти половину данных (45,88 %). Английский в восемь раз превосходит второй по распространенности язык - русский (5,97 %). Следом идут немецкий (5,88 %), китайский (4,87 %) и японский (4,79 %). Языки, слабо представленные в качестве обучающих данных (как правило, те, что не вошли в этот список и занимают менее 1%), считаются низкоресурсными. Это напрямую влияет на качество и логику работы AI-приложений на разных языках.
Иллюзия простоты: от прототипа к production.
Многие разработчики попадают в ловушку быстрого старта. В сфере искусственного интеллекта действует правило: подняться от 0 до 60 легко, а от 60 до 100 - крайне трудно. Из-за первоначального успеха компании часто сильно недооценивают время, которое потребуется, чтобы улучшить продукт. Отличный пример - опыт компании LinkedIn: им потребовался месяц, чтобы достичь 80 % желаемого результата. Но затем им понадобилось еще четыре месяца, чтобы наконец превысить 95 %. Много времени было потрачено на работу над дефектами продукта и борьбу с галлюцинациями, а малая скорость достижения каждого последующего 1 % прироста сильно разочаровывала инженеров.
Влияние AI на рынок: угроза или наставник?
Готовые AI-системы уже ломают привычные бизнес-модели. Многие образовательные организации используют AI для создания более совершенных продуктов, однако немало тех, кто считает, что AI отбирает у них работу. Например, компания Chegg, которая помогает студентам выполнять домашние задания, отметила, что цена их акций резко упала - с 28 долларов при запуске ChatGPT в ноябре 2022 года до 2 долларов в сентябре 2024-го, поскольку студенты обращаются за помощью к AI. Если риск заключается в том, что AI может заменить многие навыки, то возможность кроется в его использовании в качестве наставника для приобретения любого умения. AI способен помочь человеку быстро освоить азы многих навыков, а затем можно продолжить заниматься самостоятельно, чтобы превзойти AI.
Откуда взялся мем про AI-разработчиков? Кто такие "оберточники" и почему в IT-сообществе смеются над AI-разработчиками?
Если вы зайдете в комментарии на Хабре, Дваче или в профильные Telegram-каналы, то быстро заметите специфическое, часто откровенно токсичное отношение к тем, кто называет себя "AI-разработчиком". В рунете популярны грубые шутки, приравнивающие создателей ИИ-приложений к людям "нетрадиционной ориентации".
Этот локальный мем возник не на пустом месте. За агрессивным юмором скрывается глубокий конфликт внутри индустрии, который строится на трех фундаментальных факторах:
- Синдром "оберточника" и обесценивание сложной инженерии.
Для классического бэкенд-разработчика (например, пишущего на Python) создание рабочего продукта - это долгий процесс. Нужно спроектировать архитектуру, настроить реляционную базу данных, продумать кэширование, обернуть всё это в Docker-контейнеры и настроить Linux-сервер для деплоя. Это требует фундаментальных знаний компьютерных наук и понимания того, как работает память и сеть. На этом фоне в индустрию ворвался тренд на "вайб-кодинг" (vibe-coding). Появились тысячи стартаперов, которые создают продукты, просто написав красивый фронтенд, который отправляет текстовый промт через API к серверам OpenAI (ChatGPT) или Anthropic (Claude). Таких разработчиков пренебрежительно прозвали "оберточниками" (wrapper builders). У них нет базы данных, нет своей бизнес-логики и нет бэкенда - весь их продукт является лишь тонкой графической "оберткой" над чужой нейросетью. Снобизм классических инженеров вызван тем, что написание пары API-запросов теперь модно называть громким словом "AI-инжиниринг". Информационный шум и венчурный "пузырь"
Второй фактор раздражения - колоссальная финансовая несправедливость и хайп. Инженеры, решающие действительно сложные технические задачи (построение отказоустойчивых highload-систем, оптимизация сложных SQL-запросов, обеспечение информационной безопасности), годами борются за повышение бюджетов. В то же время поверхностные "AI-агентства", состоящие из маркетологов и пары джуниоров, привлекают миллионные инвестиции под обещания "внедрить ИИ". Большинство таких проектов не имеет под собой технической ценности (никакого moat - защитного барьера) и умирает, как только OpenAI выпускает очередное обновление, встраивая функционал этого стартапа в свой базовый чат. Этот "пузырь" вызывает закономерный скепсис и раздражение у технического ядра IT-сообщества.
- Токсичное наследие рунета и защита профессии
Специфика русскоязычной интернет-культуры такова, что любые легковесные тренды, снижающие порог входа в профессию, встречают агрессивное сопротивление. Подобные обесцененные ярлыки - это защитный механизм сообщества. Двадцать лет назад системные программисты смеялись над веб-мастерами. Десять лет назад бэкендеры выдумывали обидные прозвища для фронтендеров ("формошлепы") и PHP-разработчиков. Недавно объектом насмешек были специалисты по No-Code и блокчейн-энтузиасты. Сегодня эстафетная палочка хейта перешла к AI-инженерам. Называя ИИ-разработчиков "нетрадиционными", классические IT-специалисты пытаются провести черту между "настоящей" инженерией и теми, кто просто удачно оседлал временный хайп.
14 крутых open-source проектов AI-приложений
Если вы хотите посмотреть, как выглядит настоящий, качественный AI-инжиниринг на практике, обратите внимание на эти репозитории GitHub (у каждого десятки тысяч звезд):
abi/screenshot-to-code - преобразует скриншоты, макеты и видео в чистый HTML/Tailwind, React или Vue с помощью Vision-моделей.
gpt-engineer-org/gpt-engineer - инструмент, генерирующий целые кодовые базы и рабочие проекты по текстовому описанию архитектуры.
open-interpreter/open-interpreter - локальная среда выполнения: модель напрямую пишет и выполняет Python/Bash-код на вашей машине для автоматизации задач и управления ОС.
sawyerhood/draw-a-ui - визуальный канвас, превращающий набросанные от руки схематичные скетчи в рабочий HTML-интерфейс.
mendableai/firecrawl - мощный AI-пайплайн, который сканирует веб-сайты и конвертирует их страницы в чистый Markdown для последующего использования в RAG и кодогенерации.
Significant-Gravitas/AutoGPT - один из самых популярных автономных мультиагентных проектов, разбивающий масштабные цели на цепочки действий.
All-Hands-AI/OpenHands (ранее OpenDevin) - открытая платформа разработки ИИ-агентов, способных самостоятельно модифицировать репозитории, читать логи компиляции и исправлять баги.
Nutlope/aicommits - CLI-утилита, анализирующая git diff и автоматически формирующая информативные сообщения для коммитов по стандартам Conventional Commits.
sweepai/sweep - автономный ассистент, превращающий проблемы (Issues) на GitHub в готовые Pull Requests с исправленным кодом и тестами.
reworkd/AgentGPT - веб-платформа для развертывания автономных настраиваемых агентов прямо в браузере для выполнения исследовательских задач.
eosphoros-ai/DB-GPT - мощный фреймворк для локального развертывания AI. Позволяет безопасно общаться с базами данных с помощью естественного языка (Text-to-SQL) без риска утечки корпоративной информации.
sqlchat/sqlchat - чат-ориентированный SQL-клиент. Инструмент предлагает использовать диалоговый интерфейс вместо громоздкого классического UI для выполнения запросов, модификации и настройки базы данных.
mckaywrigley/ai-code-translator - легковесный инструмент на основе языковых моделей, который берет исходный код на одном языке программирования и автоматически переводит его на другой (отлично подходит для переписывания легаси-проектов).
joshpxyne/GPT-Migrate - AI-агент, предназначенный для автоматизации масштабной миграции целых кодовых баз. Анализирует структуру репозитория и может пошагово переносить бэкенд с одного языка или фреймворка на другой.
FAQ: Расширенный словарь терминов AI- и ML-инженера
Чтобы окончательно разобраться в специфике современной ИИ-разработки, вот краткая расшифровка главных отраслевых терминов:
- Что такое RAG (Retrieval-Augmented Generation)?
Это архитектурный подход, при котором языковая модель перед генерацией ответа сначала ищет нужные факты во внешней базе данных (например, во внутренней документации компании). Грубо говоря, это способ дать ИИ "прочитать" ваши личные документы, чтобы он отвечал строго по ним и не придумывал факты. - Что такое Эмбеддинги (Embeddings)?
Это способ перевода текста, изображений или звука в массивы чисел (векторы). Эмбеддинги позволяют алгоритмам математически вычислять "смысловую близость" слов. Благодаря им база данных понимает, что слова "собака" и "щенок" находятся близко друг к другу, а "собака" и "швеллер" - далеко. - Что такое MLOps (Machine Learning Operations)?
Это аналог классического DevOps, но адаптированный для систем машинного обучения. MLOps-инженеры настраивают автоматизацию, CI/CD-пайплайны, мониторинг и бесперебойный деплой нейросетей на серверы. - Что такое Галлюцинации ИИ?
Ситуация, когда языковая модель генерирует грамматически правильный и очень уверенный, но абсолютно ложный или выдуманный ответ. Борьба с галлюцинациями - одна из главных задач AI-инженеров при подготовке продукта к релизу. - Что такое LoRA и PEFT?
Обучение огромных моделей (вроде GPT) с нуля требует гигантских вычислительных мощностей и суперкомпьютеров. PEFT (Parameter-Efficient Fine-Tuning) и в частности LoRA - это методы "дешевого" дообучения. Они позволяют слегка скорректировать поведение модели под вашу конкретную задачу, обновив лишь крошечную долю её параметров, что можно сделать даже на одной хорошей потребительской видеокарте. - Что такое "Вайб-кодинг" (Vibe-coding)?
Новый сленговый термин. Означает процесс написания программ, когда разработчик не пишет код руками по строчкам, а пишет промты на естественном языке. Человек задает общий "вайб" и логику архитектуры, а рутинную генерацию синтаксиса делегирует агентам или инструментам вроде Cursor и GitHub Copilot.
1. Данные и характер работы систем
- Детерминированный / закрытый вывод
Свойственен классическому машинному обучению (ML). На один и тот же входной набор данных алгоритм всегда выдает один и тот же результат из строго заданного набора. Результатом является класс (например, спам / не спам) или конкретное число (предсказание цены). - Вероятностный / открытый вывод
Свойственен генеративному ИИ (AI-инженерия). Модель не знает точного ответа, а математически предсказывает вероятности следующих токенов. Выходные данные ничем не ограничены - это генерация текста, рабочего программного кода или изображений. На один и тот же запрос при разных генерациях можно получить разные результаты. - Разметка и табличные данные
Классический формат данных для ML - реляционные таблицы (как в базах SQL), где каждая строка имеет известную целевую переменную (разметку). Например, база квартир, где известны площадь, район и точная цена продажи. - Неструктурированные данные и Векторные БД
То, с чем работает современный ИИ: сырые тексты статей, логи, изображения, аудио. Чтобы нейросеть могла искать информацию по таким данным, они превращаются в векторы (эмбеддинги) и сохраняются в специализированные векторные базы данных (например, Qdrant, Milvus), заточенные под быстрый поиск по смыслу, а не по ключевым словам. - Feature engineering (Конструирование признаков)
Ручной аналитический процесс в классическом ML. Инженер берет сырые данные и с помощью математики и логики создает из них новые признаки, чтобы помочь алгоритму. Пример: из столбца "дата рождения" вычислить новый признак "возраст в днях". В современном AI нейросети извлекают нужные признаки из контекста самостоятельно.
2. Базовые концепции обучения и статистики
- Выборка, детерминизм и распределение
Базовые понятия теории вероятностей. Выборка - часть данных из генеральной совокупности, на которой мы обучаем или тестируем модель. Детерминизм - строгая предсказуемость результата алгоритма. Распределение - описание того, с какой частотой и вероятностью в данных появляются те или иные значения. - Обучение с учителем (Supervised) и без учителя (Unsupervised)
В первом случае алгоритм учится на примерах, где заранее дан правильный ответ (человек разметил, где на фото коты, а где собаки). Во втором случае алгоритм получает сырые данные без подсказок и сам ищет в них скрытые закономерности (например, разбивает пользователей на кластеры по поведению). - Градиентный спуск и Обратное распространение (Backpropagation)
Градиентный спуск - математический алгоритм оптимизации. Он шаг за шагом корректирует веса (настройки) нейросети, чтобы минимизировать ошибку (как бы "спускаясь" на дно ямы, где ошибка равна нулю). Обратное распространение - механизм, позволяющий сети понять, какой именно нейрон на предыдущем слое совершил ошибку, чтобы скорректировать его вес. - Функция потерь (Loss) и Логарифмическое правдоподобие
Математические формулы, которые оценивают качество работы модели в процессе обучения. Функция потерь вычисляет, насколько сильно предсказание нейросети отклонилось от идеала. Логарифмическое правдоподобие оценивает вероятность того, что модель выдаст реальные, правильные данные. - Гиперпараметры
В отличие от внутренних параметров (весов), которые нейросеть настраивает сама в процессе обучения, гиперпараметры задает сам разработчик до старта (например, сколько слоев будет в сети, с какой скоростью ей учиться).
3. Архитектуры нейронных сетей
- Прямое распространение (Feedforward)
Самый базовый тип нейросетей. Сигнал идет строго в одном направлении: от входного слоя к выходному. Не имеют памяти, поэтому плохо подходят для понимания текста. - Рекуррентные сети (RNN)
Архитектура, обладающая своеобразной "памятью". Они обрабатывают данные последовательно (слово за словом), поэтому их долгое время использовали для машинного перевода. Их минус - они забывают контекст, если текст слишком длинный. - Трансформеры (Transformers)
Архитектура, совершившая революцию и подарившая нам ChatGPT. Благодаря механизму "внимания" (Attention), трансформер анализирует все слова в тексте одновременно. Он мгновенно понимает логические связи между первым и тысячным словом в документе, не теряя контекст.
4. Метрики оценки качества моделей
- Accuracy (Доля правильных ответов) - самый простой показатель: процент верных предсказаний от общего числа.
- Precision (Точность) - показывает, сколько из тех объектов, что модель назвала положительными, реально являются таковыми (минимизация ложных срабатываний).
- Recall (Полнота) - показывает, какую долю из всех реальных положительных объектов модель смогла найти (минимизация пропусков).
- F1-мера - сбалансированная метрика, представляющая собой среднее гармоническое между Точностью и Полнотой.
- Кросс-энтропия - метрика потерь в задачах классификации (например, при предсказании следующего слова), измеряющая разницу между предсказанием сети и реальностью.
- Косинусное сходство - математическая мера, показывающая, насколько два вектора направлены в одну сторону. В AI используется для оценки смысловой близости текстов (чем ближе показатель к 1, тем больше похож смысл).
5. Популярный стек технологий
- Python - безоговорочный язык №1 в индустрии машинного обучения и AI.
- PyTorch - самый популярный открытый фреймворк для создания и обучения глубоких нейронных сетей.
- Scikit-learn - классическая библиотека Python для базового машинного обучения (регрессии, деревья решений), используемая в традиционном ML-инжиниринге.
- LangChain и LlamaIndex - мощные Python-фреймворки оркестрации для AI-инженеров. С их помощью пишут логику AI-агентов, настраивают RAG (подключают нейросети к корпоративным базам данных) и управляют памятью ботов.
- vLLM - высокопроизводительная библиотека для быстрого инференса (запуска и обработки запросов) больших языковых моделей на серверах. Позволяет экономить ресурсы видеокарт.
Как вернуть YouTube на SberBox: рабочий способ обхода блокировок и установка SmartTube (2026)
Владельцы ТВ-приставок от Сбера сейчас сталкиваются с двойной проблемой: во-первых, провайдерские ТСПУ (DPI) режут трафик к YouTube, а во-вторых, закрытая экосистема StarOS без сервисов Google (GMS) не дает нормально использовать официальные приложения.
Стандартные VPN-клиенты с пульта управляются ужасно, а ключи Outline отваливаются из-за блокировок по сигнатурам. В этой статье на riopass.ru мы разберем ультимативный способ настройки: поднимем современный протокол VLESS (Xray + Reality) через клиент v2rayNG и поставим независимый клиент YouTube.
1. Установка правильного VPN-клиента (v2rayNG)
Мы будем использовать v2rayNG - мощный инструмент, который идеально работает с пультом и поддерживает современные протоколы вроде VLESS, маскирующиеся под обычный HTTPS-трафик (например, визит на сайт института в Европе).
Как закинуть приложение на SberBox:
У Сбера есть удобное облачное хранилище, но оно принимает строго файлы в формате только в .apk .

- Идем на GitHub разработчика 2dust/v2rayNG и качаем APK из раздела Releases.
- Аппаратный нюанс: Процессор у
SberBox 64-битный (arm64-v8a), но ради экономии 2 ГБ оперативной памяти сама ОС Android часто урезана до 32 бит. Если версияarm64-v8aне появляется в системе после загрузки, смело качайте версиюarmeabi-v7aилиuniversal. - Авторизуйтесь на сайте apps.sber.ru/my
apps.sber.ru/my под своим Сбер ID. - Загрузите скачанный
.apkфайл. - На телевизоре перейдите в Каталог приложений -> Мои приложения -> Загруженные и установите v2rayNG.
(Если приложение не появилось - перезагрузите приставку по питанию для принудительной синхронизации облака или обычной перезагрузкой удерживая кнопку выключения -> появиться круг "перезагрузить" -> одинарное нажатие на кнопку выкелючения).
2. Настройка VLESS (Reality)
Протокол Reality невероятно чувствителен к опечаткам. Ошибка в одном символе Public Key приведет к тому, что соединение не установится. Вводить 200 символов с пульта - плохая идея. Но разработчики Сбера сделали убогий браузер урезанные элементы управления и многое другое. (Если Вы нашли способ, как сделать без ручного ввода опишите его на нашу почту support@riopass.ru )
Если облако Сбера отказывается принимать картинки с QR-кодами, а скопировать текст через встроенный браузер не получается, придется идти по пути истинного джедая - забивать настройки вручную с D-pad'а пульта. Протокол Reality параноидально чувствителен к опечаткам: ошибка в одном регистре или лишний пробел, и сервер сбросит соединение.
Пример ключа с которого необходимо будет перепечатать данные(ключ не рабочий, предоставлен для примера!):
vless://12345678-abcd-1234-abcd-123456789abc@192.168.1.100:443?encryption=none&security=reality&type=tcp&sni=www.microsoft.com&fp=chrome&pbk=2TRaaychV1yeUxFJgC8sXztZxLCaGRxS8AcqP9gOKjA&sid=15a4e0b35cac5865&flow=xtls-rprx-vision&spx=%2F#AmneziaVPNДавайте разберем эту "абракадабру" на запчасти, чтобы вы понимали, откуда брать данные для полей в v2rayNG:
-
vless://- Указание на протокол. -
12345678-abcd-1234-abcd-123456789abc(Всё, что идет до символа @) - Это ваш UUID. Именно его мы вписываем в поле Идентификатор (ID). -
192.168.1.100:443(Между @ и ?) - Это Адрес (IP вашего сервера) и Порт (443). - ? - Знак вопроса означает, что дальше идут дополнительные параметры. Каждый параметр отделяется друг от друга символом амперсанда &.
Ищем нужные параметры в хвосте ссылки:
-
flow=xtls-rprx-vision- Вписываем в поле Поток. -
sni=www.microsoft.com- Домен маскировки. Вписываем в поле SNI. -
fp=chrome- Отпечаток браузера. Вписываем в поле Отпечаток (Fingerprint). -
pbk=2TRaaychV...- Ваш публичный ключ. Самая длинная строка, вписываем в Открытый ключ (Public Key). -
sid=15a4e0b35cac5865- Ваш короткий идентификатор, вписываем в ShortID. -
spx=%2F- Кодированное обозначение символа слэш. В программе просто вписываем / в поле SpiderX.
И в самом конце:
-
#AmneziaVPN(Всё, что идет после знака решетки) — Это тег или название. Знак # отбрасываем, а само слово AmneziaVPN пишем в самую первую строку настроек — Имя (Remarks).
Открываем v2rayNG, жмем иконку "+" в правом верхнем углу и выбираем "Добавить VLESS". Перед вами появится длинный список параметров. Заполняем строго по инструкции:

Базовые настройки подключения
- Имя (Remarks): Любое понятное название (например, My_VPN). Внимание: если ваш генератор ключей добавил в конец ссылки тег вроде
#AmneziaVPN, само это слово можно вписать сюда, но без знака решетки. - Адрес (Address): IP-адрес вашего VPN-сервера (например, 192.168.1.1). Как его сделать читайте здесь.
- Порт (Port): Порт вашего подключения (обычно 443).
- Идентификатор (ID): Ваш UUID. Это строка из 36 символов (только строчные буквы и цифры), разделенная четырьмя дефисами (формат
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). Вводить нужно предельно внимательно, соблюдая все дефисы.

Настройки маршрутизации и шифрования
- Поток (Flow): Строго xtls-rprx-vision (все буквы маленькие, без пробелов). Не используйте варианты с udp443, чтобы не вызвать конфликт.
- Шифрование (Encryption): Вписываем none. VLESS лишен собственного механизма шифрования ради снижения нагрузки на процессор (для ТВ-приставок это критично), за криптографию здесь будет отвечать сам Reality.
- Сеть (Network): Выбираем tcp. - должно быт ьпо умолчанию
- Тип заголовка (Header type): Выбираем none.
⚠️ Важное правило чистых полей:
Строки Узел HTTP (HTTP Host) и Путь (Path) оставляем абсолютно пустыми. Если вписать туда домен маскировки, Xray сформирует кривой пакет, и туннель не поднимется.
Настройки маскировки (Reality)
Пролистайте вниз до пункта Безопасность (TLS). По умолчанию там стоит none. Нажмите на него и выберите reality. Как только вы это сделаете, ниже "магическим образом" развернутся скрытые поля для настройки маскировки:
- SNI: Домен, под который маскируется ваш сервер (например, www.google.com - строго то, что указано в настройках вашего VPS).
- Отпечаток (Fingerprint): Вписываем chrome. Это заставит провайдера думать, что пакеты отправляет обычный браузер.
- Открытый ключ (Public Key): Самое важное поле. Длинная строка из 43 символов. Вводим крайне осторожно, строго соблюдая заглавные и строчные буквы!
- ShortID: Короткий идентификатор, обычно состоящий из 16 символов (цифры и строчные буквы).
- SpiderX: Ставим просто символ косой черты / (слэш).
- Поле "Необработанный JSON FinalMask" игнорируем и оставляем пустым.

Как только вбит последний символ, поднимаемся в самый верх экрана и жмем иконку Галочки (сохранить). Карточка сервера появится на главном экране. Выделяем ее и жмем круглую кнопку запуска!

Лечим ошибку маршрутизации (Красный экран)
При первой попытке запуска v2rayNG на чистой приставке вы, скорее всего, получите красное окно с ошибкой: geosite.dat: no such file or directory.
Это происходит потому, что программа пытается разделить трафик (пускать заблокированные сайты через VPN, а местные - напрямую), но баз геоданных в системе еще нет.
Как исправить:
На главном экране v2rayNG (где карточка вашего сервера) нажмите на три вертикальные точки в правом верхнем углу -> Файлы ресурсов.

- Правый верхний угол заначек облачко "Обновить файлы геоданных" (Update GeoSite/GeoIP).
- Дождитесь уведомления об успешной загрузке.
(Проверить загрузку можно в боковом меню: Настройки -> Файлы ресурсов. Там должны появиться файлы с указанием их веса в мегабайтах).

После этого выделите сервер и нажмите круглую кнопку запуска внизу. Проверьте соединение через меню сервера -> "Тестирование реальной задержки". Если появились миллисекунды (например, 60ms) - туннель пробил блокировки провайдера.
Что делать, если всё заполнено верно, но YouTube всё равно выдает ошибку?
Если вы идеально перенесли все ключи, тест задержки (Real ping) показывает стабильные миллисекунды, но IP-адрес на приставке не меняется и YouTube продолжает ругаться на ошибку сети, дело в кривых правилах маршрутизации по умолчанию.
Так как v2rayNG - проект международный (изначально ориентированный на обход "Великого китайского файрвола"), в нем "из коробки" могут стоять настройки маршрутизации strictly для Китая. В итоге приложение просто пускает весь трафик до серверов Google в обход созданного туннеля.
Лечится это в три клика прямо через интерфейс приставки:
- На главном экране v2rayNG откройте боковое меню и перейдите в раздел "Маршрутизация" (Routing).
- В правом верхнем углу нажмите на меню из трех вертикальных точек.
- Выберите пункт "Импортировать из набора правил" (Import from ruleset).
- В открывшемся списке выберите конфигурацию для России (чтобы автоматически заворачивать заблокированные ресурсы) или переключите режим на Глобальный (Global), чтобы пустить абсолютно весь интернет-трафик через ваш VPS.
После этого обязательно вернитесь на главный экран, выключите туннель большой круглой кнопкой и запустите его заново для применения новых правил.
Выходить лучше не на кнопку назад, а кнопку домой, тогда приложение останется в оперативной памяти и продолжит работать.
3. Замена YouTube на SmartTube
Встроенный клиент YouTube или его официальный APK на SberBox будут выдавать ошибку "Произошла ошибка. Повторите попытку позже" или сбрасывать авторизацию. Причина проста: в StarOS вырезаны сервисы Google Play, без которых официальное приложение жить не может.
Решение - установка SmartTube. Это легендарный open-source клиент для Android TV, который работает полностью автономно от сервисов Google.
- Найдите на GitHub репозиторий SmartTube (от yuliskov).
- Скачайте стабильную версию (SmartTube_stable.apk), если она не работает то которая заканчивается на armeabi-v7a.apk.
- Закиньте её на
SberBoxчерез тот же apps.sber.ru/my и установите.
Почему SmartTube лучше оригинала:
- Не требует Google Services (GMS).
- Полностью вырезает рекламу.
- Имеет встроенный SponsorBlock (проматывает рекламные вставки самих блогеров).
- Легко управляется с пульта.
Как войти в аккаунт:
В самом SmartTube перейдите в раздел аккаунтов и нажмите "Войти". На экране ТВ появится код. Откройте на смартфоне страницу youtube.com/activate, введите код с экрана телевизора, и все ваши подписки и история мгновенно подтянутся.
Теперь ваш SberBox оборудован современным, неблокируемым VPN-туннелем, и лучшим клиентом для YouTube на рынке. Приставка не тормозит от тяжелых сервисов Google, а трафик надежно зашифрован.
Остались вопросы или что-то не работает? Пишите на почту тех поддержки riopass.ru, разберем любые ошибки!
Успешных настроек! Больше технических инструкций и гайдов для IT-специалистов и энтузиастов читайте на riopass.ru.
Глоссарий
- DPI (ТСПУ): Технические средства противодействия угрозам. Оборудование провайдера, которое осуществляет глубокий анализ пакетов. Именно оно распознает стандартные VPN-протоколы (вроде WireGuard или Outline/Shadowsocks) и блокирует доступ к YouTube.
- v2rayNG: Мощное приложение-клиент для Android и Android TV. В отличие от простых VPN-приложений, оно умеет работать с продвинутыми протоколами маскировки и гибко настраивать маршрутизацию трафика.
- Xray-core (Xray): Современное сетевое ядро (движок), которое работает на вашем VPS-сервере и внутри приложения v2rayNG. Отвечает за прием, обработку и маскировку трафика.
- VLESS: Облегченный протокол передачи данных. В отличие от старых протоколов, он не имеет собственного шифрования (что экономит ресурсы процессора, например ТВ-приставки), передавая эту задачу более мощным алгоритмам.
- Reality: Передовая технология маскировки трафика. Не просто шифрует данные, а создает полноценную иллюзию того, что вы посещаете обычный разрешенный сайт (например, сайт Microsoft или Apple). ТСПУ провайдера видит этот "белый" трафик и пропускает его без блокировок.
- XTLS-Vision (xtls-rprx-vision): Специальный алгоритм потоковой передачи внутри Xray. Он скрывает характерные следы (паттерны) того, что внутри вашего соединения спрятан еще один зашифрованный туннель (защита от обнаружения "TLS in TLS").
- UUID (ID / Идентификатор): Ваш уникальный "пароль" пользователя. Строка из 36 символов (букв и цифр, разделенных дефисами), по которой сервер узнает, что подключаетесь именно вы.
- SNI (Server Name Indication): Домен-прикрытие. Тот самый разрешенный адрес (например, www.sap.com), под который протокол Reality маскирует ваше соединение от глаз провайдера.
- Открытый ключ (Public Key / pbk): Длинная криптографическая строка, которая используется протоколом Reality для установления защищенного сеанса связи с сервером. Самый чувствительный к опечаткам параметр.
- SmartTube: Независимый open-source клиент YouTube для умных телевизоров. Работает без сервисов Google (GMS), вырезает всю рекламу (включая встроенную блогерами) и не конфликтует с закрытыми системами вроде StarOS.
- GeoSite / GeoIP: Встроенные базы данных маршрутизации. Они содержат списки IP-адресов и доменов, позволяя v2rayNG понимать, какой трафик нужно отправлять в зашифрованный туннель (например, заблокированные соцсети), а какой - напрямую (например, локальные сервисы Сбера).
Как навсегда исправить "Troubleshooting keychain issues" в VS Code на Raspberry Pi и Linux
Если вы работаете с Visual Studio Code на Raspberry Pi (или любом другом Linux-дистрибутиве с нестандартной графической оболочкой, например на Wayland), то рано или поздно при попытке авторизоваться в GitHub или синхронизировать настройки вы увидите назойливое окно:
"An OS keyring couldn't be identified for storing the encryption related data in your current desktop environment."
Редактор предложит перейти по ссылке или выбрать Use weaker encryption. В этой статье мы разберем, почему нельзя нажимать кнопку слабого шифрования, и как настроить всё правильно с точки зрения безопасности.
Почему это происходит?
VS Code (построенный на базе Chromium) пытается найти системное защищенное хранилище (keyring), чтобы безопасно спрятать туда ваш токен авторизации (OAuth). Однако в легковесных средах на Raspberry Pi демон ключей часто либо не установлен, либо запускается не так, как ожидает редактор. В итоге VS Code "слепнет" и выдает ошибку.
Быстрое, но опасное решение (Не рекомендую)
Самый частый совет в интернете - прописать в настройках запуска VS Code параметр "password-store": "basic". Да, окно ошибки пропадет. Но ваш секретный токен от GitHub будет сохранен в обычном текстовом файле. Если кто-то получит доступ к файловой системе вашей "малинки" - он получит и полный доступ к вашим репозиториям.
Правильное решение: Настраиваем gnome-keyring
Мы пойдем по пути системного администратора и заставим VS Code работать с системным шифрованием через libsecret.
1. Установка необходимых библиотек
Открываем терминал и ставим сам менеджер ключей и графическую утилиту для управления им:
sudo apt update
sudo apt install gnome-keyring libpam-gnome-keyring seahorse libsecret-1-0 libsecret-tools2. Создание системной связки ключей
Чтобы система могла хранить пароли, нам нужно физически создать "сейф".
- Запускаем установленную утилиту (в терминале вводим
seahorse &или ищем "Пароли и ключи" в меню приложений). - Жмем правой кнопкой мыши в левой колонке -> Создать новую связку ключей (New Keyring).
- Важно! Называем её строго Login (с большой буквы).
- Программа попросит задать пароль. Укажите точно такой же пароль, с которым вы входите в систему. Это позволит Linux автоматически открывать сейф при загрузке.
- Нажмите на новую связку правой кнопкой и выберите "Сделать по умолчанию".
3. Принудительное указание хранилища для VS Code
Осталось сказать редактору, чтобы он перестал гадать и использовал именно нашу новую связку.
- Закройте VS Code, если он открыт, и "убейте" фоновые процессы командой:
killall code Откройте файл аргументов запуска:
nano ~/.vscode/argv.jsonДобавьте строку
"password-store": "gnome-libsecret"перед закрывающей скобкой. Должно получиться так(если в файле ещё что то было не забудьте поставить запятую, подробнее читайте в FAQ ниже):{ "disable-hardware-acceleration": true, "password-store": "gnome-libsecret" }- Сохраните изменения (Ctrl+O, Enter, Ctrl+X).
Ура!
Запускаем Visual Studio Code и спокойно авторизуемся в GitHub. Больше никаких ошибок! Токен надежно зашифрован алгоритмами операционной системы, а любые другие расширения (Copilot, базы данных) будут автоматически использовать это безопасное хранилище.
FAQ: Часто задаваемые вопросы и возможные ошибки
1. Почему в инструкции сказано "не забудьте поставить запятую" в файле argv.json?
Файл argv.json написан в формате JSON. Одно из главных правил этого формата - все параметры внутри фигурных скобок { } должны разделяться запятыми. Запятая ставится после каждого параметра, кроме самого последнего.
Если в вашем файле уже были какие-то настройки, и вы добавляете "password-store" в конец, обязательно поставьте запятую после предыдущей строки.
❌ Неправильно (вызовет ошибку при запуске VS Code):
{
"disable-crash-reporter": true
"password-store": "gnome-libsecret"
}✅ Правильно:
{
"disable-crash-reporter": true,
"password-store": "gnome-libsecret"
}2. Что делать, если файла ~/.vscode/argv.json вообще нет?
Такое бывает, если вы только что установили редактор и ни разу не меняли параметры его запуска. Просто создайте этот файл вручную и впишите туда структуру с нуля:
{
"password-store": "gnome-libsecret"
}(Заметьте: так как параметр здесь всего один, запятая после него не ставится).
3. Я поменял пароль от своего пользователя на Raspberry Pi, и теперь при запуске VS Code снова выскакивают окна.
Когда мы создавали связку ключей Login, мы задали ей пароль, совпадающий с паролем вашего пользователя. Это позволяет системе разблокировать сейф автоматически при входе. Если вы изменили пароль пользователя в Linux (через команду passwd), пароль от сейфа Login остался старым, и автоматическая разблокировка сломалась.
Как исправить: Откройте утилиту Seahorse ("Пароли и ключи"), нажмите правой кнопкой мыши на связку Login, выберите "Изменить пароль" и укажите ваш новый пароль от системы.
4. Подойдет ли эта инструкция для других дистрибутивов Linux (Ubuntu, Debian, Fedora)?
Да, абсолютно. Проблема с "keychain issues" в Visual Studio Code не является эксклюзивом для Raspberry Pi. Она возникает на любом Linux-дистрибутиве, где графическая оболочка (особенно на базе Wayland) или оконный менеджер (i3, sway) не инициализирует gnome-keyring должным образом по умолчанию. Описанный метод с libsecret - это универсальное и правильное решение для всего семейства Linux.
Глоссарий
- Keyring / Keychain (Связка ключей) - системное зашифрованное хранилище в операционной системе, предназначенное для безопасного хранения паролей, ключей шифрования и сертификатов.
- OAuth-токен - специальный цифровой ключ (строка символов), который GitHub выдает приложению (например, Visual Studio Code), чтобы оно могло выполнять действия от вашего имени без необходимости каждый раз вводить логин и пароль.
- gnome-keyring - фоновая служба (демон) в Linux, которая отвечает за управление системной связкой ключей и обеспечивает безопасное хранение секретов.
- libsecret - системная библиотека, которая служит стандартизированным "мостом". Через нее различные программы (включая VS Code) общаются с gnome-keyring, чтобы положить или достать пароль, не вникая в тонкости работы самого хранилища.
- Seahorse (Пароли и ключи) - графическая программа для среды Linux, которая позволяет пользователю визуально просматривать, создавать и управлять своими связками ключей и паролями.
- Wayland - современный протокол графического сервера в Linux (активно используется в последних версиях Raspberry Pi OS). Из-за его архитектурных отличий от старого X11 некоторые классические механизмы (например, автозапуск менеджеров паролей) могут работать нестандартно, что и вызывает подобные ошибки.
- argv.json - скрытый конфигурационный файл Visual Studio Code, в котором задаются низкоуровневые параметры запуска редактора, применяемые еще до загрузки основного графического интерфейса.
- Weaker encryption (Слабое шифрование) - механизм обходного хранения секретов в VS Code, при котором токены сохраняются в локальном файле настроек редактора без использования криптографической защиты операционной системы.
Как установить Docker на Raspberry Pi 5: Полное пошаговое руководство
Raspberry Pi 5 - это невероятно мощный мини-компьютер, который идеально подходит для создания домашнего сервера, медиацентра или системы умного дома. Но чтобы выжать из него максимум и не захламлять систему десятками зависимостей, лучше всего использовать контейнеризацию.
Специально для читателей riopass.ru мы подготовили простую и быструю инструкцию по установке Docker на Raspberry Pi 5.
Подготовка системы
Перед установкой любого серьезного программного обеспечения правило номер один - обновить систему. Это поможет избежать конфликтов версий и гарантирует, что вы используете самые свежие пакеты безопасности.
Откройте терминал на вашей Raspberry Pi (или подключитесь к ней по SSH) и введите следующую команду:
sudo apt update && sudo apt upgrade -yДождитесь завершения процесса. Если обновлений было много, не лишним будет перезагрузить устройство командой sudo reboot
Установка Docker
Самый простой и официально рекомендуемый способ установки Docker на Raspberry Pi OS (которая базируется на Debian) - использование автоматического скрипта установки.
1. Загрузка установочного скрипта
Скачайте официальный скрипт с сайта Docker с помощью утилиты curl:
curl -fsSL https://get.docker.com -o get-docker.sh2. Запуск скрипта
Теперь запустите скачанный скрипт с правами суперпользователя:
sudo sh get-docker.shПроцесс установки займет пару минут. Скрипт самостоятельно определит архитектуру вашего процессора (ARM64 для Raspberry Pi 5) и скачает нужные версии пакетов.

Настройка прав доступа (чтобы работать без sudo)
По умолчанию для выполнения команд Docker требуются права root. Постоянно писать sudo docker - это неудобно и не совсем безопасно. Чтобы этого избежать, нужно добавить вашего текущего пользователя (обычно это пользователь pi или тот, которого вы создали при установке системы) в группу docker
Выполните команду:
sudo usermod -aG docker $USERЧтобы изменения вступили в силу без перезагрузки всей системы, примените новую группу:
newgrp docker(Примечание: если после этого команды Docker все равно требуют sudo, просто перезагрузите Raspberry Pi командой sudo reboot).
Проверка установки
Давайте убедимся, что всё прошло успешно. Введите в терминал команду для проверки версии:
docker --versionВы должны увидеть актуальную версию Docker, например: Docker version 29.4.0, build 9d7ad9f.
А теперь - традиционный тест! Запустим тестовый контейнер hello-world:
docker run hello-worldЕсли установка прошла успешно, Docker скачает минималистичный образ и выведет на экран приветственное сообщение: "Hello from Docker!".
Настройка автозапуска
Чтобы контейнеры автоматически поднимались после сбоя питания или перезагрузки Raspberry Pi, нужно добавить службу Docker в автозагрузку:
sudo systemctl enable docker.service
sudo systemctl enable containerd.serviceОставайтесь с riopass.ru, впереди еще много полезных шпаргалок по настройке вашего домашнего сервера!
FAQ: Часто задаваемые вопросы
В: Почему Docker лучше обычной установки программ через apt install?
О: Docker изолирует приложения. Вы можете запустить пять разных версий Python на одной Raspberry Pi 5, и они не будут конфликтовать. Кроме того, удаление программы в Docker - это просто удаление контейнера, после которого в основной системе не остается никакого "мусора".
В: Сильно ли Docker нагружает Raspberry Pi 5?
О: Raspberry Pi 5 обладает мощным процессором и быстрой оперативной памятью, поэтому накладные расходы на работу Docker практически незаметны (обычно это 1-2% ресурсов). Это гораздо эффективнее, чем использование виртуальных машин.
В: Что делать, если Docker не скачивает образы (ошибки "Timeout" или "Connection refused")?
О: В некоторых регионах доступ к официальному Docker Hub может быть ограничен или работать нестабильно. В таких случаях можно использовать зеркала (прокси-репозитории).
Одним из надежных вариантов является прокси от Timeweb. Чтобы им воспользоваться, нужно отредактировать (или создать) файл конфигурации:
sudo nano /etc/docker/daemon.jsonДобавьте туда следующий адрес:
{
"registry-mirrors": ["https://dockerhub.timeweb.cloud/"]
}После этого перезапустите службу: sudo systemctl restart docker. Теперь образы будут скачиваться через это зеркало.
В: Нужно ли использовать 64-битную ОС для Docker на Raspberry Pi 5?
О: Да, крайне желательно. Raspberry Pi 5 - это 64-битное устройство, и Docker работает эффективнее именно на 64-битных версиях Raspberry Pi OS или Ubuntu. Это также дает доступ к большему количеству современных образов.
В: Как обновить Docker до последней версии?
О: Поскольку мы устанавливали его через официальный репозиторий, Docker будет обновляться автоматически при выполнении стандартной команды обновления системы: sudo apt update && sudo apt upgrade.
Глоссарий
- Docker (Докер) - специальная платформа, которая позволяет упаковать любую программу со всеми ее настройками и файлами в единый стандартизированный блок. Благодаря этому программа будет одинаково хорошо работать на любом устройстве, будь то ваш ноутбук или Raspberry Pi.
- Docker Hub - крупнейшее в мире публичное хранилище (реестр) образов Docker. Это своего рода "магазин приложений", откуда скачиваются официальные образы Python, Nginx, PostgreSQL и тысяч других программ.
- Контейнеризация - сама технология изоляции приложений друг от друга и от основной операционной системы. Контейнеры потребляют гораздо меньше ресурсов, чем традиционные виртуальные машины.
- Образ (Image) - это готовый неизменяемый шаблон или "чертеж" программы. Скачивая образ (например, hello-world), вы получаете инструкцию для системы, как именно запускать приложение.
- Контейнер (Container) - это "оживший" образ. Запущенная и работающая в изолированной среде программа. Из одного образа можно запустить несколько одинаковых контейнеров.
- Репозиторий (Repository) - коллекция образов Docker с одинаковым именем, но разными тегами (версиями). Например, в репозитории python могут быть теги
3.10, 3.12-slimи так далее. - Терминал (Командная строка) - текстовый интерфейс для общения с операционной системой. Вместо того чтобы кликать мышкой по иконкам, вы вводите текстовые команды.
- SSH (Secure Shell) - защищенный протокол, который позволяет вам подключиться к терминалу вашей Raspberry Pi удаленно, например, с основного компьютера или ноутбука.
- Root / Sudo - Root это главный администратор (суперпользователь) в системах Linux, которому разрешено делать с системой абсолютно всё. Команда sudo (Superuser DO) позволяет обычному пользователю временно выполнить конкретную команду с правами этого самого главного администратора.
- Скрипт - текстовый файл, содержащий последовательность команд, которые компьютер должен выполнить автоматически (например, скрипт установки Docker скачивает, распаковывает и настраивает все нужные файлы за вас).
Как настроить SSH Config и перестать путаться в ключах и IP-адресах
Если ваша работа или хобби связаны с IT, вы наверняка регулярно подключаетесь к удаленным машинам. Поднять личный VPN на Amnezia, настроить Outline, закинуть скрипт на рабочий сервер или поковырять домашнюю медиастанцию - для всего этого мы используем SSH.
Но когда серверов становится больше двух, начинается классическая боль. Приходится держать в голове (или в бесконечных заметках) кучу IP-адресов, логинов и путей к SSH-ключам.
Вместо того чтобы каждый раз набирать монструозные конструкции вроде:
ssh -i ~/.ssh/vpn_private_key root@44.158.22.1...можно настроить всё так, чтобы подключаться к любому серверу в два слова.
Сегодня на www.riopass.ru разберем, как один простой текстовый файл сэкономит вам массу времени и нервов.
Знакомьтесь: файл конфигурации SSH
Вся магия скрывается в файле config, который лежит в директории с вашими SSH-ключами.
- Для Windows:
C:\Users\ИмяПользователя\.ssh\config (или %USERPROFILE%\.ssh\config) - Для Linux / macOS:
~/.ssh/config
Если такого файла у вас в папке .ssh еще нет - просто создайте его (это обычный текстовый файл без расширения, , а просто не config.txtconfig).
Пример идеальной конфигурации
Давайте посмотрим на реальный пример. Допустим, у нас есть три разных сервера с разными ключами. Открываем наш файл config в любом текстовом редакторе и пишем:
Host amnezia
HostName 44.158.22.1
User root
IdentityFile ~/.ssh/vpn
Host outline
HostName 98.145.22.3
User root
IdentityFile ~/.ssh/german
Host server
HostName 98.145.22.154
User root
IdentityFile ~/.ssh/serverРазбираем теорию: что означают эти параметры?
Структура файла максимально проста и логична:
Host- это алиас (псевдоним), который вы придумываете сами. Именно это слово вы будете писать в терминале. Назвать можно как угодно:amnezia,work-pc,my-pi5.HostName- реальный IP-адрес вашего сервера (или доменное имя).User- имя пользователя, под которым вы логинитесь (чаще всего это root, но может быть ubuntu, pi, admin и т.д.).IdentityFile- полный путь к вашему приватному SSH-ключу от этого конкретного сервера.
Важное примечание для пользователей Windows: в параметре IdentityFile можно использовать пути в стиле Linux (~/.ssh/vpn), современные версии OpenSSH в Windows 10/11 отлично их понимают.
Как это работает на практике?
Теперь магия в действии. Открываем терминал и вместо того, чтобы судорожно искать IP-адрес и нужный ключ, просто пишем:
ssh amneziaИ всё! Система сама посмотрит в config, поймет, что под словом amnezia скрывается адрес 44.158.22.1, возьмет пользователя root и подсунет нужный ключ ~/.ssh/vpn.
Точно так же, для подключения к серверу Outline:
ssh outlineПару советов напоследок
- Права доступа (для Linux/macOS): SSH очень ревностно относится к безопасности. Убедитесь, что у вашего файла конфигурации стоят правильные права доступа, иначе SSH может отказаться его читать. Выполните команду: chmod 600 ~/.ssh/config.
- Организация: Если серверов станет совсем много, вы можете оставлять в файле config комментарии, используя символ #. Например: # Мои личные VPN-серверы.
Настроив этот файл один раз, вы больше никогда не запутаетесь в ключах и IP-адресах.
Делаем SSH еще удобнее
Но если базовая настройка вас уже не впечатляет, давайте добавим пару параметров, которые используют настоящие джедаи терминала. Их можно прописать как для конкретного сервера, так и для всех сразу.
1. Чтобы соединение не "отваливалось" (ServerAliveInterval)
Знакомая ситуация: вы подключились к серверу, отошли заварить кофе, возвращаетесь, а терминал завис и не реагирует на нажатия клавиш. Это происходит из-за того, что провайдеры или домашние роутеры автоматически обрывают неактивные сетевые сессии.
Чтобы этого избежать, добавим в самый верх файла config глобальное правило:
Host *
ServerAliveInterval 60Звездочка Host * означает, что правило применится ко всем серверам. Теперь ваш компьютер будет каждые 60 секунд отправлять "невидимый" пинг (keep-alive пакет), чтобы дать понять маршрутизаторам: "Эй, мы тут работаем, соединение не рвать!".
2. Проброс портов (LocalForward): безопасный доступ к закрытым админкам
Допустим, на вашем домашнем сервере или Raspberry Pi крутится свежий проект на FastAPI, локальная база данных или какая-нибудь веб-админка, которая слушает только локальный порт (например, 8000). Открывать этот порт наружу в интернет - плохая идея с точки зрения безопасности.
Тут на помощь приходит проброс портов через SSH-туннель:
Host dev-server
HostName 98.145.22.154
User root
IdentityFile ~/.ssh/server
LocalForward 8000 localhost:8000Что это дает? Как только вы подключаетесь командой ssh dev-server, SSH создает защищенный туннель. Теперь вы можете просто открыть браузер на своем рабочем компьютере, вбить http://localhost:8000, и вы попадете прямо в админку удаленного сервера! Трафик при этом будет полностью зашифрован.
3. Прыжок через сервер (ProxyJump): доступ к закрытым сетям
Представьте ситуацию: у вас есть домашняя Raspberry Pi или рабочий сервер базы данных, к которому нет прямого доступа из интернета (он спрятан за NAT или корпоративным фаерволом). Чтобы на него попасть, вам нужно сначала подключиться к определенному серверу-шлюзу (Bastion host), и уже с него заходить на целевую машину.
Раньше приходилось делать это в два этапа или, что еще хуже, хранить свои приватные SSH-ключи на промежуточном сервере-шлюзе (что категорически нельзя делать из соображений безопасности).
С параметром ProxyJump вы можете сделать это одной командой, а все ключи останутся только на вашем компьютере:
# Сначала описываем наш сервер-шлюз (через который будем прыгать)
Host gateway
HostName 98.145.22.154
User root
IdentityFile ~/.ssh/server
# Теперь описываем закрытый сервер
Host secret-pi
HostName 192.168.1.50 # Внутренний IP-адрес в закрытой сети!
User pi
IdentityFile ~/.ssh/pi_key
ProxyJump gatewayКак это работает? Когда вы пишете в терминале ssh secret-pi, ваш SSH-клиент сам понимает, что нужно сделать:
- Он молча подключается к
gateway. - Прямо внутри этого соединения создает безопасный туннель до внутреннего адреса
192.168.1.50. - Авторизуется на secret-pi, используя ваш локальный ключ
~/.ssh/pi_key.
Вы сразу попадаете в консоль целевого сервера, как будто подключились к нему напрямую. Быстро, безопасно и максимально элегантно.
Файл ~/.ssh/config - это тот самый инструмент, настройка которого занимает 10 минут, но экономит часы рабочего времени и спасает нервные клетки в будущем. Начните с простых алиасов, а когда почувствуете себя уверенно - экспериментируйте с пробросом портов и прыжками через хосты.
Глоссарий: по терминам из статьи
- SSH (Secure Shell) - сетевой протокол, который позволяет безопасно (в зашифрованном виде) управлять удаленным компьютером или сервером через командную строку.
- SSH-ключ (IdentityFile) - криптографический файл, который работает как ваш цифровой пропуск. Состоит из двух частей: открытого ключа (хранится на сервере) и закрытого (хранится у вас). Позволяет входить на сервер без ввода пароля, что гораздо безопаснее и удобнее.
- Алиас (Host / Псевдоним) - короткое и понятное выдуманное имя (например,
amneziaилиhome-pi), которое заменяет собой длинный IP-адрес для удобства ввода команд. - Проброс портов (Port Forwarding / SSH-туннелирование) - создание защищенного "коридора" внутри SSH-соединения. Позволяет безопасно прокинуть локальный порт удаленного сервера на ваш рабочий компьютер, чтобы открыть закрытую веб-админку в своем браузере.
- Bastion Host (Сервер-шлюз / Jump Server) - промежуточный сервер, имеющий выход в интернет, через который осуществляется доступ к внутренним, изолированным от сети серверам. Именно для прыжка через него мы используем параметр
ProxyJump. - Keep-alive пакеты - специальные "пустые" сигналы, которые ваш компьютер периодически отправляет на сервер, чтобы сетевое оборудование провайдера не разорвало соединение из-за долгого бездействия (настраивается параметром
ServerAliveInterval). - NAT (Network Address Translation) - механизм в маршрутизаторах, который позволяет нескольким устройствам в домашней или корпоративной сети выходить в интернет под одним общим («белым») IP-адресом. Из-за NAT к внутренним устройствам (например, домашней Raspberry Pi) нельзя напрямую подключиться извне без дополнительных настроек (таких как VPN или ProxyJump).
Про APIPA, Эффект гонки и как DORA связана с DHCP?
DHCP (Dynamic Host Configuration Protocol) - это сетевой протокол, который автоматически раздает устройствам IP-адреса и другие важные настройки (маску подсети, шлюз по умолчанию и адреса DNS-серверов). Без него каждый адрес в сети пришлось бы вбивать руками.
Процесс получения IP-адреса называется DORA (по первым буквам четырех этапов):
- D - Discover (Поиск): Новое устройство кричит на всю сеть (широковещательный запрос): "Эй! Мне нужен IP-адрес. Тут есть DHCP-сервер?"
- O - Offer (Предложение): Роутер (или выделенный сервер) слышит запрос, резервирует свободный адрес и отвечает: "Я тут. Возьми вот этот IP".
- R - Request (Запрос): Устройство отвечает: "Отлично, беру! Оформи аренду".
- A - Acknowledge (Подтверждение): Сервер фиксирует выдачу: "Договорились. Адрес твой на следующие 24 часа".

Динамические адреса - это удобно для смартфонов, но плохо для серверов. Например, если вы подняли сервер Minecraft или развернули виртуалку в Proxmox, смена IP после перезагрузки сломает все доступы. Для таких случаев в DHCP используют Static Lease (Резервирование) - жесткую привязку нужного IP-адреса к MAC-адресу сетевой карты устройства.
Пример: Клиентский ПК без интернета
Во время удаленной поддержки клиент жалуется, что сеть "отвалилась". Ты просишь его проверить IP-адрес в настройках Windows, и он диктует что-то вроде 169.254.x.x.
Это так называемый адрес APIPA (Automatic Private IP Addressing). Он означает, что процесс DORA сломался на первом же шаге: ПК прокричал "Discover", но DHCP-сервер ему не ответил (или до него не дошел запрос из-за проблем со свитчем). ОС поняла, что ответа не будет, и назначила себе этот резервный адрес.
Подробнее про APIPA (169.254.x.x)
APIPA (Automatic Private IP Addressing) - это встроенный в операционные системы (Windows, macOS, большинство дистрибутивов Linux) механизм "спасения утопающих".
Когда ПК отправляет широковещательный DHCP Discover, но в ответ тишина (таймаут), ОС понимает: "Сервера нет, но сеть как-то строить надо". Тогда она делает следующее:
- Выбирает случайный адрес из зарезервированного диапазона
169.254.0.1 – 169.254.255.254с маской подсети255.255.0.0(или/16). - Проверяет на конфликты: Перед тем как назначить этот адрес сетевому интерфейсу, ПК отправляет специальный запрос (Gratuitous ARP) в сеть: "Эй, у кого-нибудь уже есть этот 169.254.x.y?". Если ответа нет - забирает адрес себе. Если есть - генерирует новый и спрашивает снова.
APIPA не назначает основной шлюз (Default Gateway) и DNS.
Это значит, что интернета на этом ПК не будет. Однако, если в кабинете стоит свитч, к которому подключены пять компьютеров, и роутер внезапно "умер", все пять ПК получат адреса 169.254.x.x. Они смогут пинговать друг друга, и ты даже сможешь расшарить между ними папку по локалке. Это так называемая Link-Local сеть.
Два DHCP-сервера в одной сети: Эффект гонки (Race Condition)
Представь ситуацию: в офисе работает основной роутер (сеть 192.168.1.0/24), но кто-то из сотрудников принес из дома свой Wi-Fi роутер (сеть 10.0.0.0/24), воткнул его LAN-портом в офисную розетку и забыл выключить на нем DHCP. Это называется Rogue DHCP (ложный/паразитный DHCP-сервер).
Оба сервера находятся в одном широковещательном домене (L2-сегменте). Что произойдет, когда новый клиент включит ПК?
Сработает правило: Кто первый встал, того и тапки.
- Клиент кричит на всю сеть DHCP Discover.
- Этот крик слышат оба DHCP-сервера.
- Оба сервера моментально формируют пакет DHCP Offer (один предлагает
192.168.1.50, другой -10.0.0.20) и отправляют его клиенту. - Клиент получает оба предложения, но принимает то, которое пришло к нему первым. Второе он просто игнорирует.
- Клиент отправляет DHCP Request на первый пришедший IP, официально забирая его. Проигравший сервер видит это и возвращает свой IP обратно в пул свободных.
От чего зависит скорость ответа?
- От загрузки процессора роутера/сервера.
- От топологии (какой сервер физически ближе по количеству свитчей к клиенту).
- От настроек (некоторые enterprise-серверы искусственно делают микро-задержку пинга перед выдачей IP, чтобы проверить, не занят ли он, а дешевый домашний роутер выпаливает адрес не глядя).
Последствия для сети:
Абсолютный хаос. Половина офиса (те, кто успел получить правильный IP от 192.168.1.x) будет работать нормально. Вторая половина получит IP 10.0.0.x, неправильный шлюз (домашний роутер сотрудника) и останется без интернета и доступа к корпоративным ресурсам. Причем после перезагрузки ПК ситуация может поменяться местами.
Для защиты от таких паразитных серверов на умных (управляемых) коммутаторах настраивают функцию DHCP Snooping. Она разрешает пакетам DHCP Offer проходить только через один конкретный (доверенный) порт, к которому подключен легальный сервер, а на всех остальных портах такие пакеты жестко блокируются.
Защита инфраструктуры: DHCP Snooping
DHCP Snooping - это как раз тот самый "фейсконтроль" на уровне управляемого коммутатора (свитча), который защищает сеть от хаоса с двумя серверами.
Чтобы понять, какой именно порт блокируется, нужно посмотреть на то, как коммутатор делит все свои порты после включения этой функции. Он разбивает их на два лагеря: Trusted (Доверенные) и Untrusted (Недоверенные).
Как это выглядит под капотом
По умолчанию, когда ты включаешь DHCP Snooping на свитче, абсолютно все порты становятся недоверенными (Untrusted). Доверенные порты сетевой администратор должен назначить руками.
- Trusted (Доверенный) порт: Это порт, к которому физически подключен твой легальный DHCP-сервер (или аплинк-порт, который ведет к другому коммутатору, за которым стоит сервер).
- Что разрешено: Через этот порт коммутатор пропускает любые DHCP-пакеты. И запросы от клиентов (Discover, Request), и ответы от сервера (Offer, Acknowledge).
- Untrusted (Недоверенный) порт:
- Это порты, куда подключаются обычные пользователи, рабочие станции, принтеры и, потенциально, тот самый принесенный из дома роутер сотрудника.
- Что разрешено: Коммутатор разрешает получать из этого порта только клиентские запросы (Discover, Request), потому что ПК должны иметь возможность попросить IP.
- Что БЛОКИРУЕТСЯ: Если из этого порта вдруг "вылетает" пакет от имени сервера (например, DHCP Offer с предложением IP-адреса), коммутатор понимает: "Ага, за этим портом сидит самозванец!". Он моментально отбрасывает (drop) этот пакет, а сам порт может перевести в состояние ошибки (err-disable), выключив на нем линк и отправив алерт админу.
Binding Database
DHCP Snooping Binding Database (База данных привязок) - это специальная таблица, которую коммутатор (свитч) автоматически создает и хранит в своей оперативной памяти, когда на нем активирована функция DHCP Snooping.
Позже эта таблица используется для защиты от подмены IP-адресов и мак-спуфинга (например, с помощью функции Dynamic ARP Inspection), чтобы никто не мог вручную прописать себе чужой IP и перехватывать трафик.
Как выглядит эта таблица
Если зайти в консоль управления коммутатором (например, Cisco) и ввести команду show ip dhcp snooping binding, вы увидите примерно такую картину:

Сама по себе Binding Database - это просто лог-файл. Но она является фундаментом для работы двух очень мощных технологий защиты от хакеров внутри локальной сети:
- Dynamic ARP Inspection (DAI) - Защита от перехвата трафика
- Проблема: Хакер в локальной сети может отправить фальшивое сообщение (ARP-ответ) всем компьютерам: "Эй, теперь я ваш роутер (шлюз), отправляйте весь интернет-трафик через меня!". Это называется атакой Man-in-the-Middle (Человек посередине).
- Как помогает база: Если включить DAI, коммутатор перестает верить устройствам на слово. Когда порт хакера пытается заявить: "Мой IP - это IP роутера", свитч мгновенно сверяется с Binding Database. Он видит: "Так, на порту №8 у нас числится IP
192.168.1.51, а ты пытаешься выдать себя за шлюз192.168.1.1. Блокирую!". Пакет уничтожается.
- IP Source Guard (IPSG) - Защита от подмены IP-адреса
- Проблема: Пользователь может вручную зайти в настройки сетевого адаптера Windows и прописать себе чужой IP-адрес (например, адрес начальника или сервера), чтобы получить чужие права доступа или избежать ограничений по скорости.
- Как помогает база: Свитч проверяет каждый исходящий пакет данных от пользователя. Если в пакете указан IP-адрес отправителя
192.168.1.100, а в базе привязок за этим портом числится192.168.1.50, коммутатор просто не выпустит этот трафик за пределы порта.