При попытке подключиться к репозиторию Docker многие пользователи могли столкнуться с ошибкой “denied: 403 Forbidden. “Error response from daemon: error parsing HTTP 403 response body: invalid character ‘<’ looking for beginning of value:”
На текущий момент использования платформы контейнеризации не запрещено, однако, загрузка образов из репозиториев прекращена для некоторых стран! Что делать, если вы случайно попали под блокировку? Существует множество вариантов решения проблемы: поднятие зеркала сайта, VPN-сервера или же прокси туннеля. В данном руководстве мы рассмотрим самый не приметный и просто вариант подключения к Docker Hub. Для этого будем использовать ShadowSocks!
Что такое ShadowSocks и как его настраивать?
ShadowSocks – это прокси-сервер с возможностью шифрования туннелированного трафика проходящего через него с целью безопасной передачи, через недоверенные участки сети, а также обращения через устройства с иным IP-адресом.
Принцип работы заключается в следующей схеме:
клиент <—> ss-локальный<–[зашифрованный трафик]–> ss-удаленный <—> целевой сервер
Клиент поднимает на своей стороне прокси сервер, которому можно обратиться по внутреннему адресу. Весь приходящий на него трафик шифруется и передается на ss-удаленный или же endpoint, где он принимается и расшифровывается. После чего происходит обращение от машины куда пришли пакеты, и затем происходит обратный процесс передачи на клиент.
Настройка сервера ShadowSocks
Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:
Потребуется некоторое время для развертывания серверных мощностей. После чего вы можете подключиться любым из удобных способов. На основе предлагаемы VPS и VDS серверов, так же можно развернуть уже свою виртуальную инфраструктуру.
Перед установкой и настройкой сервера необходимо обновить репозитории и скачать необходимые для работы пакеты. Если вы используете apt-менеджер, то команда будет выглядеть следующим образом:
Установку сервера будем производить через snap, который представляет собой пакетный менеджер с возможностью изолированно запускать утилиты и приложения. Для этого установим через snap основные утилиты для работы, через команду:
После чего установим сам пакет с ShadowSocks:
Проверим его компоненты и разрешения для работы с остальной ОС через команды:
Как видим пакет состоит из двух служб local и server, где один клиент для подключения, а второй сервер. У этого образа предоставлены права на работу с сетью и возможностью вносить изменения в сетевой стек.
Создадим конфигурационный файл для нашего сервера, в формате json:
И пропишем конфигурацию для подключения к серверу:
"server": "0.0.0.0",
"mode":"tcp_and_udp",
"server_port":1224,
"password":"ZmVlNmlldDVhZW5naWU2ZWlUb29nOGFobjNvaFlpZQo=",
"timeout":300,
"method":"2022-blake3-aes-256-gcm"
}
В поле сервер укажите конкретный внешний IP-адрес или оставьте прием со всех интерфейсов по умолчанию в виде 0.0.0.0. В поле mode укажите протокол для транспорта вашего трафика, далее укажите порт для подключения к серверу. Пароль из 31 одного символа в виде base64, для этого пропишите следующую команду и введите результат в поле password:
По желанию и вашим требованиям, вы можете изменить метод шифрования трафика! Сохраним конфигурацию файла комбинацией Ctrl + O. После чего протестируем работоспособность сервера командой, где вызовем демон и укажем конфиг для его работы:
Отлично трафик проксируется, значит можем добавить сервер в автозагрузку:
После этого будет создан unit в системе инициализации, который необходимо отредактировать и добавить наш новый конфигурационный файл:
К полю ExecStart добавим строку и запустим чтение конфигураций:
Сохраним файл и перечитаем новую конфигурацию, после чего запустим службу:
После чего зафиксируем результат и проверим порты:
Порты прослушиваются, а служба работает исправно, теперь необходимо выполнить аналогичные действия, но для клиента.
Настройка клиента ShadowSocks
Также установим пакеты snapd и curl и проведем аналогичные действия, как и для сервера.
Установим клиент и распишем новый файл конфигурации для него:
В сам файл вставляем следующие поля JSON:
"server": "IP_Сервера",
"mode":"tcp_and_udp",
"server_port":Ваш_порт_сервера,
"local_address":"127.0.0.1",
"local_port":Локальный_порт,
"password":"Пароль в Base64 от сервера",
"timeout":300,
"method":"Метод шифрования"
}
Подключим автозагрузку для клиента пользователя и настроим файл:
Пропишем в поле ExecStart необходимый конфиг для загрузки и работы:
После чего запустим чтение новых конфигурационных файлов
Перезапустим службу и проверим наши настройки через curl:
Для того, чтобы только трафик Docker ходил через прокси необходимо дополнить юнит системы инициализации. Создадим папку и зайдем в конфиг файл:
Пропишем необходимые переменные для работы dockerd и сохраним через Ctrl + O:
Environment="HTTPS_PROXY=127.0.0.1:1224"
Перечитаем новые конфигурационные файлы и перезапустим Docker:
sudo systemctl restart docker
ShadowSocks, благодаря своей возможности шифрования трафика, обеспечивает безопасное подключение к необходимым ресурсам, обходя ограничения и предоставляя доступ к Docker Hub. Настройка сервера и клиента ShadowSocks, а также интеграция его с Docker-клиентом и демоном позволяют создать устойчивое и надежное соединение. Следуя пошаговым инструкциям по установке и настройке, вы сможете настроить систему таким образом, чтобы весь трафик Docker проходил через прокси, обеспечивая доступ к необходимым образам и репозиториям.
Таким образом, даже в условиях блокировки вы можете продолжать использовать возможности контейнеризации Docker, используя современные и надежные решения для проксирования трафика.