How to Wiki Database (change log)
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
299 lines
17 KiB
299 lines
17 KiB
10 months ago
|
====== Shadowsocks ======
|
||
|
|
||
|
**Shadowsocks** — это быстрый туннельный прокси с шифрованием передаваемых данных, а так же обладающий встроенными механизмами защиты от средств анализа сетевых пакетов (DPI), и с помощью плагинов способный маскировать трафик под конкретные протоколы (например, HTTPS или [[wpru>Протокол_установления_сеанса|SIP]]). C помощью shadowsocks возможно как проксирование TCP, так и туннелирование UDP.
|
||
|
|
||
|
Здесь будет описана простая настройка актуальной версии shadowsocks, написанной на [[wpru>Rust_(язык_программирования)|rust]] (на момент публикации статьи версия 1.16.1).
|
||
|
|
||
|
Настроенный shadowsocks можно использовать для проксирования через него других протоколов, включая [[wpru>OpenVPN|OpenVPN]], [[wireguard|Wireguard]], [[yggdrasil:yggdrasil|Yggdrasil]] и других.
|
||
|
|
||
|
===== Сборка / Установка =====
|
||
|
|
||
|
Установить shadowsocks можно несколькими различными способами, включая загрузку [[wpru>Docker|docker-образа]], [[wpru>Snappy_(система_управления_пакетами)|snap-пакета]], установку с помощью cargo (меенджер пакетов rust), используя kubectl для [[wpru>Kubernetes|Kubernetes]], просто загрузку бинарных файлов или сборку их из исходников.
|
||
|
|
||
|
Все эти способы описаны в файле [[https://github.com/shadowsocks/shadowsocks-rust/blob/master/README.md|README.md]].
|
||
|
|
||
|
Готовые бинарные файлы под различные архитектуры можно скачать со страницы: https://github.com/shadowsocks/shadowsocks-rust/releases
|
||
|
|
||
|
==== Сборка из исходников ====
|
||
|
|
||
|
Предполагается наличие установленных [[wpru>Git|git]] и rust.
|
||
|
|
||
|
<code>git clone https://github.com/shadowsocks/shadowsocks-rust</code>
|
||
|
<code>cd shadowsocks-rust</code>
|
||
|
<code>cargo build --release</code>
|
||
|
|
||
|
После выполнения этих команд и завершения сборки проекта, в каталоге ''%%./target/release/%%'' можно будет найти бинарные файлы: ''%%sslocal%%'', ''%%ssserver%%'', ''%%ssmanager%%'', ''%%ssservice%%'' и ''%%ssurl%%''.
|
||
|
|
||
|
//**Примечание:** если вы планируете использовать бинарные файлы на машине, архитектура/ОС которой отличаются от ваших текущих, вам необходимо использовать кросс-компиляцию. Подробнее об этом можно прочесть здесь: https://rust-lang.github.io/rustup/cross-compilation.html //
|
||
|
|
||
|
==== Описание бинарных файлов ====
|
||
|
|
||
|
* sslocal - клиент shadowsocks
|
||
|
* ssserver - сервер shadowsocks
|
||
|
* ssmanager - утилита управления конфигурацией shadowsocks
|
||
|
* ssservice - утилита управления сервисами shadowsocks, генератор ключа шифрования
|
||
|
* ssurl - утилита, предназначенная для кодирования и декодирования адресов для использования с shadowsocks (пример: ''%%ss://YWVzLTI1Ni1jZmI6cGFzc3dvcmQ@127.0.0.1:8388/?plugin=obfs-local%3Bobfs%3Dhttp%3Bobfs-host%3Dwww.baidu.com%%'')
|
||
|
|
||
|
===== Настройка =====
|
||
|
|
||
|
Генерируем ключ, спомощью которого будут шифроваться передаваемые данные:
|
||
|
|
||
|
<code>ssservice genkey -m "aes-128-gcm"</code>
|
||
|
|
||
|
Рекомендуемые значения алгоритмов шифрования перечислены на этой странице: https://shadowsocks.org/doc/aead.html
|
||
|
|
||
|
В результате получим примерно такую строку:
|
||
|
|
||
|
<code>1/AiFEsK70+gObAwU8qQTA==</code>
|
||
|
|
||
|
Этот ключ будет использован в конфигурационных файлах и клиента, и сервера.
|
||
|
|
||
|
Далее создаем файлы ''%%config_l.json%%'' и ''%%config_s.json%%'' для клиента и сервера соответственно.
|
||
|
|
||
|
Эти файлы будут одинаковыми за исключением того, что в файле для клиента будут два параметра, которых нет в файле для сервера.
|
||
|
|
||
|
<file json config_s.json>
|
||
|
{
|
||
|
"server": "my_server_ip",
|
||
|
"server_port": 8388,
|
||
|
"password": "1/AiFEsK70+gObAwU8qQTA==",
|
||
|
"method": "aes-128-gcm"
|
||
|
}
|
||
|
</file>
|
||
|
|
||
|
* server - адрес, на котором будет ожидать подключений ваш сервер
|
||
|
* server_port - порт сервера
|
||
|
* password - ключ шифрования (сгенерирован выше)
|
||
|
* method - метод шифрования
|
||
|
|
||
|
//**Обратите внимание:** метод шифрования, который указывается здесь и в конфигурационном файле для клиента, должен соответствовать тому, что указывался при создании ключа шифрования (см. выше).//
|
||
|
|
||
|
<file json config_l.json>
|
||
|
{
|
||
|
"server": "my_server_ip",
|
||
|
"server_port": 8388,
|
||
|
"password": "1/AiFEsK70+gObAwU8qQTA==",
|
||
|
"method": "aes-128-gcm",
|
||
|
"local_address": "127.0.0.1",
|
||
|
"local_port": 1080
|
||
|
}
|
||
|
</file>
|
||
|
|
||
|
Большинство параметров здесь точно такие же, как для серверной конфигурации.
|
||
|
|
||
|
* local_address - адрес, на котором будет ожидать подключений клиент shadowsocks (адрес локального socks-прокси)
|
||
|
* local_port - локальный порт
|
||
|
|
||
|
===== Использование =====
|
||
|
|
||
|
Если вы устанавливаете и настраиваете всё вручную, необходимо скопировать бинарные файлы в каталог ''%%/usr/bin/%%'', а конфигурационный файл в каталог ''%%/etc/shadowsocks-rust/%%'' на клиенте и на сервере.
|
||
|
|
||
|
Для настройки автозапуска можно использовать шаблоны скриптов и (или) systemd-юнитов из каталога: https://github.com/shadowsocks/shadowsocks-rust/tree/master/debian
|
||
|
|
||
|
Например, это могут быть такие файлы:
|
||
|
|
||
|
<WRAP group>
|
||
|
<WRAP column>
|
||
|
<file shadowsocks-rust-server.service>
|
||
|
[Unit]
|
||
|
Description=Shadowsocks-rust Custom Server Service
|
||
|
Documentation=https://github.com/shadowsocks/shadowsocks-rust
|
||
|
After=network.target
|
||
|
|
||
|
[Service]
|
||
|
Type=simple
|
||
|
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||
|
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||
|
ExecStart=/usr/bin/ssservice server --log-without-time -c /etc/shadowsocks-rust/config_s.json
|
||
|
|
||
|
[Install]
|
||
|
WantedBy=multi-user.target
|
||
|
</file>
|
||
|
</WRAP>
|
||
|
<WRAP column>
|
||
|
<file shadowsocks-rust-local.service>
|
||
|
[Unit]
|
||
|
Description=Shadowsocks-rust Custom Client Service
|
||
|
Documentation=https://github.com/shadowsocks/shadowsocks-rust
|
||
|
After=network.target
|
||
|
|
||
|
[Service]
|
||
|
Type=simple
|
||
|
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||
|
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||
|
ExecStart=/usr/bin/ssservice local --log-without-time -c /etc/shadowsocks-rust/config_l.json
|
||
|
|
||
|
[Install]
|
||
|
WantedBy=multi-user.target
|
||
|
</file>
|
||
|
</WRAP>
|
||
|
</WRAP>
|
||
|
|
||
|
Юниты копируем в /lib/systemd/system/.
|
||
|
|
||
|
Запускаем так (на клиенте):
|
||
|
<code>sudo systemctl enable --now shadowsocks-rust-local</code>
|
||
|
|
||
|
На сервере:
|
||
|
<code>sudo systemctl enable --now shadowsocks-rust-server</code>
|
||
|
|
||
|
<details>
|
||
|
<summary>Автозапуск под Windows</summary>
|
||
|
\\
|
||
|
|
||
|
Управление работой shadowsocks под Windows, как вариант, можно осуществлять с помощью планировщика Windows из командной строки.
|
||
|
|
||
|
Создание задания:
|
||
|
<code>schtasks /create /tn "Shadowsocks" /tr "c:\ssservice.exe local -c c:\config_l.json" /sc onstart</code>
|
||
|
Задание будет выполняться при загрузке системы.
|
||
|
С помощью ключей /U /P (или /RU /RP) можно указать под каким пользователем будет выполняться задание.
|
||
|
|
||
|
Остановка задания:
|
||
|
<code>schtasks /Run /I /TN "Shadowsocks"</code>
|
||
|
|
||
|
Запуск задания вручную:
|
||
|
<code>schtasks /End /TN "Shadowsocks"</code>
|
||
|
|
||
|
Подробнее: https://ab57.ru/cmdlist/schtasks.html
|
||
|
|
||
|
</details> \\
|
||
|
|
||
|
//**Важно:** если в системах работает firewall, не забудьте разрешить соответствующие входящие/исходящие соединения! Пример для сервера: ''%%iptables -A INPUT -p tcp -i eth0 --dport 8388 -j ACCEPT%%''//
|
||
|
|
||
|
После запуска сервисов на сервере и локальной машине можно переходить к непосредственному использованию shadowsocks в целях, для которых это ПО предназначено :)
|
||
|
|
||
|
==== Браузер ====
|
||
|
|
||
|
Для серфинга Интернета в браузере с использования shadowsocks, заходим в настройки браузера и указываем в них наш свеженастроенный локальный прокси-сервер: 127.0.0.1:1080.
|
||
|
|
||
|
<details>
|
||
|
<summary>Пример настройки браузера Mozilla Firefox</summary>
|
||
|
\\
|
||
|
{{shadowsocks:ff_proxy_settings.png?500}}
|
||
|
</details> \\
|
||
|
|
||
|
Браузер будет устанавливать соединение с удаленным web-сервером через локальный прокси-сервер, который, в свою очередь, будет пускать трафик через удаленный сервер, шифруя (и при необходимости маскируя) его.
|
||
|
|
||
|
==== Yggdrasil ====
|
||
|
|
||
|
Для подключения к пирам Yggdrasil через shadowsocks в секцию Peers конфигурационного файла добавляются строки такого вида:
|
||
|
|
||
|
<code>socks://127.0.0.1:1080/public_node_ip:port</code>
|
||
|
Здесь ''%%public_node_ip%%'' - IP-адрес публичного пира, ''%%port%%'' - порт публичного пира, 127.0.0.1:1080 - адрес и порт на которых ожидает подключения клиент shadowsocks.
|
||
|
|
||
|
==== Wireguard ====
|
||
|
|
||
|
Пример подключения [[wireguard|Wireguard]] (работает по UDP) через shadowsocks...
|
||
|
|
||
|
Приводим конфигурационный файл сервера shadowsocks к такому виду:
|
||
|
|
||
|
<code>{
|
||
|
"server": "my_server_ip",
|
||
|
"server_port": 8388,
|
||
|
"password": "1/AiFEsK70+gObAwU8qQTA==",
|
||
|
"method": "aes-128-gcm",
|
||
|
"mode": "tcp_and_udp"
|
||
|
}</code>
|
||
|
|
||
|
Приводим конфигурационный файл клиента shadowsocks к такому виду:
|
||
|
<code>{
|
||
|
"server":"my_server_ip",
|
||
|
"server_port":8388,
|
||
|
"password":"1/AiFEsK70+gObAwU8qQTA==",
|
||
|
"method":"aes-128-gcm",
|
||
|
"mode":"tcp_and_udp",
|
||
|
"locals": [
|
||
|
{
|
||
|
"mode":"udp_only",
|
||
|
"protocol":"tunnel",
|
||
|
"forward_address":"my_server_ip",
|
||
|
"forward_port":51821,
|
||
|
"local_address":"127.0.0.1",
|
||
|
"local_port":51821
|
||
|
},
|
||
|
{
|
||
|
"mode":"tcp_only",
|
||
|
"protocol":"socks",
|
||
|
"local_address": "127.0.0.1",
|
||
|
"local_port": 1080
|
||
|
}
|
||
|
]
|
||
|
}</code>
|
||
|
|
||
|
Новые параметры здесь:
|
||
|
|
||
|
* mode - какие протоколы будут обрабатываться shadowsocks
|
||
|
* locals - в этом массиве можно перечислить несколько конфигураций клиента
|
||
|
* protocol - протокол работы shadowsocks
|
||
|
* local_address - адрес, на который будет перенаправлено соединение в туннельном режиме (адрес сервера wireguard)
|
||
|
* forward_port - port, на который будет перенаправлено соединение в туннельном режиме (порт сервера wireguard)
|
||
|
|
||
|
Далее, в настройках wireguard на клиенте (''%%/etc/wireguard/wg0.conf%%'') нужно поменять адрес пира (''%%Endpoint%%'') на 127.0.0.1:51821. Так же, в секцию ''%%[Interface]%%'' можно добавить параметр ''%%MTU = 1384%%''.
|
||
|
|
||
|
Перезапускаем службы shadowsocks и поднимаем туннель wg:
|
||
|
<code>sudo wg-quick up wg0</code>
|
||
|
|
||
|
Вроде бы, всё поднялось, но сайты не открываются, пинги не идут.
|
||
|
|
||
|
Дело в том, что после поднятия туннеля весь трафик у нас заворачивается в туннель wireguard, включая трафик, который идет к серверу shadowsocks. Образуется петля.
|
||
|
|
||
|
Решается эта проблема довольно просто:
|
||
|
<code>sudo ip route add my_server_ip via my_router_ip</code>
|
||
|
Здесь my_server_ip - это адрес нашего удаленного сервера; my_router_ip - это адрес домашнего роутера.
|
||
|
|
||
|
Таким образом трафик до нашего удаленного сервера мы пускаем в обход туннеля WG, напрямую.
|
||
|
|
||
|
Эту команду можно прописать в конфигурационный файл wg0.conf, в секцию ''%%[Interface]%%'', чтобы не вбивать кадый раз вручную:
|
||
|
|
||
|
<code>
|
||
|
PostUp = ip route add my_server_ip via my_router_ip
|
||
|
PostDown = ip route del my_server_ip
|
||
|
</code>
|
||
|
|
||
|
Перезапускаем и теперь всё работает отлично!
|
||
|
|
||
|
==== Мобильные устройства ====
|
||
|
|
||
|
=== Android ===
|
||
|
|
||
|
== v2rayNG ==
|
||
|
|
||
|
На устройствах с ОС [[wpru>Android|Android]] можно использовать приложение [[https://play.google.com/store/apps/details?id=com.v2ray.ang&hl=en_US|v2rayNG]].
|
||
|
|
||
|
[[wpru>Открытое_программное_обеспечение|Open-source]], репозиторий: https://github.com/2dust/v2rayNG
|
||
|
|
||
|
<details>
|
||
|
<summary>Пример настроек v2rayNG на планшете</summary>
|
||
|
\\
|
||
|
{{shadowsocks:andr_v2rayNG_ss.PNG?600}}
|
||
|
</details>
|
||
|
\\
|
||
|
=== iOS ===
|
||
|
|
||
|
== Potatso ==
|
||
|
|
||
|
Одно из приложений, которое позволяет пустить трафик смартфона через сервер shadowsocks - [[https://apps.apple.com/ru/app/potatso/id1239860606|Potatso]].
|
||
|
|
||
|
Приложение бесплатно, имеет удобный интерфейс и понятные настройки. Поддерживается плагин Simple Obfs (простая [[wpru>Обфускация_(программное_обеспечение)|обфускация]]).
|
||
|
|
||
|
Добавляет в систему профиль VPN.
|
||
|
|
||
|
Подключение можно активировать как из самого приложения, так и из системных настроек в разделе VPN.
|
||
|
|
||
|
<details>
|
||
|
<summary>Пример настроек Potatso на iPhone</summary>
|
||
|
\\
|
||
|
{{shadowsocks:ios_potatso_ss.png?300}}
|
||
|
</details>
|
||
|
|
||
|
===== Дополнительно =====
|
||
|
|
||
|
Заинтересовавшимся темой рекомендую ознакомиться с некоторыми статьями за авторством MiraclePtr с портала habr.com, сохраненными в этом архиве: [[this>_media/shadowsocks:miracleptr_articles.zip|miracleptr_articles.zip]].
|
||
|
<details> <summary>Так же можно ознакомиться с видеоинструкциями на эту тему.</summary> {{shadowsocks:vpn2024.mp4}} </details>
|
||
|
|
||
|
====== Ссылки ======
|
||
|
|
||
|
Сайт shadowsocks (EN): https://shadowsocks.org/ \\
|
||
|
Подробная документация shadowsocks (EN): https://github.com/shadowsocks/shadowsocks/wiki \\
|
||
|
GitHub-репозиторий проекта shadowsocks-rust (EN): https://github.com/shadowsocks/shadowsocks-rust \\
|
||
|
О настройке shadowsocks c плагином V2Ray (RU): https://krasovs.ky/2022/03/19/shadowsocks-and-v2ray-and-cloudflare.html
|