💾 Archived View for betahowto.duckdns.org › shadowsocks captured on 2024-02-05 at 09:35:35. Gemini links have been rewritten to link to archived content

View Raw

More Information

➡️ Next capture (2024-03-21)

-=-=-=-=-=-=-

Shadowsocks

Shadowsocks — это быстрый туннельный прокси с шифрованием передаваемых данных, а так же обладающий встроенными механизмами защиты от средств анализа сетевых пакетов (DPI), и с помощью плагинов способный маскировать трафик под конкретные протоколы (например, HTTPS или SIP ( https://ru.wikipedia.org/wiki/Протокол_установления_сеанса )). C помощью shadowsocks возможно как проксирование TCP, так и туннелирование UDP.

Здесь будет описана простая настройка актуальной версии shadowsocks, написанной на rust ( https://ru.wikipedia.org/wiki/Rust_(язык_программирования) ) (на момент публикации статьи версия 1.16.1).

Настроенный shadowsocks можно использовать для проксирования через него других протоколов, включая OpenVPN ( https://ru.wikipedia.org/wiki/OpenVPN ), Wireguard ( /wireguard ), Yggdrasil ( /yggdrasil:yggdrasil ) и других.

Сборка / Установка

Установить shadowsocks можно несколькими различными способами, включая загрузку docker-образа ( https://ru.wikipedia.org/wiki/Docker ), snap-пакета ( https://ru.wikipedia.org/wiki/Snappy_(система_управления_пакетами) ), установку с помощью cargo (меенджер пакетов rust), используя kubectl для Kubernetes ( https://ru.wikipedia.org/wiki/Kubernetes ), просто загрузку бинарных файлов или сборку их из исходников.

Все эти способы описаны в файле README.md ( https://github.com/shadowsocks/shadowsocks-rust/blob/master/README.md ).

Готовые бинарные файлы под различные архитектуры можно скачать со страницы: https://github.com/shadowsocks/shadowsocks-rust/releases

Сборка из исходников

Предполагается наличие установленных git ( https://ru.wikipedia.org/wiki/Git ) и rust.

git clone https://github.com/shadowsocks/shadowsocks-rust</code>
cd shadowsocks-rust</code>
cargo build --release</code>

После выполнения этих команд и завершения сборки проекта, в каталоге ./target/release/ можно будет найти бинарные файлы: sslocal, ssserver, ssmanager, ssservice и ssurl.

Примечание: если вы планируете использовать бинарные файлы на машине, архитектура/ОС которой отличаются от ваших текущих, вам необходимо использовать кросс-компиляцию. Подробнее об этом можно прочесть здесь: https://rust-lang.github.io/rustup/cross-compilation.html

Описание бинарных файлов

Настройка

Генерируем ключ, спомощью которого будут шифроваться передаваемые данные:

ssservice genkey -m "aes-128-gcm"</code>

Рекомендуемые значения алгоритмов шифрования перечислены на этой странице: https://shadowsocks.org/doc/aead.html

В результате получим примерно такую строку:

1/AiFEsK70+gObAwU8qQTA==</code>

Этот ключ будет использован в конфигурационных файлах и клиента, и сервера.

Далее создаем файлы config_l.json и config_s.json для клиента и сервера соответственно.

Эти файлы будут одинаковыми за исключением того, что в файле для клиента будут два параметра, которых нет в файле для сервера.

json config_s.json


{
    "server": "my_server_ip",
    "server_port": 8388,
    "password": "1/AiFEsK70+gObAwU8qQTA==",
    "method": "aes-128-gcm"
 }

Обратите внимание: метод шифрования, который указывается здесь и в конфигурационном файле для клиента, должен соответствовать тому, что указывался при создании ключа шифрования (см. выше).

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
}

Большинство параметров здесь точно такие же, как для серверной конфигурации.

Использование

Если вы устанавливаете и настраиваете всё вручную, необходимо скопировать бинарные файлы в каталог /usr/bin/, а конфигурационный файл в каталог /etc/shadowsocks-rust/ на клиенте и на сервере.

Для настройки автозапуска можно использовать шаблоны скриптов и (или) systemd-юнитов из каталога: https://github.com/shadowsocks/shadowsocks-rust/tree/master/debian

Например, это могут быть такие файлы:

<WRAP group>

<WRAP column>

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

</WRAP>

<WRAP column>

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

</WRAP>

</WRAP>

Юниты копируем в /lib/systemd/system/.

Запускаем так (на клиенте):

sudo systemctl enable --now shadowsocks-rust-local</code>

На сервере:

sudo systemctl enable --now shadowsocks-rust-server</code>

<details>

<summary>Автозапуск под Windows</summary>

Управление работой shadowsocks под Windows, как вариант, можно осуществлять с помощью планировщика Windows из командной строки.

Создание задания:

schtasks /create /tn "Shadowsocks" /tr "c:\ssservice.exe local -c c:\config_l.json" /sc onstart</code>

Задание будет выполняться при загрузке системы.

С помощью ключей /U /P (или /RU /RP) можно указать под каким пользователем будет выполняться задание.

Остановка задания:

schtasks /Run /I /TN "Shadowsocks"</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 конфигурационного файла добавляются строки такого вида:

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 к такому виду:

{
    "server": "my_server_ip",
    "server_port": 8388,
    "password": "1/AiFEsK70+gObAwU8qQTA==",
    "method": "aes-128-gcm",
    "mode": "tcp_and_udp"
}

Приводим конфигурационный файл клиента shadowsocks к такому виду:

{
    "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
        }
    ]
}

Новые параметры здесь:

Далее, в настройках wireguard на клиенте (/etc/wireguard/wg0.conf) нужно поменять адрес пира (Endpoint) на 127.0.0.1:51821. Так же, в секцию [Interface] можно добавить параметр MTU = 1384.

Перезапускаем службы shadowsocks и поднимаем туннель wg:

sudo wg-quick up wg0</code>

Вроде бы, всё поднялось, но сайты не открываются, пинги не идут.

Дело в том, что после поднятия туннеля весь трафик у нас заворачивается в туннель wireguard, включая трафик, который идет к серверу shadowsocks. Образуется петля.

Решается эта проблема довольно просто:

sudo ip route add my_server_ip via my_router_ip</code>

Здесь my_server_ip - это адрес нашего удаленного сервера; my_router_ip - это адрес домашнего роутера.

Таким образом трафик до нашего удаленного сервера мы пускаем в обход туннеля WG, напрямую.

Эту команду можно прописать в конфигурационный файл wg0.conf, в секцию [Interface], чтобы не вбивать кадый раз вручную:


PostUp = ip route add my_server_ip via my_router_ip
PostDown = ip route del my_server_ip

Перезапускаем и теперь всё работает отлично!

Мобильные устройства

Android

v2rayNG

На устройствах с ОС Android ( https://ru.wikipedia.org/wiki/Android ) можно использовать приложение v2rayNG ( https://play.google.com/store/apps/details?id=com.v2ray.ang&hl=en_US ).

Open-source ( https://ru.wikipedia.org/wiki/Открытое_программное_обеспечение ), репозиторий: https://github.com/2dust/v2rayNG

<details>

<summary>Пример настроек v2rayNG на планшете</summary>

/shadowsocks:andr_v2rayNG_ss.PNG?600

</details>

iOS

Potatso

Одно из приложений, которое позволяет пустить трафик смартфона через сервер shadowsocks - Potatso ( https://apps.apple.com/ru/app/potatso/id1239860606 ).

Приложение бесплатно, имеет удобный интерфейс и понятные настройки. Поддерживается плагин Simple Obfs (простая обфускация ( https://ru.wikipedia.org/wiki/Обфускация_(программное_обеспечение) )).

Добавляет в систему профиль VPN.

Подключение можно активировать как из самого приложения, так и из системных настроек в разделе VPN.

<details>

<summary>Пример настроек Potatso на iPhone</summary>

/shadowsocks:ios_potatso_ss.png?300

</details>

Дополнительно

Заинтересовавшимся темой рекомендую ознакомиться с некоторыми статьями за авторством MiraclePtr с портала habr.com, сохраненными в этом архиве: 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

Материалы

https://ru.wikipedia.org/wiki/Протокол_установления_сеанса

https://ru.wikipedia.org/wiki/Rust_(язык_программирования)

https://ru.wikipedia.org/wiki/OpenVPN

https://ru.wikipedia.org/wiki/Docker

https://ru.wikipedia.org/wiki/Snappy_(система_управления_пакетами)

https://ru.wikipedia.org/wiki/Kubernetes

https://github.com/shadowsocks/shadowsocks-rust/blob/master/README.md

https://github.com/shadowsocks/shadowsocks-rust/releases

https://ru.wikipedia.org/wiki/Git

https://github.com/shadowsocks/shadowsocks-rust</code>

https://rust-lang.github.io/rustup/cross-compilation.html

https://shadowsocks.org/doc/aead.html

https://github.com/shadowsocks/shadowsocks-rust/tree/master/debian

https://github.com/shadowsocks/shadowsocks-rust

https://ab57.ru/cmdlist/schtasks.html

https://ru.wikipedia.org/wiki/Android

https://play.google.com/store/apps/details?id=com.v2ray.ang&hl=en_US

https://ru.wikipedia.org/wiki/Открытое_программное_обеспечение

https://github.com/2dust/v2rayNG

https://apps.apple.com/ru/app/potatso/id1239860606

https://ru.wikipedia.org/wiki/Обфускация_(программное_обеспечение)

https://shadowsocks.org/

https://github.com/shadowsocks/shadowsocks/wiki

https://krasovs.ky/2022/03/19/shadowsocks-and-v2ray-and-cloudflare.html

Навигация

Поиск

Главная страница

Источник

GitHub

Алиас

[0200::/7]

Alfis / Yggdrasil