aead-cipher-2022-extra - Enable AEAD-2022 extra ciphers (non-standard ciphers)
Memory Allocators
This project uses system (libc) memory allocator (Rust's default). But it also allows you to use other famous allocators by features:
jemalloc - Uses jemalloc as global memory allocator
mimalloc - Uses mi-malloc as global memory allocator
tcmalloc - Uses TCMalloc as global memory allocator. It tries to link system-wide tcmalloc by default, use vendored from source with tcmalloc-vendored.
snmalloc - Uses snmalloc as global memory allocator
rpmalloc - Uses rpmalloc as global memory allocator
This project provided yaml manifests for deploying to Kubernetes.
You can leverage k8s Service to expose traffic outside, like LoadBalancer or NodePort which gains more fine-grained compared with fixed host or port.
For a more interesting use case, you can use a Ingress(Istio, nginx, etc.) which routes the matched traffic to shadowsocks along with the real web service.
Below is the common default values you can change:
# 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: 8388service_port: 80# the k8s service port, default to server_portpassword: mypasswordmethod: aes-256-gcmfast_open: truemode: 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: falsereplicaCount: 1image:
repository: ghcr.io/shadowsocks/ssserver-rustpullPolicy: IfNotPresent# Overrides the image tag whose default is the chart appVersion.tag: "latest"
Build from source
Use cargo to build. NOTE: RAM >= 2GiB
cargo build --release
Then sslocal and ssserver will appear in ./target/(debug|release)/, it works similarly as the two binaries in the official ShadowSocks' implementation.
make install TARGET=release
Then sslocal, ssserver, ssmanager and ssurl will be installed to /usr/local/bin (variable PREFIX).
For Windows users, if you have encountered any problem in building, check and discuss in #102.
target-cpu optimization
If you are building for your current CPU platform (for example, build and run on your personal computer), it is recommended to set target-cpu=native feature to let rustc generate and optimize code for the CPU running the compiler.
export RUSTFLAGS="-C target-cpu=native"
Build standalone binaries
Requirements:
Docker
./build/build-release
Then sslocal, ssserver, ssmanager and ssurl will be packaged in
Generate a safe and secured password for a specific encryption method (aes-128-gcm in the example) with:
ssservice genkey -m "aes-128-gcm"
Create a ShadowSocks' configuration file. Example
{"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}
In shadowsocks-rust, we also have an extended configuration file format, which is able to define more than one server. You can also disable individual servers.
{"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 automatically selects the best server with the lowest latency and the highest availability.
Start Shadowsocks client and server with:
sslocal -c config.json
ssserver -c config.json
If you Build it with Cargo:
cargo run --bin sslocal -- -c config.json
cargo run --bin ssserver -- -c config.json
List all available arguments with -h.
Usage
Start local client with configuration file
# Read local client configuration from file
sslocal -c /path/to/shadowsocks.json
Socks5 Local client
# 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"
All parameters are the same as Socks5 client, except --protocol http.
Tunnel Local client
# 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 enables local client Tunnel mode
NOTE: stat command is not supported. Because servers are running in the same process with the manager itself.
# 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 UDPecho'add: {"server_port":8388,"password":"hello-kitty"}'| nc -u '127.0.0.1''6100'# Close one server by unix socketecho'remove: {"server_port":8388}'| nc -Uu '/tmp/shadowsocks-manager.sock'
{// 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}
Configuration
{// 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",},{// 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},{// Tunnel local server (feature = "local-tunnel")"protocol": "tunnel",// Listen address"local_address": "127.0.0.1","local_port": 5353,// Forward address, the target of this tunnel// In this example, this will build a `127.0.0.1:5353` -> `8.8.8.8:53` tunnel"forward_address": "8.8.8.8","forward_port": 53,// OPTIONAL. Customizing whether to start TCP and UDP tunnel"mode": "tcp_only"},{// HTTP local server (feature = "local-http")"protocol": "http",// Listen address"local_address": "127.0.0.1","local_port": 3128},{// DNS local server (feature = "local-dns")// This DNS works like China-DNS, it will send requests to `local_dns` and `remote_dns` and choose by ACL rules"protocol": "dns",// Listen address"local_address": "127.0.0.1","local_port": 53,// Local DNS address, DNS queries will be sent directly to this address"local_dns_address": "114.114.114.114",// OPTIONAL. Local DNS's port, 53 by default"local_dns_port": 53,// Remote DNS address, DNS queries will be sent through ssserver to this address"remote_dns_address": "8.8.8.8",// OPTIONAL. Remote DNS's port, 53 by default"remote_dns_port": 53},{// Tun local server (feature = "local-tun")"protocol": "tun",// Tun interface name"tun_interface_name": "tun0",// Tun interface address//// It has to be a host address in CIDR form"tun_interface_address": "10.255.0.1/24"},{// Transparent Proxy (redir) local server (feature = "local-redir")"protocol": "redir",// OPTIONAL: TCP type, may be different between platforms// Linux/Android: redirect (default), tproxy// FreeBSD/OpenBSD: pf (default), ipfw// NetBSD/macOS/Solaris: pf (default), ipfw"tcp_redir": "tproxy",// OPTIONAL: UDP type, may be different between platforms// Linux/Android: tproxy (default)// FreeBSD/OpenBSD: pf (default)"udp_redir": "tproxy"}],// Server configuration// listen on :: for dual stack support, no need add [] around."server": "::",// Change to use your custom port number"server_port": 8388,"method": "aes-256-gcm","password": "your-password","plugin": "v2ray-plugin","plugin_opts": "mode=quic;host=github.com","plugin_args": [// Each line is an argument passed to "plugin""--verbose"],"plugin_mode": "tcp_and_udp",// SIP003u, default is "tcp_only"// Server: TCP socket timeout in seconds.// Client: TCP connection timeout in seconds.// Omit this field if you don't have specific needs."timeout": 7200,// Extended multiple server configuration// LOCAL: Choosing the best server to connect dynamically// SERVER: Creating multiple servers in one process"servers": [{// Fields are the same as the single server's configuration// Individual servers can be disabled// "disabled": true,"address": "0.0.0.0","port": 8389,"method": "aes-256-gcm","password": "your-password","plugin": "...","plugin_opts": "...","plugin_args": [],"plugin_mode": "...","timeout": 7200,// Customized weight for local server's balancer//// Weight must be in [0, 1], default is 1.0.// The higher weight, the server may rank higher."tcp_weight": 1.0,"udp_weight": 1.0,// OPTIONAL. Instance specific ACL"acl": "/path/to/acl/file.acl",},{// Same key as basic format "server" and "server_port""server": "0.0.0.0","server_port": 8388,"method": "chacha20-ietf-poly1305",// Read the actual password from environment variable PASSWORD_FROM_ENV"password": "${PASSWORD_FROM_ENV}"},{// AEAD-2022"server": "::","server_port": 8390,"method": "2022-blake3-aes-256-gcm","password": "3SYJ/f8nmVuzKvKglykRQDSgg10e/ADilkdRWrrY9HU=",// For Server (OPTIONAL)// Support multiple users with Extensible Identity Header// https://github.com/Shadowsocks-NET/shadowsocks-specs/blob/main/2022-2-shadowsocks-2022-extensible-identity-headers.md"users": [{"name": "username",// User's password must have the same length as server's password"password": "4w0GKJ9U3Ox7CIXGU4A3LDQAqP6qrp/tUi/ilpOR9p4="}],// For Client (OPTIONAL)// If EIH enabled, then "password" should have the following format: iPSK:iPSK:iPSK:uPSK// - iPSK is one of the middle relay servers' PSK, for the last `ssserver`, it must be server's PSK ("password")// - uPSK is the user's PSK ("password")// Example:// "password": "3SYJ/f8nmVuzKvKglykRQDSgg10e/ADilkdRWrrY9HU=:4w0GKJ9U3Ox7CIXGU4A3LDQAqP6qrp/tUi/ilpOR9p4="}],// Global configurations for UDP associations"udp_timeout": 300,// Timeout for UDP associations (in seconds), 5 minutes by default"udp_max_associations": 512,// Maximum UDP associations to be kept in one server, unlimited by default// Options for Manager"manager_address": "127.0.0.1",// Could be a path to UNIX socket, /tmp/shadowsocks-manager.sock"manager_port": 5300,// Not needed for UNIX socket// DNS server's address for resolving domain names// For *NIX and Windows, it uses system's configuration by default//// Value could be IP address of DNS server, for example, "8.8.8.8".// DNS client will automatically request port 53 with both TCP and UDP protocol.//// - system, uses system provided API (`getaddrinfo` on *NIX)//// It also allows some pre-defined well-known public DNS servers:// - google (TCP, UDP)// - cloudflare (TCP, UDP)// - cloudflare_tls (TLS), enable by feature "dns-over-tls"// - cloudflare_https (HTTPS), enable by feature "dns-over-https"// - quad9 (TCP, UDP)// - quad9_tls (TLS), enable by feature "dns-over-tls"//// The field is only effective if feature "trust-dns" is enabled."dns": "google",// Mode, could be one of the// - tcp_only// - tcp_and_udp// - udp_only"mode": "tcp_only",// TCP_NODELAY"no_delay": false,// Enables `SO_KEEPALIVE` and set `TCP_KEEPIDLE`, `TCP_KEEPINTVL` to the specified seconds"keep_alive": 15,// Soft and Hard limit of file descriptors on *NIX systems"nofile": 10240,// Try to resolve domain name to IPv6 (AAAA) addresses first"ipv6_first": false,// Set IPV6_V6ONLY for all IPv6 listener sockets// Only valid for locals and servers listening on `::`"ipv6_only": false,// Outbound socket options// Linux Only (SO_MARK)"outbound_fwmark": 255,// FreeBSD only (SO_USER_COOKIE)"outbound_user_cookie": 255,// `SO_BINDTODEVICE` (Linux), `IP_BOUND_IF` (BSD), `IP_UNICAST_IF` (Windows) socket option for outbound sockets"outbound_bind_interface": "eth1",// Outbound socket bind() to this IP (choose a specific interface)"outbound_bind_addr": "11.22.33.44",// Balancer customization"balancer": {// MAX Round-Trip-Time (RTT) of servers// The timeout seconds of each individual checks"max_server_rtt": 5,// Interval seconds between each check"check_interval": 10,// Interval seconds between each check for the best server// Optional. Specify to enable shorter checking interval for the best server only."check_best_interval": 5},// Service configurations// Logger configuration"log": {// Equivalent to `-v` command line option"level": 1,"format": {// Euiqvalent to `--log-without-time`"without_time": false,},// Equivalent to `--log-config`// More detail could be found in https://crates.io/crates/log4rs"config_path": "/path/to/log4rs/config.yaml"},// Runtime configuration"runtime": {// single_thread or multi_thread"mode": "multi_thread",// Worker threads that are used in multi-thread runtime"worker_count": 10}}
SOCKS5 Authentication Configuration
The configuration file is set by socks5_auth_config_path in locals.
{// Password/Username Authentication (RFC1929)"password": {"users": [{"user_name": "USERNAME in UTF-8","password": "PASSWORD in UTF-8"}]}}
Environment Variables
SS_SERVER_PASSWORD: A default password for servers that created from command line argument (--server-addr)
SS_SYSTEM_DNS_RESOLVER_FORCE_BUILTIN: "system" DNS resolver force use system's builtin (getaddrinfo in *NIX)
These Ciphers require "password" to be a Base64 string of key that have exactly the same length of Cipher's Key Size. It is recommended to use ssservice genkey -m "METHOD_NAME" to generate a secured and safe key.
AEAD Ciphers
chacha20-ietf-poly1305
aes-128-gcm, aes-256-gcm
Stream Ciphers
plain or none (No encryption, only used for debugging or with plugins that ensure transport security)
sslocal, ssserver, and ssmanager support ACL file with syntax like shadowsocks-libev. Some examples could be found in here.
Available sections
For local servers (sslocal, ssredir, ...)
Modes:
[bypass_all] - ACL runs in BlackList mode. Bypasses all addresses that didn't match any rules.
[proxy_all] - ACL runs in WhiteList mode. Proxies all addresses that didn't match any rules.
Rules:
[bypass_list] - Rules for connecting directly
[proxy_list] - Rules for connecting through proxies
For remote servers (ssserver)
Modes:
[reject_all] - ACL runs in BlackList mode. Rejects all clients that didn't match any rules.
[accept_all] - ACL runs in WhiteList mode. Accepts all clients that didn't match any rules.
Rules:
[white_list] - Rules for accepted clients
[black_list] - Rules for rejected clients
[outbound_block_list] - Rules for blocking outbound addresses.
Example
# SERVERS# For ssserver, accepts requests from all clients by default[accept_all]# Blocks these clients[black_list]
1.2.3.4
127.0.0.1/8
# Disallow these outbound addresses[outbound_block_list]
127.0.0.1/8
::1
# Using regular expression
^[a-z]{5}\.baidu\.com
# Match exactly
|baidu.com
# Match with subdomains
||google.com
# An internationalized domain name should be converted to punycode# |☃-⌘.com - WRONG
|xn----dqo34k.com
# ||джpумлатест.bрфa - WRONG
||xn--p-8sbkgc5ag7bhce.xn--ba-lmcq
# CLIENTS# For sslocal, ..., bypasses all targets by default[bypass_all]# Proxy these addresses[proxy_list]
||google.com
8.8.8.8
Useful Tools
ssurl is for encoding and decoding ShadowSocks URLs (SIP002). Example:
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
shadowsocks/shadowsocks-rust
shadowsocks
This is a port of shadowsocks.
shadowsocks is a fast tunnel proxy that helps you bypass firewalls.
Related Projects:
sslocal
using GTK, discussionsslocal
, discussionBuild & Install
Optional Features
trust-dns
- Usestrust-dns-resolver
as DNS resolver instead oftokio
's builtin.local-http
- Allow using HTTP protocol forsslocal
local-http-native-tls
- Support HTTPS withnative-tls
local-http-rustls
- Support HTTPS withrustls
local-tunnel
- Allow using tunnel protocol forsslocal
local-socks4
- Allow using SOCKS4/4a protocol forsslocal
local-redir
- Allow using redir (transparent proxy) protocol forsslocal
local-dns
- Allow using dns protocol forsslocal
, serves as a DNS server proxying queries to local or remote DNS servers by ACL ruleslocal-tun
- TUN interface support forsslocal
stream-cipher
- Enable deprecated stream ciphers. WARN: stream ciphers are UNSAFE!aead-cipher-extra
- Enable non-standard AEAD ciphersaead-cipher-2022
- Enable AEAD-2022 ciphers (SIP022)aead-cipher-2022-extra
- Enable AEAD-2022 extra ciphers (non-standard ciphers)Memory Allocators
This project uses system (libc) memory allocator (Rust's default). But it also allows you to use other famous allocators by features:
jemalloc
- Uses jemalloc as global memory allocatormimalloc
- Uses mi-malloc as global memory allocatortcmalloc
- Uses TCMalloc as global memory allocator. It tries to link system-wide tcmalloc by default, use vendored from source withtcmalloc-vendored
.snmalloc
- Uses snmalloc as global memory allocatorrpmalloc
- Uses rpmalloc as global memory allocatorcrates.io
Install from crates.io:
# Install from crates.io cargo install shadowsocks-rust
then you can find
sslocal
andssserver
in$CARGO_HOME/bin
.Install using Homebrew
For macOS and Linux, you can install it using Homebrew:
Download release
Download static-linked build here.
build-windows
: Build forx86_64-pc-windows-msvc
build-linux
: Build forx86_64-unknown-linux-gnu
, Debian 9 (Stretch), GLIBC 2.18build-docker
: Build forx86_64-unknown-linux-musl
,x86_64-pc-windows-gnu
, ... (statically linked)Docker
This project provided Docker images for the
linux/i386
andlinux/amd64
andlinux/arm64/v8
architectures.Pull from GitHub Container Registry
Docker will pull the image of the appropriate architecture from our GitHub Packages.
Build on the local machine(Optional)
If you want to build the Docker image yourself, you need to use the BuildX.
Run the container
You need to mount the configuration file into the container and create an external port map for the container to connect to it.
Deploy to Kubernetes
This project provided yaml manifests for deploying to Kubernetes.
You can leverage k8s Service to expose traffic outside, like LoadBalancer or NodePort which gains more fine-grained compared with fixed host or port.
For a more interesting use case, you can use a Ingress(Istio, nginx, etc.) which routes the matched traffic to shadowsocks along with the real web service.
Using
kubectl
kubectl apply -f https://github.com/shadowsocks/shadowsocks-rust/raw/master/k8s/shadowsocks-rust.yaml
You can change the config via editing the ConfigMap named
shadowsocks-rust
.For more fine-grained control, use
helm
.Using
helm
helm install my-release k8s/chart -f my-values.yaml
Below is the common default values you can change:
Build from source
Use cargo to build. NOTE: RAM >= 2GiB
Then
sslocal
andssserver
will appear in./target/(debug|release)/
, it works similarly as the two binaries in the official ShadowSocks' implementation.Then
sslocal
,ssserver
,ssmanager
andssurl
will be installed to/usr/local/bin
(variable PREFIX).For Windows users, if you have encountered any problem in building, check and discuss in #102.
target-cpu optimization
If you are building for your current CPU platform (for example, build and run on your personal computer), it is recommended to set
target-cpu=native
feature to letrustc
generate and optimize code for the CPU running the compiler.Build standalone binaries
Requirements:
Then
sslocal
,ssserver
,ssmanager
andssurl
will be packaged in./build/shadowsocks-${VERSION}-stable.x86_64-unknown-linux-musl.tar.xz
./build/shadowsocks-${VERSION}-stable.x86_64-pc-windows-gnu.zip
Read
Cargo.toml
for more details.Getting Started
Generate a safe and secured password for a specific encryption method (
aes-128-gcm
in the example) with:ssservice genkey -m "aes-128-gcm"
Create a ShadowSocks' configuration file. Example
Detailed explanation could be found in shadowsocks' documentation.
In shadowsocks-rust, we also have an extended configuration file format, which is able to define more than one server. You can also disable individual servers.
sslocal
automatically selects the best server with the lowest latency and the highest availability.Start Shadowsocks client and server with:
If you Build it with Cargo:
List all available arguments with
-h
.Usage
Start local client with configuration file
# Read local client configuration from file sslocal -c /path/to/shadowsocks.json
Socks5 Local client
HTTP Local client
All parameters are the same as Socks5 client, except
--protocol http
.Tunnel Local client
--protocol tunnel
enables local client Tunnel mode-f "127.0.0.1:8080
sets the tunnel target addressTransparent Proxy Local client
NOTE: It currently only supports
iptables
targetsREDIRECT
andTPROXY
)pf
), such as OS X 10.10+, FreeBSD, ...Redirects connections with
iptables
configurations to the port thatsslocal
is listening on.--protocol redir
enables local client Redir mode--tcp-redir
sets TCP mode toREDIRECT
(Linux)--udp-redir
sets UDP mode toTPROXY
(Linux)Tun interface client
NOTE: It currently only supports
Linux
Create a Tun interface with name
tun0
Start
sslocal
with--protocol tun
and binds totun0
macOS
It will create a Tun interface with address
10.255.0.1
and netmask255.255.255.0
.Server
Server Manager
Supported Manage Multiple Users API:
add
- Starts a server instanceremove
- Deletes an existing server instancelist
- Lists all current running serversping
- Lists all servers' statistic dataNOTE:
stat
command is not supported. Because servers are running in the same process with the manager itself.For manager UI, check more details in the shadowsocks-manager project.
Example configuration:
Configuration
SOCKS5 Authentication Configuration
The configuration file is set by
socks5_auth_config_path
inlocals
.Environment Variables
SS_SERVER_PASSWORD
: A default password for servers that created from command line argument (--server-addr
)SS_SYSTEM_DNS_RESOLVER_FORCE_BUILTIN
:"system"
DNS resolver force use system's builtin (getaddrinfo
in *NIX)Supported Ciphers
AEAD 2022 Ciphers
2022-blake3-aes-128-gcm
,2022-blake3-aes-256-gcm
2022-blake3-chacha20-poly1305
,2022-blake3-chacha8-poly1305
These Ciphers require
"password"
to be a Base64 string of key that have exactly the same length of Cipher's Key Size. It is recommended to usessservice genkey -m "METHOD_NAME"
to generate a secured and safe key.AEAD Ciphers
chacha20-ietf-poly1305
aes-128-gcm
,aes-256-gcm
Stream Ciphers
plain
ornone
(No encryption, only used for debugging or with plugins that ensure transport security)Deprecated
table
aes-128-cfb
,aes-128-cfb1
,aes-128-cfb8
,aes-128-cfb128
aes-192-cfb
,aes-192-cfb1
,aes-192-cfb8
,aes-192-cfb128
aes-256-cfb
,aes-256-cfb1
,aes-256-cfb8
,aes-256-cfb128
aes-128-ctr
aes-192-ctr
aes-256-ctr
camellia-128-cfb
,camellia-128-cfb1
,camellia-128-cfb8
,camellia-128-cfb128
camellia-192-cfb
,camellia-192-cfb1
,camellia-192-cfb8
,camellia-192-cfb128
camellia-256-cfb
,camellia-256-cfb1
,camellia-256-cfb8
,camellia-256-cfb128
rc4-md5
chacha20-ietf
ACL
sslocal
,ssserver
, andssmanager
support ACL file with syntax like shadowsocks-libev. Some examples could be found in here.Available sections
sslocal
,ssredir
, ...)[bypass_all]
- ACL runs inBlackList
mode. Bypasses all addresses that didn't match any rules.[proxy_all]
- ACL runs inWhiteList
mode. Proxies all addresses that didn't match any rules.[bypass_list]
- Rules for connecting directly[proxy_list]
- Rules for connecting through proxiesssserver
)[reject_all]
- ACL runs inBlackList
mode. Rejects all clients that didn't match any rules.[accept_all]
- ACL runs inWhiteList
mode. Accepts all clients that didn't match any rules.[white_list]
- Rules for accepted clients[black_list]
- Rules for rejected clients[outbound_block_list]
- Rules for blocking outbound addresses.Example
Useful Tools
ssurl
is for encoding and decoding ShadowSocks URLs (SIP002). Example:Notes
It supports the following features:
TODO
libcrypto
(waiting for an acceptable Rust crypto lib implementation)rustc
(blocking by.crypto2
)License
The MIT License (MIT)
Copyright (c) 2014 Y. T. CHUNG
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Stargazers over time