Shadowsocks — це легкий зашифрований проксі-протокол на основі SOCKS5, спочатку розроблений для обходу формування та блокування трафіку у звичайних мережах. На відміну від повноцінного VPN, він проксіює лише той трафік, який програма явно надсилає йому, майже не має протокольних накладних витрат і добре працює навіть на обмежених з'єднаннях. Він не намагається імітувати справжнє рукостискання TLS, як це робить VLESS+Reality — його перевагою є простота, широка підтримка клієнтів (маршрутизатори, телефони, браузери) та дуже низька затримка, але ціною дещо легшої ідентифікації за шаблоном трафіку в ретельно перевіреній мережі.
Існує дві активно підтримувані реалізації сервера:
- shadowsocks-rust — сучасна еталонна реалізація від організації shadowsocks, написана на Rust. Вона підтримує новіше сімейство шифрів AEAD-2022, активно розробляється та є реалізацією, яку детально встановлює та налаштовує цей посібник.
- shadowsocks-libev — стара реалізація на C. Вона досі підтримується для виправлення помилок, постачається як готовий пакет apt з власними юнітами systemd і є гарним вибором, якщо вам потрібна найпростіша інсталяція без ручної обробки бінарних файлів. У цьому посібнику її розглядають як альтернативний шлях інсталяції в розділі 3.
У цьому посібнику описано, як налаштувати сервер вручну через командний рядок, без використання веб-панелі чи Docker. Щоразу, коли з’являється поле «IP-адреса», замініть його фактичною IP-адресою вашого VPS.
Що вам знадобиться: VPS з Ubuntu 22.04/24.04 або Debian 11/12, root-доступ, IP-адреса вашого VPS та вільний порт UDP/TCP (у цьому посібнику використовується порт 8388, порт Shadowsocks за замовчуванням).
Ще немає сервера? Дивіться, як замовити сервер та оплатити його.
Спочатку порівнюєте це з іншими варіантами самостійного розміщення? Дивіться Посібник з Xray VLESS Reality Guide для альтернативи на основі камуфляжу TLS, Посібник з розгортання сервера AmneziaWG для варіанта на основі WireGuard або налаштування Hysteria2 та TUIC для двох інших сучасних проксі-протоколів.
Підключення до сервера
Windows (PuTTY)
Відкрийте PuTTY, введіть IP-адресу вашого VPS у поле «Ім’я хоста», встановіть порт на 22 та увійдіть як root, використовуючи пароль, який вам надіслав електронною поштою ваш VPS-провайдер.
IP-адреса сервера: ваша IP-адреса
увійти як: root
Пароль: ваш пароль
Детальний покроковий огляд підключення через PuTTY/SSH див. у статті Як підключитися до сервера Linux через SSH.
Linux / macOS (термінал)
ssh root@your_IP_address
Усі команди нижче виконуються на сервері, в тому ж SSH-сеансі — це охоплює розділи з 2 по 7, а також перевірки на стороні сервера в розділі 13. Розділи 8–12 (встановлення та налаштування клієнтських програм) виконуються на вашому власному пристрої Windows/macOS/Linux/Android/iOS, оскільки саме на цьому пристрої має працювати проксі-сервер; у кожному з цих розділів чітко зазначено, які рядки, якщо такі є, все ще стосуються сервера.
Підготовка сервера
Оновити систему
Перш ніж встановлювати щось, оновіть список пакетів та оновіть встановлені пакети:
apt update -y && apt upgrade -y
Якщо це оновлює ядро, перед продовженням варто перезавантажити комп'ютер. (Щоб ознайомитися з apt та тим, як працюють менеджери пакетів Linux, див. розділ Менеджери пакетів Linux .) Зверніться до:
cat /var/run/reboot-required
Якщо файл існує, спочатку перезавантажте комп'ютер за допомогою команди «reboot», зачекайте ~30 секунд, а потім підключіться знову.
Встановіть інструменти, які використовуються в цьому посібнику
apt install -y curl wget tar xz-utils ufw qrencode
Для отримання та розпакування архіву випуску shadowsocks-rust потрібні curl/wget та tar/xz-utils; ufw – це брандмауер, налаштований нижче; qrencode перетворює готове посилання клієнта на сканований QR-код у розділі 7.
Налаштування брандмауера (UFW)
Щоб дізнатися більше про правила UFW, див. статтю Налаштування брандмауера в Linux.
Відкрийте два потрібні вам порти: 22/tcp для SSH (пропустіть це правило, і ви ризикуєте втратити доступ до сервера) та 8388, як tcp, так і udp — Shadowsocks проксіює як TCP-з’єднання, так і UDP-асоціації (корисно для DNS та деяких ігор/додатків), тому обидва напрямки порту мають бути відкриті.
ufw allow 22/tcp
ufw allow 8388/tcp
ufw allow 8388/udp
ufw --force enable
ufw status
Усі три правила повинні відображатися як ALLOW у виведеному стані ufw. Якщо пізніше ви зміните порт у config.json, оновіть ці правила відповідно.
Встановлення серверного програмного забезпечення
Виберіть один із двох варіантів нижче. Рекомендовано варіант A (shadowsocks-rust): це активно розроблювана реалізація, яка підтримує сучасні шифри AEAD-2022, що використовуються далі в цьому посібнику. Варіант B (shadowsocks-libev) – гарний вибір, якщо ви бажаєте використовувати простий пакет apt із готовим модулем systemd і вам не потрібен AEAD-2022.
Варіант A — shadowsocks-rust (рекомендовано)
Shadowsocks-rust не постачає пакет apt із поточними релізами, тому його встановлюють шляхом завантаження попередньо зібраного статичного бінарного файлу з релізів проєкту на GitHub. Отримайте останній тег релізу з API GitHub та завантажте відповідний архів Linux x86_64:
SS_VER=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest | grep -Po '"tag_name": "\K[^"]*')
echo "Latest version: $SS_VER"
cd /root
wget "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${SS_VER}/shadowsocks-${SS_VER}.x86_64-unknown-linux-gnu.tar.xz"
Якщо ваш VPS працює на платформі arm64, а не x86_64 (перевірте за допомогою `uname -m`), замініть x86_64-unknown-linux-gnu на aarch64-unknown-linux-gnu у назві файлу вище.
Розпакуйте архів та встановіть бінарні файли на всю систему:
tar -xf shadowsocks-*.tar.xz
install -m 755 ssserver ssservice ssmanager ssurl /usr/local/bin/
rm -f shadowsocks-*.tar.xz ssserver ssservice ssmanager ssurl sslocal 2>/dev/null
Перевірте наявність бінарного файлу та встановлену версію:
ssserver --version
Створіть каталог, в якому зберігатиметься файл конфігурації:
mkdir -p /etc/shadowsocks-rust
У цьому посібнику встановлюється фіксована версія, а не створюються скрипти інсталятора в bash. Щоб оновити систему пізніше, повторно виконайте дві команди вище з новим пошуком SS_VER, зупиніть службу, замініть двійковий файл і перезапустіть її (Розділ 6).
Варіант B — shadowsocks-libev (альтернативний пакет apt)
Shadowsocks-libev включено до репозиторію universe Ubuntu (Ubuntu 16.10+) та основного репозиторію Debian (Debian 8+), тому сторонній PPA не потрібен у версіях 22.04/24.04 або Debian 11/12:
apt install -y shadowsocks-libev
Якщо apt повідомляє, що пакет не знайдено, репозиторій всесвіту вимкнено; увімкніть його та повторіть спробу:
add-apt-repository universe && apt update && apt install -y shadowsocks-libev
Пакет встановлює власні модуль systemd (shadowsocks-libev.service для конфігурації за замовчуванням, плюс [email protected] для іменованих конфігурацій для кожного екземпляра) та автоматично створює /etc/shadowsocks-libev/config.json — у розділах 4–6 зазначено команди та шляхи до файлів, специфічні для libev, поряд з командами rust. Решта розділів клієнта цього посібника (7–13) застосовуються ідентично до будь-якої реалізації сервера, оскільки обидві використовують один і той самий протокол Shadowsocks/SIP002 на мережі.
Генерація пароля та вибір шифру
Автентифікація Shadowsocks — це єдиний спільний пароль плюс шифр (метод шифрування), про який повинні узгодити обидві сторони — немає окремого UUID, пари ключів чи сертифіката для керування.
Сімейства шифрів
- AEAD-2022 (рекомендовано, лише shadowsocks-rust): 2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm, 2022-blake3-chacha20-poly1305. Новіший дизайн (SIP022) з посиленим захистом від повторного відтворення та підтримкою кількох користувачів, які спільно використовують один порт. Пароль має бути рядком base64, що точно дорівнює довжині ключа шифру (16 байт для 128-бітних варіантів, 32 байти для 256-бітного варіанту).
- Класичний AEAD (підтримується як rust, так і libev): aes-256-gcm, aes-128-gcm, chacha20-ietf-poly1305. Широко сумісний зі старими клієнтами та з shadowsocks-libev; пароль може бути будь-якою парольною фразою, оскільки вона передається через функцію виведення ключа, а не використовується безпосередньо як ключовий матеріал.
У цьому посібнику для сервера shadowsocks-rust використовується 2022-blake3-aes-256-gcm, оскільки це найпотужніший та найновіший варіант, і кожен клієнт, рекомендований пізніше (v2rayN, v2rayNG, Shadowrocket, Streisand, ShadowsocksX-NG), підтримує його. Якщо ви встановили shadowsocks-libev у Розділі 3, використовуйте замість нього chacha20-ietf-poly1305 або aes-256-gcm, оскільки libev не реалізує AEAD-2022.
Згенерувати ключ (shadowsocks-rust)
ssservice genkey -m "2022-blake3-aes-256-gcm"
Це виведе рядок base64 — це ваш пароль. Скопіюйте його в безпечне місце; ви вставите його як у конфігурацію сервера в розділі 5, так і в посилання клієнта в розділі 7.
Виберіть парольну фразу (shadowsocks-libev)
Для класичних шифрів AEAD, що використовуються shadowsocks-libev, працює будь-який достатньо довгий випадковий рядок, оскільки він проходить через PBKDF/HKDF, а не використовується як необроблений ключ. Згенеруйте його за допомогою:
openssl rand -base64 32
Написання конфігурації сервера
Тіньові шкарпетки-іржа
Відкрийте файл конфігурації для редагування:
nano /etc/shadowsocks-rust/config.json
Вставте шаблон нижче, підставивши свій власний пароль з розділу 4 (і порт з розділу 2, якщо ви змінили його з 8388):
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "YOUR-GENERATED-KEY-HERE",
"method": "2022-blake3-aes-256-gcm",
"mode": "tcp_and_udp",
"timeout": 300,
"nofile": 51200
}
Натисніть Ctrl+O (WriteOut), щоб зберегти файл, Enter, щоб підтвердити ім'я файлу, а потім Ctrl+X, щоб вийти з nano.
Важливі поля: server прослуховує всі інтерфейси (0.0.0.0); server_port – це порт, відкритий у розділі 2; password/method – це облікові дані та шифр з розділу 4; mode дозволяє ретрансляцію як TCP, так і UDP; timeout – це час очікування простою з'єднання в секундах; nofile збільшує ліміт файлових дескрипторів для зайнятих серверів.
Перевірте JSON та чи приймає його бінарний файл, перш ніж підключати його до systemd:
ssserver -c /etc/shadowsocks-rust/config.json --help >/dev/null && echo "binary OK"
python3 -m json.tool /etc/shadowsocks-rust/config.json >/dev/null && echo "JSON OK"
Створіть модуль systemd (shadowsocks-rust)
Бінарний реліз не містить модуля systemd, тому створіть його:
nano /etc/systemd/system/ssserver.service
[Unit]
Description=Shadowsocks-Rust Server
Documentation=https://github.com/shadowsocks/shadowsocks-rust
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks-rust/config.json
Restart=on-failure
RestartSec=5s
LimitNOFILE=51200
User=root
[Install]
WantedBy=multi-user.target
Збережіть та вийдіть, як описано вище, а потім накажіть systemd отримати новий файл модуля:
systemctl daemon-reload
Shadowsocks-libev
Пакет apt вже створив файл /etc/shadowsocks-libev/config.json зі стандартною конфігурацією (лише для зворотного зв'язку, випадковий пароль) та власним модуль systemd. Відкрийте його для редагування:
nano /etc/shadowsocks-libev/config.json
Замініть вміст на:
{
"server":"0.0.0.0",
"server_port":8388,
"password":"YOUR-PASSPHRASE-HERE",
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"timeout":300
}
Конфігурація за замовчуванням використовує server: ["::1", "127.0.0.1"] (лише для зворотного зв'язку); зміна його на "0.0.0.0" робить сервер доступним з публічної IP-адреси — не пропускайте це, якщо ви скопіювали стоковий файл замість шаблону вище.
Запуск служби та ввімкнення автозапуску
Тіньові шкарпетки-іржа
systemctl enable --now ssserver
systemctl status ssserver --no-pager
Статус має показувати активний (виконується). Переконайтеся, що щось дійсно прослуховує порт (обидва протоколи):
ss -lntp | grep ':8388'
ss -lunp | grep ':8388'
Якщо служба не запускається, найшвидший спосіб дізнатися причину – це переглянути журнал systemd (загальну інформацію про читання журналів Linux див. у статті Як читати журнали Linux і де їх знайти ):
journalctl -u ssserver -n 50 --no-pager
Shadowsocks-libev
systemctl restart shadowsocks-libev
systemctl enable shadowsocks-libev
systemctl status shadowsocks-libev --no-pager
Перевірте порт і логи так само, як і для shadowsocks-rust, підставляючи назву служби:
ss -lntp | grep ':8388'
ss -lunp | grep ':8388'
journalctl -u shadowsocks-libev -n 50 --no-pager
Побудова каналу з’єднання клієнта
Клієнти Shadowsocks імпортують одне посилання для спільного доступу ss:// (формат URL-адреси SIP002), а не конфігураційний файл. Посилання кодує шифр і пароль як base64 у частині userinfo URL-адреси:
ss://base64(method:password)@your_IP_address:port#label
Зберіть частину base64 на сервері (це дозволить уникнути будь-яких друкарських помилок, пов'язаних з ручним кодуванням):
METHOD="2022-blake3-aes-256-gcm"
PASSWORD="YOUR-GENERATED-KEY-HERE"
USERINFO=$(echo -n "${METHOD}:${PASSWORD}" | base64 -w0)
echo "ss://${USERINFO}@your_IP_address:8388#My-SS-Server"
Приклад виводу (з ключем-заповнювачем):
ss://MjAyMi1ibGFrZTMtYWVzLTI1Ni1nY206eHl6X2V4YW1wbGVfa2V5X2hlcmU=@your_IP_address:8388#My-SS-Server
Текст після # — це просто мітка відображення, яку ви можете вільно перейменувати в будь-якому клієнті. Для сервера shadowsocks-libev замініть METHOD="chacha20-ietf-poly1305" (або aes-256-gcm) та його парольну фразу з розділу 4.
Перетворіть його на QR-код, щоб мобільні клієнти могли сканувати його безпосередньо:
qrencode -o ~/ss-client.png "ss://${USERINFO}@your_IP_address:8388#My-SS-Server"
Скопіюйте PNG-файл на свій комп'ютер за допомогою scp, запустіть його з терміналу комп'ютера (або PowerShell у Windows), а не з сервера:
scp root@your_IP_address:~/ss-client.png .
Підключення з Windows
Усе, що описано в цьому розділі, відбувається на вашому ПК з Windows, а не через SSH — клієнт має працювати на пристрої, який фактично використовуватиме проксі-сервер.
Встановлення v2rayN
Візьміть 64-розрядний ZIP-архів Windows (автономна збірка не потребує окремого середовища виконання .NET, як у останніх версіях v2rayN), розпакуйте його будь-де та запустіть v2rayN.exe.
Імпорт сервера
Скопіюйте посилання ss://, створене в розділі 7, у буфер обміну (або скопіюйте QR-код у форматі PNG за допомогою scp та відкрийте його), потім у v2rayN виберіть Сервери → Імпортувати URL-адреси з буфера обміну (або проскануйте QR-код за допомогою вбудованого сканера). Новий профіль сервера з’явиться у списку з міткою, яку ви встановили після символу #.
Клацніть правою кнопкою миші на профілі та виберіть його як активний, потім увімкніть системний проксі-сервер (або режим TUN для маршрутизації всієї машини) на панелі інструментів головного вікна.
Підключення з macOS
Усе, що описано в цьому розділі, відбувається на вашому Mac, а не через SSH.
Встановлення ShadowsocksX-NG
ShadowsocksX-NG — це давно існуючий клієнт Shadowsocks з графічним інтерфейсом для macOS; поточна лінійка релізів містить як рідну збірку Apple Silicon, так і Intel. Завантажте найновіший файл .dmg зі сторінки релізів.
Відкрийте файл .dmg та перетягніть ShadowsocksX-NG до розділу «Програми», а потім запустіть його — він з’явиться як значок у рядку меню.
Імпорт сервера
Скопіюйте посилання ss:// з розділу 7 у буфер обміну, потім натисніть значок меню → Сервери → Параметри сервера → + внизу ліворуч і виберіть «Імпортувати з монтажного столу» (або відскануйте QR-код за допомогою «Сканувати QR-код з екрана» після відкриття PNG). Виберіть новий профіль у спадному меню, потім перемкніть «Shadowsocks: Увімкнено» та виберіть режим маршрутизації «PAC Auto» або «Глобальний» у тому ж меню.
Підключення з робочого столу Linux
Усе, що описано в цьому розділі, відбувається на вашій власній машині з Linux, а не на VPS.
Встановіть локальний клієнт
Якщо ви встановили shadowsocks-rust на сервер у Розділі 3, той самий архів випуску містить sslocal, локальний проксі-клієнт SOCKS5/HTTP. Завантажте та встановіть його так само, як і бінарний файл сервера (налаштуйте суфікс OS/arch для вашого робочого столу, якщо це не x86_64-unknown-linux-gnu):
SS_VER=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest | grep -Po '"tag_name": "\K[^"]*')
wget "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${SS_VER}/shadowsocks-${SS_VER}.x86_64-unknown-linux-gnu.tar.xz"
tar -xf shadowsocks-*.tar.xz
sudo install -m 755 sslocal /usr/local/bin/
Налаштувати та запустити
Створіть невеликий локальний конфігураційний файл, який прослуховуватиме 127.0.0.1:1080 як SOCKS5-проксі:
mkdir -p ~/.config/shadowsocks-rust
cat > ~/.config/shadowsocks-rust/local.json << 'EOF'
{
"server": "your_IP_address",
"server_port": 8388,
"password": "YOUR-GENERATED-KEY-HERE",
"method": "2022-blake3-aes-256-gcm",
"local_address": "127.0.0.1",
"local_port": 1080,
"mode": "tcp_and_udp"
}
EOF
sslocal -c ~/.config/shadowsocks-rust/local.json
Вкажіть у налаштуваннях браузера або мережевих систем проксі-сервер SOCKS5 за адресою 127.0.0.1:1080. Для графічного інтерфейсу, форки Nekoray або ShadowsocksX-Qt5 можуть імпортувати те саме посилання ss:// з розділу 7 та керувати sslocal замість того, щоб запускати його вручну.
Підключення з Android
Все тут відбувається на вашому пристрої Android, а не через SSH.
Встановлення клієнта
Два хороших варіанти:
- Shadowsocks для Android — офіційний клієнт від організації shadowsocks. Встановіть його з Google Play (пошук за запитом «Shadowsocks») або завантажте APK безпосередньо зі сторінки релізів проєкту, якщо Play недоступний у вашій локації. область.
- v2rayNG — Android-аналог v2rayN, що підтримує Shadowsocks разом із VLESS/VMess/Trojan; корисно, якщо вам потрібен один додаток для кількох протоколів. типи.
Імпорт сервера
В будь-якому з додатків: натисніть кнопку +, виберіть «Імпортувати з буфера обміну» після копіювання посилання ss:// з розділу 7 або «Відсканувати QR-код» і наведіть камеру на PNG. Натисніть на імпортований профіль, щоб вибрати його, а потім натисніть кнопку підключення. Android вперше запитає дозвіл VPN — схваліть його для встановлення тунелю.
Підключення з iOS
Все тут відбувається на вашому iPhone або iPad, не через SSH.
Встановлення клієнта з підтримкою Shadowsocks
Shadowrocket — найпоширеніший клієнт для iOS з підтримкою Shadowsocks; це платний додаток, доступний у більшості магазинів. Знайдіть його в App Store або відкрийте.
Streisand — це безкоштовна альтернатива з відкритим кодом, яка також підтримує Shadowsocks разом із VLESS, Trojan та іншими протоколами.
Каталоги App Store відрізняються залежно від магазину/регіону та можуть змінюватися з часом; якщо жодного з них немає у вашому, знайдіть в App Store «Shadowsocks» або «V2Box».
Імпорт сервера
Скопіюйте посилання ss:// у буфер обміну, відкрийте клієнт та скористайтеся опцією «Додати/Імпортувати з буфера обміну» або проскануйте QR-код із розділу 7 за допомогою вбудованого сканера клієнта. Увімкніть новий профіль; iOS вперше запитуватиме дозвіл на налаштування VPN, який вам потрібно буде підтвердити за допомогою Face ID, Touch ID або вашого пароля.
Перевірка підключення
Коли тунель активовано з розділу 8, 9, 10, 11 або 12, поверніться на свій пристрій (не до SSH-сеансу) та відкрийте будь-яку перевірку «яка моя IP-адреса» у браузері — відображена адреса має збігатися з IP-адресою вашого VPS, your_IP_address.
Щоб перевірити з боку сервера, перевірте журнал systemd на наявність активності з'єднань та підтвердьте встановлені сесії на порту (використовуйте ssserver для журналу rust або shadowsocks-libev для журналу libev):
journalctl -u ssserver -n 50 --no-pager
ss -tnp | grep ':8388'
Посилання:
|
Поле |
значення |
|
Адреса |
публічна IP-адреса вашого VPS |
|
порт |
8388 (той самий порт, що відкрився в Розділі 2) |
|
Пароль |
ключ/парольна фраза, згенерована в розділі 4 |
|
Метод |
2022-blake3-aes-256-gcm (rust) або chacha20-ietf-poly1305 (libev) — мають точно збігатися з обох сторін |
|
режим |
tcp_and_udp — дозволяє проксування через TCP та ретрансляцію UDP (DNS, деякі ігри) |
|
Підключати |
у цьому посібнику не використовується — для роботи Shadowsocks не потрібен SNI, сертифікат чи транспортний плагін |
Висновок
Дотримання цього посібника залишає ваш VPS з власним сервером Shadowsocks — або shadowsocks-rust із сучасним шифром AEAD-2022, або shadowsocks-libev з власного репозиторію Ubuntu/Debian — як службу systemd, яка переживає перезавантаження без будь-яких дій з вашого боку.
Додавання більшої кількості користувачів:
- Найпростіше: згенеруйте другий пароль (розділ 4) та запустіть другий екземпляр ssserver/shadowsocks-libev на іншому порту з власним конфігураційним файлом та systemd-юнітом, а потім повторіть розділи 5–7 для цього порту.
- shadowsocks-rust із шифром AEAD-2022 також підтримує спільне використання кількох користувачів одним портом та ключем виведення пароля через масив "users" у config.json (Extensible Identity Headers, SIP022) — див. розділ "Конфігурація" README shadowsocks-rust для отримання точного синтаксису, якщо вам потрібен облік трафіку для кожного користувача на одному порту.
Кілька звичок, яких варто дотримуватися після запуску сервера:
- Регулярно оновлюйте сервер. Для shadowsocks-rust періодично повторюйте кроки завантаження та встановлення з розділу 3, шукаючи нову версію, а потім systemctl restart ssserver. Для shadowsocks-libev достатньо простої команди apt upgrade.
- Зробіть резервну копію config.json у окремому місці поза сервером. Вона містить пароль кожного клієнта; його втрата означає повторне створення облікових даних для кожного пристрою.
- Змініть пароль, якщо пристрій втрачено або клієнт скомпрометовано: згенеруйте новий (Розділ 4), оновіть config.json, перезапустіть службу та перебудуйте посилання клієнта (Розділ 7) для кожного пристрою, що залишився.
Якщо з'єднання не встановлюється, перевірте по порядку:
- стан служби (systemctl status ssserver --no-pager або shadowsocks-libev) та журнал (journalctl -u ssserver -n 50 --no-pager)
- правила брандмауера (статус ufw — порт має бути відкритий як для tcp, так і для udp)
- що порт ще не прив'язаний до іншої служби (ss -lntp | grep ':8388' має показувати лише ssserver/ss-server)
- що пароль, метод і порт у клієнті точно відповідають config.json — один невідповідний символ непомітно призводить до невдалого завершення рукостискання, зазвичай це відображається як тайм-аут з'єднання, а не як явна помилка.
- Цей режим на сервері встановлено на tcp_and_udp, якщо клієнту потрібен UDP (DNS-over-proxy, деякі ігри/додатки), а не лише tcp_only.
Порівнюєте Shadowsocks з іншими варіантами? Див. Посібник з Xray VLESS Reality Guide для протоколу на основі камуфляжу TLS, який важче ідентифікувати в мережі з високою фільтрацією, Посібник з розгортання сервера AmneziaWG та Як налаштувати Wireguard VPN на вашому сервері для альтернатив на основі WireGuard, або налаштування Hysteria2 та TUIC для двох протоколів, створених для мереж з втратами або з високою фільтрацією. Якщо вам потрібен лише простий проксі, а не повноцінне тунелювання, конфігурація 3proxy на CentOS/ArchLinux є набагато легшою альтернативою, а старіша конфігурація VPN-сервера на Linux: PPTP чи OpenVPN? охоплює протоколи, які простіше налаштувати, але набагато легше для DPI виявляти та блокувати. Щодо загального захисту сервера після запуску проксі-сервера, див. Користувачі Linux: керування та дозволи.