Это порт Shadowsocks.
Shadowsocks — это быстрый туннельный прокси, который помогает обходить брандмауэры.
| Библиотека | Описание |
|---|---|
| носки с тенями | Основной протокол Shadowsocks |
| Shadowsocks-сервис | Услуги по обслуживанию теневых носков |
| Shadowsocks-Ржавчина | Двоичные файлы, запускающие общие службы Shadowsocks |
Связанные проекты:
sslocal с использованием GTK, обсуждениеsslocal , обсуждение hickory-dns — использует hickory-resolver в качестве DNS-преобразователя вместо встроенного в tokio .
local-http — разрешить использование протокола HTTP для sslocal
local-http-native-tls — поддержка HTTPS с помощью native-tls
local-http-rustls — поддержка HTTPS с помощью rustls
local-tunnel — разрешить использование туннельного протокола для sslocal
local-socks4 — разрешить использование протокола SOCKS4/4a для sslocal
local-redir — разрешить использование протокола redir (прозрачный прокси) для sslocal
local-dns — разрешить использование протокола DNS для sslocal , служит DNS-сервером, пересылающим запросы к локальным или удаленным DNS-серверам по правилам ACL.
local-fake-dns — FakeDNS, выделяющий IP-адрес для каждого отдельного запроса из определенного пула IP-адресов.
local-tun — поддержка интерфейса TUN для sslocal
local-online-config — доставка онлайн-конфигурации SIP008
stream-cipher — включить устаревшие потоковые шифры. ВНИМАНИЕ: потоковые шифры НЕБЕЗОПАСНЫ!
aead-cipher-extra — включить нестандартные шифры AEAD.
aead-cipher-2022 — включить шифры AEAD-2022 (SIP022).
aead-cipher-2022-extra — включить дополнительные шифры AEAD-2022 (нестандартные шифры)
В этом проекте используется системный распределитель памяти (libc) (по умолчанию в Rust). Но он также позволяет использовать и другие известные распределители по функциям:
jemalloc — использует jemalloc в качестве глобального распределителя памяти.mimalloc — использует mi-malloc в качестве глобального распределителя памяти.tcmalloc — использует TCMalloc в качестве глобального распределителя памяти. По умолчанию он пытается связать общесистемный tcmalloc, используя поставщик из исходного кода с tcmalloc-vendored .snmalloc — использует snmalloc в качестве глобального распределителя памяти.rpmalloc — использует rpmalloc в качестве глобального распределителя памяти.Установить с crates.io:
# Install from crates.io
cargo install shadowsocks-rust тогда вы можете найти sslocal и ssserver в $CARGO_HOME/bin .
Для macOS и Linux вы можете установить его с помощью Homebrew:
brew install shadowsocks-rust # Install from snapstore
snap install shadowsocks-rust
# List services
snap services shadowsocks-rust
# Enable and start shadowsocks-rust.sslocal-daemon snap service
snap start --enable shadowsocks-rust.sslocal-daemon
# Show generated systemd service status
systemctl status snap.shadowsocks-rust.sslocal-daemon.service
# Override generated systemd service (configure startup options)
systemctl edit snap.shadowsocks-rust.sslocal-daemon.service
# # NOTE: you can pass args to sslocal:
# # [Service]
# # ExecStart=
# # ExecStart=/usr/bin/snap run shadowsocks-rust.sslocal-daemon -b "127.0.0.1:1080" --server-url "ss://...."
# Restart generated systemd service to apply changes
systemctl restart snap.shadowsocks-rust.sslocal-daemon.service
# ... and show service status
systemctl status snap.shadowsocks-rust.sslocal-daemon.serviceЗагрузите статически связанную сборку здесь.
build-windows : сборка для x86_64-pc-windows-msvcbuild-linux : сборка для x86_64-unknown-linux-gnu , Debian 9 (Stretch), GLIBC 2.18.build-docker : сборка для x86_64-unknown-linux-musl , x86_64-pc-windows-gnu , ... (статически связана) Этот проект предоставил образы Docker для архитектур linux/i386 , linux/amd64 и linux/arm64/v8 .
⚠️ Контейнеры Docker по умолчанию не имеют доступа к IPv6 . Обязательно отключите маршрут IPv6 в клиенте или включите доступ IPv6 к контейнерам Docker.
Docker извлечет образ соответствующей архитектуры из наших пакетов GitHub.
docker pull ghcr.io/shadowsocks/sslocal-rust:latest
docker pull ghcr.io/shadowsocks/ssserver-rust:latestЕсли вы хотите собрать образ Docker самостоятельно, вам нужно использовать BuildX.
docker buildx build -t shadowsocks/ssserver-rust:latest -t shadowsocks/ssserver-rust:v1.15.2 --target ssserver .
docker buildx build -t shadowsocks/sslocal-rust:latest -t shadowsocks/sslocal-rust:v1.15.2 --target sslocal . Вам необходимо смонтировать файл конфигурации в контейнер и создать внешнюю карту портов, чтобы контейнер мог подключиться к нему.
docker run --name sslocal-rust
--restart always
-p 1080:1080/tcp
-v /path/to/config.json:/etc/shadowsocks-rust/config.json
-dit ghcr.io/shadowsocks/sslocal-rust:latest
docker run --name ssserver-rust
--restart always
-p 8388:8388/tcp
-p 8388:8388/udp
-v /path/to/config.json:/etc/shadowsocks-rust/config.json
-dit ghcr.io/shadowsocks/ssserver-rust:latestЭтот проект предоставил манифесты yaml для развертывания в Kubernetes.
Вы можете использовать службу k8s для предоставления трафика снаружи, например LoadBalancer или NodePort, который становится более детализированным по сравнению с фиксированным хостом или портом.
Для более интересного варианта использования вы можете использовать Ingress (Istio, nginx и т. д.), который направляет соответствующий трафик в Shadowsocks вместе с реальным веб-сервисом.
kubectl kubectl apply -f https://github.com/shadowsocks/shadowsocks-rust/raw/master/k8s/shadowsocks-rust.yaml
Вы можете изменить конфигурацию, отредактировав ConfigMap с shadowsocks-rust .
Для более детального управления используйте helm .
helm helm install my-release k8s/chart -f my-values.yaml
Ниже приведены общие значения по умолчанию, которые вы можете изменить:
# This is the shadowsocks config which will be mount to /etc/shadowocks-rust.
# You can put arbitrary yaml here, and it will be translated to json before mounting.
servers :
- server : " :: "
server_port : 8388
service_port : 80 # the k8s service port, default to server_port
password : mypassword
method : aes-256-gcm
fast_open : true
mode : tcp_and_udp
# plugin: v2ray-plugin
# plugin_opts: server;tls;host=github.com
# Whether to download v2ray and xray plugin.
downloadPlugins : false
# Name of the ConfigMap with config.json configuration for shadowsocks-rust.
configMapName : " "
service :
# Change to LoadBalancer if you are behind a cloud provider like aws, gce, or tke.
type : ClusterIP
# Bind shadowsocks port port to host, i.e., we can use host:port to access shawdowsocks server.
hostPort : false
replicaCount : 1
image :
repository : ghcr.io/shadowsocks/ssserver-rust
pullPolicy : IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag : " latest "Используйте груз для строительства. ПРИМЕЧАНИЕ. ОЗУ >= 2 ГБ.
cargo build --release Затем sslocal и ssserver появятся в ./target/(debug|release)/ . Они работают аналогично двум двоичным файлам в официальной реализации ShadowSocks.
make install TARGET=release Затем sslocal , ssserver , ssmanager и ssurl будут установлены в /usr/local/bin (переменная PREFIX).
Для пользователей Windows: если вы столкнулись с какой-либо проблемой при сборке, проверьте и обсудите ее в № 102.
Если вы выполняете сборку для своей текущей платформы ЦП (например, собираете и запускаете на своем персональном компьютере), рекомендуется установить функцию target-cpu=native , чтобы позволить rustc генерировать и оптимизировать код для ЦП, на котором работает компилятор.
export RUSTFLAGS= " -C target-cpu=native "Требования:
./build/build-release Затем sslocal , ssserver , ssmanager и ssurl будут упакованы в
./build/shadowsocks-${VERSION}-stable.x86_64-unknown-linux-musl.tar.xz./build/shadowsocks-${VERSION}-stable.x86_64-pc-windows-gnu.zip Прочтите Cargo.toml для более подробной информации.
Создайте безопасный и надежный пароль для определенного метода шифрования (в примере aes-128-gcm ) с помощью:
ssservice genkey -m " aes-128-gcm "Создайте файл конфигурации ShadowSocks. Пример
{
"server" : "my_server_ip" ,
"server_port" : 8388 ,
"password" : "rwQc8qPXVsRpGx3uW+Y3Lj4Y42yF9Bs0xg1pmx8/+bo=" ,
"method" : "aes-256-gcm" ,
// ONLY FOR `sslocal`
// Delete these lines if you are running `ssserver` or `ssmanager`
"local_address" : "127.0.0.1" ,
"local_port" : 1080
}Подробное объяснение файла конфигурации можно найти в документации Shadowsocks. (Ссылка на оригинальный проект, больше не поддерживается!)
⚠️ Для моментальных установок файл конфигурации, скорее всего, находится в/var/snap/shadowsocks-rust/common/etc/shadowsocks-rust/config.json(см. #621/#1146).
В Shadowsocks-Rust также есть расширенный формат файла конфигурации, который позволяет определять более одного сервера. Вы также можете отключить отдельные серверы.
{
"servers" : [
{
"server" : "127.0.0.1" ,
"server_port" : 8388 ,
"password" : "rwQc8qPXVsRpGx3uW+Y3Lj4Y42yF9Bs0xg1pmx8/+bo=" ,
"method" : "aes-256-gcm" ,
"timeout" : 7200
} ,
{
"server" : "127.0.0.1" ,
"server_port" : 8389 ,
"password" : "/dliNXn5V4jg6vBW4MnC1I8Jljg9x7vSihmk6UZpRBM=" ,
"method" : "chacha20-ietf-poly1305"
} ,
{
"disabled" : true ,
"server" : "eg.disable.me" ,
"server_port" : 8390 ,
"password" : "mGvbWWay8ueP9IHnV5F1uWGN2BRToiVCAWJmWOTLU24=" ,
"method" : "chacha20-ietf-poly1305"
}
] ,
// ONLY FOR `sslocal`
// Delete these lines if you are running `ssserver` or `ssmanager`
"local_port" : 1080 ,
"local_address" : "127.0.0.1"
} sslocal автоматически выбирает лучший сервер с наименьшей задержкой и максимальной доступностью.
Запустите клиент и сервер Shadowsocks с помощью:
sslocal -c config.json
ssserver -c config.jsonЕсли вы построите его с грузом:
cargo run --bin sslocal -- -c config.json
cargo run --bin ssserver -- -c config.json Перечислите все доступные аргументы с помощью -h .
Запустите локальный клиент с файлом конфигурации
# Read local client configuration from file
sslocal -c /path/to/shadowsocks.json # Pass all parameters via command line
sslocal -b " 127.0.0.1:1080 " -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty " --plugin " v2ray-plugin " --plugin-opts " server;tls;host=github.com "
# Pass server with SIP002 URL
sslocal -b " 127.0.0.1:1080 " --server-url " ss://[email protected]:8388/?plugin=v2ray-plugin%3Bserver%3Btls%3Bhost%3Dgithub.com "sslocal -b " 127.0.0.1:3128 " --protocol http -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty " Все параметры такие же, как у клиента Socks5, за исключением --protocol http .
# Set 127.0.0.1:8080 as the target for forwarding to
sslocal --protocol tunnel -b " 127.0.0.1:3128 " -f " 127.0.0.1:8080 " -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty "--protocol tunnel включает режим туннеля локального клиента-f "127.0.0.1:8080 устанавливает целевой адрес туннеляПРИМЕЧАНИЕ . В настоящее время поддерживается только
iptables REDIRECT и TPROXY )pf ), например OS X 10.10+, FreeBSD,... sslocal -b " 127.0.0.1:60080 " --protocol redir -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty " --tcp-redir " redirect " --udp-redir " tproxy " Перенаправляет соединения с конфигурациями iptables на порт, который прослушивает sslocal .
--protocol redir включает режим Redir локального клиента--tcp-redir устанавливает режим TCP на REDIRECT (Linux)--udp-redir устанавливает режим UDP на TPROXY (Linux)ПРИМЕЧАНИЕ . В настоящее время поддерживается только
Создайте интерфейс Tun с именем tun0
ip tuntap add mode tun tun0
ifconfig tun0 inet 10.255.0.1 netmask 255.255.255.0 up Запустите sslocal с --protocol tun и привяжитесь к tun0
sslocal --protocol tun -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty " --outbound-bind-interface lo0 --tun-interface-name tun0sslocal --protocol tun -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty " --outbound-bind-interface lo0 --tun-interface-address 10.255.0.1/24 Он создаст интерфейс Tun с адресом 10.255.0.1 и маской сети 255.255.255.0 .
Загрузите wintun.dll из Wintun и поместите его в папку с исполняемыми двоичными файлами Shadowsocks или в системную переменную PATH.
sslocal -- protocol tun - s " [::1]:8388 " - m " aes-256-gcm " - k " hello-kitty " -- outbound - bind - interface " Ethernet 0 " -- tun - interface - name " shadowsocks " Скомпилируйте его, включив --features "winservice" (не включено в сборку по умолчанию):
cargo build --release --bin " sswinservice " --features " winservice "Установите его как службу Windows (PowerShell):
New-Service - Name " shadowsocks-local-service " `
- DisplayName " Shadowsocks Local Service " `
- BinaryPathName " <Pathto>sswinservice.exe local -c <Pathto>local_config.json " Существуют и другие способы установки sswinservice как службы Windows, например, команда sc .
Как вы, возможно, заметили, -BinaryPathName содержит не только sswinservice.exe , но и local -c local_config.json . Эти параметры командной строки будут использоваться в качестве параметра по умолчанию при запуске службы Windows. Вы также можете запустить службу с настроенными параметрами.
Узнайте больше из документа Microsoft.
Параметр sswinservice работает точно так же, как и ssservice . Он поддерживает local , server и manager подкоманды.
# Read server configuration from file
ssserver -c /path/to/shadowsocks.json
# Pass all parameters via command line
ssserver -s " [::]:8388 " -m " aes-256-gcm " -k " hello-kitty " --plugin " v2ray-plugin " --plugin-opts " server;tls;host=github.com "Поддерживаемый API управления несколькими пользователями:
add — запускает экземпляр сервераremove — удаляет существующий экземпляр сервера.list — список всех текущих работающих серверов.ping — список статистических данных всех серверов. ПРИМЕЧАНИЕ. Команда stat не поддерживается. Потому что серверы работают в одном процессе с самим менеджером.
# Start it just with --manager-address command line parameter
ssmanager --manager-address " 127.0.0.1:6100 "
# For *nix system, manager can bind to unix socket address
ssmanager --manager-address " /tmp/shadowsocks-manager.sock "
# You can also provide a configuration file
#
# `manager_address` key must be provided in the configuration file
ssmanager -c /path/to/shadowsocks.json
# Create one server by UDP
echo ' add: {"server_port":8388,"password":"hello-kitty"} ' | nc -u ' 127.0.0.1 ' ' 6100 '
# Close one server by unix socket
echo ' remove: {"server_port":8388} ' | nc -Uu ' /tmp/shadowsocks-manager.sock 'Более подробную информацию о пользовательском интерфейсе менеджера можно найти в проектеshadowsocks-manager.
Пример конфигурации:
{
// Required option
// Address that ssmanager is listening on
"manager_address" : "127.0.0.1" ,
"manager_port" : 6100 ,
// Or bind to a Unix Domain Socket
"manager_address" : "/tmp/shadowsocks-manager.sock" ,
"servers" : [
// These servers will be started automatically when ssmanager is started
] ,
// Outbound socket binds to this IP address
// For choosing different network interface on the same machine
"local_address" : "xxx.xxx.xxx.xxx" ,
// Other options that may be passed directly to new servers
} {
// LOCAL: Listen address. This is exactly the same as `locals[0]`
// SERVER: Bind address for remote sockets, mostly used for choosing interface
// Don't set it if you don't know what's this for.
"local_address" : "127.0.0.1" ,
"local_port" : 1080 ,
// Extended multiple local configuration
"locals" : [
{
// Basic configuration, a SOCKS5 local server
"local_address" : "127.0.0.1" ,
"local_port" : 1080 ,
// OPTIONAL. Setting the `mode` for this specific local server instance.
// If not set, it will derive from the outer `mode`
"mode" : "tcp_and_udp" ,
// OPTIONAL. Authentication configuration file
// Configuration file document could be found in the next section.
"socks5_auth_config_path" : "/path/to/auth.json" ,
// OPTIONAL. Instance specific ACL
"acl" : "/path/to/acl/file.acl" ,
// OPTIONAL. macOS launchd activate socket
"launchd_tcp_socket_name" : "TCPListener" ,
"launchd_udp_socket_name" : "UDPListener"
} ,
{
// SOCKS5, SOCKS4/4a local server
"protocol" : "socks" ,
// Listen address
"local_address" : "127.0.0.1" ,
"local_port" : 1081 ,
// OPTIONAL. Enables UDP relay
"mode" : "tcp_and_udp" ,
// OPTIONAL. Customizing the UDP's binding address. Depending on `mode`, if
// - TCP is enabled, then SOCKS5's UDP Association command will return this address
// - UDP is enabled, then SOCKS5's UDP server will listen to this address.
"local_udp_address" : "127.0.0.1" ,
"local_udp_port" : 2081 ,
// OPTIONAL. macOS launchd activate socket
"launchd_tcp_socket_name" : "TCPListener" ,
"launchd_udp_socket_name" : "UDPListener"
} ,
{
// Tunnel local server (feature = "local-tunnel")
"protocol" : "tunnel" ,
// Listen address
"local_address" : "127.0.0.1" ,
"local_port" : 5353 ,