Суть его работы такова: клиент делает вид, что он является прокси-сервером, получает входящие соединения и шифрует их. После этого отправляет на сервер и там уже выпускает в интернет.​

Чем он так хорош?​

  • Все данные, которые проходят через клиент и сервер зашифрованы.
  • Скорость работы. По сравнению с SSH туннелем, который работает по схожему принципу, shadowsocks имеет большую пропускную способность.
  • Алгоритм шифрования можете выбрать сами.
  • Возможность настроить доступ на уровне отдельных программ/сайтов.
  • OpenVPN, Tor, SSH довольно просто определяются китайским фаерволлом. Shadowsocks - нет. Даже если вашему провайдеру захочется троттлить соединение к прокси, есть возможность прикрутить обфускацию соединения. Плагин маскирует прокси-трафик под HTTPS или TLS/SSL.
  • Удобные клиенты для любых устройств. Можете забыть о ненадежных впн мобильных устройств, скачиваете клиент и подключаетесь к собственному серверу. Батарею жрет не сильно, хотя это зависит от способа шифрования. Если использовать AES, то летает почти на любых смартфонах, даже довольно старых из-за аппаратной поддержки шифрования.

Для каких задач он пригодится?​

  • Защита данных при использовании сетей, который не внушают доверия. Например, публичный wi-fi.
  • Обход любых блокировок, фаерволлов провайдера. Достаточно арендовать сервер, который находится в стране, где нет блокировок.
  • Для защиты от перехвата трафика. Но это скорее инструмент приватности, нежели анонимности. Если будете делать что-то незаконное через сервер, хостер сольет данные о вас по первому запросу. Чтобы этого избежать, можно купить сервер в стране третьего мира, где хостеру глубоко пофиг на запросы информации. Но в любом случае есть риск. Тем не менее, он сильно ниже, чем при работе с обычными VPN типа Nord, ведь они тоже сливают данные по первому запросу.

Перейдем к установке сервера​

  • Я буду показывать на примере сервера за 99р/месяц от российского хостера с сервером в Нидерландах. Операционная система - ubuntu 20.04. Характеристики - 1 гб озу, 1 ядро e5-2630L v2 и kvm виртуализация. Заявленная сеть 200мбит.
  • Покупаем сервер. Выбираем операционную систему.
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Ff427e3aae9934e4d09beb.png&hash=8a503c70b448689c454a0f210e0280a7
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Ff427e3aae9934e4d09beb.png&hash=8a503c70b448689c454a0f210e0280a7
  • Вам придет IP с паролем. Подключаемся через ssh по putty к этому IP. Порт оставляем стандартным - 22.
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F908f0284403c97ce67fe9.png&hash=a9949dcbbcb477255cbed3d292c6bc79
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F908f0284403c97ce67fe9.png&hash=a9949dcbbcb477255cbed3d292c6bc79
  • Логинимся. По стандарту через root`а, если нет - хостер указал название учетки в панели управления/письме, которое прислал на почту. Пароль должен быть там же (то, что пароль не показывается когда вы его вводите - нормально).
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fe89366eab3cf8275ab14c.png&hash=237d1d5f17a504f62356361e4c42a2f5
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fe89366eab3cf8275ab14c.png&hash=237d1d5f17a504f62356361e4c42a2f5
  • Выполняем следующую команду для обновления репозитрия linux-софта (вставить команду из буфера обмена можно нажав ПКМ в putty).
Код:
sudo apt update && apt upgrade -y
  • Это займет некоторое время. Прогресс можно наблюдать слева снизу.
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fecd6bd509c7e9765f2f0b.png&hash=aa0d8bb56dad502b439b23080b4da5e5
  • Далее ставим snapd. На гитхабе shadowsocks-libev сказано, что рекомендовано устанавливать сам сервер через snap.
Код:
sudo apt install -y snapd
  • Теперь ребутим сервер:
Код:
sudo reboot
  • После этого ставим сам сервер shadowsocks. Мы будем использовать версию, написанную на C. Она очень быстра и мало весит. Вводим:
Код:
sudo snap install shadowsocks-libev
  • Создаем директорию в которой будут хранится файлы конфигурации:
Код:
sudo mkdir -p /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev
  • После этого создаем и заходим в файл конфигурации сервера:
JSON:
sudo touch /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json
sudo nano /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json
  • Приводим его к такому виду:
JSON:
{

    "server":"server_ip",

    "server_port":random_port,

    "local_port":1080,

    "password":"pass",

    "timeout":20,

    "method":"chacha20-ietf-poly1305",

    "fast_open":true,

    "nameserver":"1.1.1.1",

    "mode":"tcp_and_udp"

}

proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fc7b835777f639b207794b.png&hash=7975e836340e93badc2f67faf6a1008d
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fc7b835777f639b207794b.png&hash=7975e836340e93badc2f67faf6a1008d
IP в поле server - публичный ip сервера (тот, по которому вы к нему подключаетесь). Можно прослушивать все сетевые интерфейсы, используя ip 0.0.0.0
Server_port - это порт сервера. Я использую 443, хотя это может быть любой свободный порт. Если вы не используете порты 80/443 для хостинга сайта на этом же сервере, их можно использовать.
local_port оставляем стандартный.
password вводим посложнее. В любом случае вводить его много раз не придется, только 1 раз в клиенте с компьютера. Телефон можно подключить через QR-код.
timeout это время до отключения сокета в секундах, если соединение не используется. Со значением в 20 секунд все будет хорошо.
Method - метод шифрования. Chacha20 достаточно надежный, чтобы никто не расшифровал ваш трафик. Для более быстрой работы, если есть аппаратное ускорение AES`a, или аккумулятор на телефоне быстро садится, можно использовать его. В таком случае, вместо chacha20-ietf-poly1305 введите aes-256-gcm. Оба алгоритма шифрования очень мощные.
fast_open снижает латентность, то есть пинг. В случае проблем, стоит попробовать отключить его.
nameserver - какой днс сервер будет использовать shadowsocks. Можно не задавать эту строку, тогда сервер будет использовать днс, который использует ваш хостер. Я же задам DNS от CloudFlare, а именно, 1.1.1.1
mode - использование tcp/udp трафика или обоих. Если в вашей сети есть специфические требования, возможно, потребуется установить tcp_only. В остальных случаях используйте tcp_and_udp.
  • После того, как прописали файл конфигурации, жмем CTRL+O, после чего Enter. Выходим из файла конфигурации на CTRL+X.
  • Теперь у нас есть сконфигурированный сервер. Но ведь неудобно после любой перезагрузки запускать его самому? Создадим сервис, который сделает это за нас:
Код:
sudo touch /etc/systemd/system/[email protected]

sudo nano /etc/systemd/system/[email protected]
  • Вставляем это:
Код:
[Unit]

Description=Shadowsocks-Libev Custom Server Service for %I

Documentation=man:ss-server(1)

After=network-online.target

[Service]

Type=simple

ExecStart=/usr/bin/snap run shadowsocks-libev.ss-server -c /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/%i.json

[Install]

WantedBy=multi-user.target

proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Ff8304630e7aa392854c0c.png&hash=32753c435e8fee1475a79364b9a31c12
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Ff8304630e7aa392854c0c.png&hash=32753c435e8fee1475a79364b9a31c12
  • Выходим, сохранив все это через ctrl+o.
  • Выполняем следующую команду:
Код:
sudo systemctl enable --now [email protected]
  • Проверяем, запустился ли наш сервер:
Код:
sudo systemctl status [email protected]

proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F5f9882cc12cf8165330ea.png&hash=f019342cb84665231653736dada9ced6
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F5f9882cc12cf8165330ea.png&hash=f019342cb84665231653736dada9ced6
  • Успех!
Иногда после ребутов сервер запускается с ошибкой, и нужно вручную выполнить эту команду опять:
После этого сервер запускается нормально.

Настраиваем клиент​

  • Скачиваем его под нужное устройство с официального сайта: Shadowsocks - Clients
  • Добавляем сервер, указываем данные, которые вписывали в config.json. Выбираем одно и то же шифрование.
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fcebcde2ee5ff3467f8079.png&hash=9a9283d63919e5389c96962b0d3f6a16
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fcebcde2ee5ff3467f8079.png&hash=9a9283d63919e5389c96962b0d3f6a16
  • Теперь тыкаем по значку shadowsocks, ставим галочку автозагрузка и выбираем системный прокси сервер - для всей системы. Проверяем IP на удобном для вас сайте. Чтобы подключится с телефона, скачиваем на него shadowsocks. С компьютера заходим в серверы - поделится конфигурацией сервера. Сканируем qr-код.
  • 2ip.ru и duckduckgo определяют разные местоположения, что странно, но с IP все в порядке - мы выходим в интернет не со своим IP, а с IP нашего хоста.
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F4a88f07d6bbd72ab19199.png&hash=48431b96699f61a9ee98f828758d52ff
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F4a88f07d6bbd72ab19199.png&hash=48431b96699f61a9ee98f828758d52ff
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fc777f8bc9fbf1e257338a.png&hash=2b276fc8e99306d6510d6a9abdca1e50
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fc777f8bc9fbf1e257338a.png&hash=2b276fc8e99306d6510d6a9abdca1e50

  • Теперь для максимальной производительности немного подредактируем настройки ядра.
Код:
sudo nano /etc/sysctl.conf

  • В конце файла вставляем это:
Код:
fs.file-max = 51200

net.core.netdev_max_backlog = 250000

net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 0

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.ip_local_port_range = 10000 65000

net.core.netdev_max_backlog = 4096

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_max_tw_buckets = 5000

net.ipv4.tcp_fastopen = 3

net.ipv4.tcp_mtu_probing = 1

net.core.rmem_max = 67108864

net.core.wmem_max = 67108864

net.ipv4.tcp_mem = 25600 51200 102400

net.ipv4.tcp_rmem = 4096 87380 67108864

net.ipv4.tcp_wmem = 4096 65536 67108864
  • Сохраняем. Применяем новые настройки:
Код:
sudo sysctl -p

Готово!
Скорость без прокси.
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fc079ac1d5533ae5df10c2.png&hash=d23ee15876b070ab53a6252f04e7a60c
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fc079ac1d5533ae5df10c2.png&hash=d23ee15876b070ab53a6252f04e7a60c
Используя shadowsocks (2 теста в разное время суток).
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fa78dd0d05cef11c4889f5.png&hash=238242ae522c938913fa343bc4a89fa1
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2Fa78dd0d05cef11c4889f5.png&hash=238242ae522c938913fa343bc4a89fa1
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F3f326a9ae97da0db29470.png&hash=4f79340468bb06db5060d7a214de005d
proxy.php?image=https%3A%2F%2Ftelegra.ph%2Ffile%2F3f326a9ae97da0db29470.png&hash=4f79340468bb06db5060d7a214de005d

Падение не столь значительное. upload почему-то просел, но все равно пользоваться интернетом вполне комфортно.

На этом все! Пользуйтесь на здоровье!​