Здесь описано как поднять shadowsocks2022 через sing-box, используя всего один файл - docker-compose.yml. Либо два файла, если вам нужен мультиаккаунтинг. Для управления конфигурацией используется командная строка.

! Описано всё для версии docker image v1.5.4. Начиная с v1.6.0 добавлен VLESS, изменена команда для генерации. Новые команды указаны в репозитории.

Этот вариант для тех, кто знаком с консолью и не любит лишних сущностей.

Для поднятия сервера будет использоваться docker image, который собирается вот здесь https://github.com/itdoginfo/sing-box . В README репозитория описаны основные моменты, без подробностей.

Вам нужно:

  • Linux сервер
  • SSH доступ

Видеоверсия

Установка docker

Сначала нужен докер, если у вас его нет, можно установить одной командой:

curl -fsSL https://get.docker.com | sh

Она добавит docker репозиторий для вашей ОС, установит docker-ce и compose плагин.

Классический вариант с одним паролем

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

Рассмотрим сначала классический вариант.

Создаём отдельную директорию для sing-box и скачиваем туда compose файл из репозитория:

mkdir sing-box && cd sing-box && wget https://raw.githubusercontent.com/itdoginfo/sing-box/main/docker-compose.yml

Для паролей в sing-box используется генерация случайных байтов и её последующая кодировка в base64. Например, с помощью openssl генерация 16ти байт будет выглядеть так:

openssl rand -base64 16

Для shadowsocks2022 есть три метода кодировки

  • 2022-blake3-aes-128-gcm
  • 2022-blake3-aes-256-gcm
  • 2022-blake3-chacha20-poly1305

У меня везде по умолчанию проставлен первый вариант. На текущий момент в России я не вижу причин использовать другие методы. 2022-blake3-aes-128-gcm самый простой и короткий.

Итак, для классического варианта необходимо сгенерировать один пароль, это можно сделать с помощью image, который вы будете использовать для сервера:

docker run itdoginfo/sing-box:v1.5.2 gen

Полученный пароль необходимо вставить в env PASS в скачанном docker-compose.yml. Туда же в SERVER нужно добавить домен или IP-адрес вашего сервера, это необходимо для последующей генерации конфигов для клиентов.

Поднимаем контейнер

docker compose up -d

Сервер поднят, осталось получить удобный и импортируемый конфиг для клиентов:

docker exec sing-box show

Эта команда выдаст строку clipboard, QR код, с помощью которых можно легко добавить подключение в почти любом приложении. Также будет значения для ручной настройки, пригодится для настройки роутера с OpenWrt.

В этом классическом варианте вы также можете поменять порт, на котором будет располагаться ваш прокси. Для этого задайте ENV переменную PORT и поменяйте 443:443 на этот порт. Почему не только в compose файле? Чтоб работала генерация конфига.

Также можно изменить метод шифрования с помощью переменной env METHOD.

Вариант с несколькими пользователями

Самое важное, что нужно для понимания, в случае использования параметра users пароль для клиента выглядит как “основной_пароль:пароль_клиента”. Все юзеры будут знать основной пароль, но при этом смогут использовать сервер, только добавляя к нему свой пароль.

Я не придумал как можно через ENV переменные генерировать красиво конфиг с мультиаккаунтингом для sing-box, поэтому тут вам потребуется использовать подготовленный конфиг.

В файле docker-compose.yml раскоментируйте volume

    volumes:
     - ./config:/etc/sing-box/

Создайте директорию config и скачайте туда пример конфига

mkdir config && wget -O config/config.json https://raw.githubusercontent.com/itdoginfo/sing-box/main/config/config.json

Сгенерируйте основной пароль и несколько паролей для первых пользователей

docker run itdoginfo/sing-box:v1.5.2 gen

Проставьте их в config.json заместо mainpass и паролей пользователей. Имена можно задать любые.

Чтоб volume присоединился требуется опустить и поднять всю compose конфигурацию

docker compose down
docker compose up -d

Когда вам потребуется добавлять или удалять пользователей, нужно будет рестартить контейнер, чтоб sing-box подхватил изменения:

docker restart sing-box

Материалы про VPN и точечный обход блокировок, которые не дотягивают до полноценной статьи, публикую в моём телеграм-канале .