7.5 KiB
Развертывание прокси базе Shadowsocks (сервер и клиент)
Shadowsocks -- это не VPN, это -- защищенный прокси-сервер Socks5, он перенаправляет трафик через сервер, но не предоставляют полную анонимность, не защищает весь интернет-трафик, а только трафик приложений настроенных на этот прокси.
Несмотря на то, что Shadowsocks это приложение с открытым кодом и его просмотрело много людей, он не проходил официального аудита безопасности, а значит гарантий полной безопасности при его использовании нет.
Документация по Shadowsocks в репозитории GitHub.
Сервер
Загружаем образ shadowsocks с DockerHub:
docker pull shadowsocks/shadowsocks-libev
Запускаем контейнер:
sudo docker run \
-e PASSWORD=very#knotty^password! \
-e TZ=Europe/Istanbul
-e METHOD=aes-256-cfb \
-p 8391:8388/tcp \
-p 8391:8388/udp \
-d --restart=always --name=ss01-server shadowsocks/shadowsocks-libev:latest
Проверим, что контейнер запустился:
sudo docker ps
Вывод должен быть примерно таким:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61edf1fca166 shadowsocks/shadowsocks-libev:latest "/bin/sh -c 'exec ss…" 8 hours ago Up 8 hours 0.0.0.0:8391->8388/tcp, 0.0.0.0:8391->8388/udp, :::8391->8388/tcp, :::8391->8388/udp ss01-server
Для docker-compose это будет примерно вот такой docker-compose.yml
:
version: "3.7"
services:
ss-server:
image: shadowsocks/shadowsocks-libev:latest
container_name: 'ss02-server'
environment:
- TZ=Europe/Moscow
- PASSWORD=another~yet#knotty^password!
- METHOD=aes-256-cfb
- ARGS=--fast-open
ports:
- "8390:8388/tcp"
- "8390:8388/udp"
restart: unless-stopped
Запускаем docker-compose:
sudo docker-compose up -d
Важными при развёртывании является, пожалуй, только параметр PASSWORD
и порты (в нашем случае сервер shadowsocks будет
виден в интернет по порту 8391
) . Также можно определить следующие параметры:
SERVER_ADDR
-- IP или домен для привязки, по умолчанию0.0.0.0
.SERVER_ADDR_IPV6
-- адрес IPv6 для привязки, по умолчанию::0
.METHOD
-- метод шифрования, по умолчаниюaes-256-gcm
. Так же поддерживаютсяc4-md5
,aes-128-gcm
,aes-192-gcm
,aes-128-cfb
,aes-192-cfb
,aes-256-cfb
,aes-128-ctr
,aes-192-ctr
,aes-256-ctr
,camellia-128-cfb
,camellia-192-cfb
,camellia-256-cfb
,bf-cfb
,chacha20-ietf-poly1305
,xchacha20-ietf-poly1305
,salsa20
,chacha20
иchacha20-ietf
. Из этого списка особого внимание заслуживает chacha20-ietf-poly1305, так как это шифрование поддерживает Outline VPN.TIMEOUT
-- по умолчанию300
.DNS_ADDRS
-- DNS-серверы для перенаправления запросов поиска NS, по умолчанию:8.8.8.8,8.8.4.4
.TZ
-- часовой пояс, по умолчаниюUTC
.ARGS
-- дополнительные аргументы, поддерживаемые,ss-server
, например, для запуска в режиме--fast-open
или с подключёнными плагинами, типа relay-сервера2ray
.
Клиент
Ссылки на загрузку различных клиентов Shadowsocks с графическим интерфейсом можно на сайте Shadowsocks. Ему нужно будет указать IP-адрес сервера, порт, пароль и метод шифрования. Например, вот такой конфиг для клиента:
{
"server": "11.22.33.44",
"server_port": 8391,
"local_address": "0.0.0.0",
"local_port": 1080,
"password": "very#knotty^password!",
"timeout": 600,
"method": "aes-256-gcm"
}
Но можно и воспользоваться Docker, развернуть клиент в контейнере и работать с ним как локальным Socks5-прокси (другие пользователи локальной сети тоже могут работать через этот Socks5).
Загружаем образ shadowsocks-клиента:
docker pull littleqz/shadowsocks-client
Запускаем контейнер:
sudo docker run \
-e SERVER=11.22.33.44 \
-e SERVER_PORT=8391 \
-e LOCAL_PORT=1080 \
-e PASSWORD=very#knotty^password! \
-e METHOD=aes-256-cfb \
-p 1080:1080 \
-d --restart=always --name=ss_proxy_izmir littleqz/shadowsocks-client
Теперь если в настройках браузера или другого приложения указать в качестве прокси-сервера localhost
и порт 1080
,
то весь трафик будет перенаправляться через прокси-сервер. Так же можно указать в качестве прокси-сервера IP-адрес
компьютера, где запущен контейнер с прокси-сервером, и тогда другие пользователи локальной сети тоже смогут
использовать этот прокси-сервер.
Подобным образом можно запустить несколько контейнеров с shadowsocks-клиентами, например, для разных стран, настроив их на разные порты и переключаться между ними.
Для docker-compose это будет примерно вот такой docker-compose.yml
(настроено сразу на два клиента):
version: "3.7"
services:
ss_proxy_izmir:
image: littleqz/shadowsocks-client
container_name: ss_proxy_izmir
environment:
- SERVER=11.22.33.44
- SERVER_PORT=8391
- LOCAL_PORT=1080
- PASSWORD=another~yet#knotty^password!
- TIMEOUT=60
- METHOD=aes-256-cfb
# expose:
# - 1080
ports:
- 1080:1080
restart: always
ss_proxy_msk:
image: littleqz/shadowsocks-client
container_name: ss_proxy_msk
environment:
- SERVER=55.66.77.88
- SERVER_PORT=8391
- LOCAL_PORT=1081
- PASSWORD=very#knotty^password!
- TIMEOUT=60
- METHOD=aes-256-cfb
ports:
- 1081:1081
restart: always