Документация Shadowsocks

Формат конфигурации Shadowsocks

Файл конфигурации

Shadowsocks принимает конфигурации формата JSON:

{

    «сервер»: «мой_сервер_ip»,

    «Server_port»: 8388,

    "Local_port": 1080,

    «пароль»: «barfoo!»,

    «метод»: «chacha20-ietf-poly1305»

}

Формат JSON

  • сервер: ваше имя хоста или IP-адрес сервера (IPv4/IPv6).
  • server_port: номер порта сервера.
  • local_port: номер локального порта.
  • пароль: пароль, используемый для шифрования передачи.
  • метод: метод шифрования.

Метод шифрования

Мы настраиваем наши серверы и рекомендуем вам использовать шифр chacha20-ietf-poly1305 AEAD, так как это самый надежный метод шифрования. 

Если вы настраиваете свой собственный сервер shadowsocks, вы можете выбрать «chacha20-ietf-poly1305» или «aes-256-gcm».

URI и QR-код

Shadowsocks для Android/IOS также принимает конфигурации формата URI в кодировке BASE64:

ss://BASE64-ENCODED-STRING-БЕЗ-PADDING#TAG

 

Простой URI должен быть: ss://method:password@hostname:port

Приведенный выше URI не соответствует RFC3986. Пароль в этом случае должен быть простым текстом, а не процентным кодированием.



Пример: мы используем сервер по адресу 192.168.100.1:8888. через бф-кфб метод шифрования и пароль тест/!@#:

 

Затем с помощью простого URI сс://bf-cfb:тест/!@#:@192.168.100.1:8888, мы можем сгенерировать URI в кодировке BASE64: 

 

> console.log("ss://" + btoa("bf-cfb:test/!@#:@192.168.100.1:8888"))

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg

 

Чтобы упростить организацию и идентификацию этих URI, вы можете добавить тег после строки в кодировке BASE64:

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server

адресация

Shadowsocks использует адреса, найденные в формате адресов SOCKS5:

[1-байтовый тип][хост переменной длины][2-байтовый порт]

 

Вот определенные типы адресов:

  • 0x01 : хост — это 4-байтовый IPv4-адрес.
  • 0x03 : хост представляет собой строку переменной длины, начинающуюся с 1-байтовой длины, за которой следует максимальное 255-байтовое доменное имя.
  • 0x04 : хост — это 16-байтовый IPv6-адрес.

 

Номер порта представляет собой 2-байтовое целое число без знака с обратным порядком байтов.

TCP

Клиент ss-local инициирует соединение с ss-remote, отправляя зашифрованные данные, начиная с целевого адреса, за которыми следуют данные полезной нагрузки. Шифрование будет отличаться в зависимости от используемого шифра.

[целевой адрес][полезная нагрузка]

ss-remote получает зашифрованные данные, затем расшифровывает и анализирует целевой адрес. Затем он создает новое TCP-соединение с целью и пересылает ему данные полезной нагрузки. ss-remote получает ответ от цели, затем шифрует данные и пересылает их обратно в ss-local до тех пор, пока он не отключится.

В целях запутывания локальные и удаленные должны отправлять данные рукопожатия с некоторой полезной нагрузкой в ​​первом пакете.

UDP

ss-local отправляет зашифрованный пакет данных, содержащий целевой адрес и полезную нагрузку, на ss-remote.

[целевой адрес][полезная нагрузка]

После получения зашифрованного пакета ss-remote расшифровывает и анализирует целевой адрес. Затем он отправляет новый пакет данных с полезной нагрузкой на цель. ss-remote получает пакеты данных от цели и добавляет адрес цели к полезной нагрузке в каждом пакете. Зашифрованные копии отправляются обратно в ss-local.

[целевой адрес][полезная нагрузка]

Этот процесс можно свести к тому, что ss-remote выполняет трансляцию сетевых адресов для ss-local.

Начните 5-дневную бесплатную пробную версию