Здесь описано как поднять 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
Все обновления и новые статьи публикую в моём телеграм-канале .