Este é um porto de Shadowsocks.
shadowocks é um proxy de túnel rápido que ajuda a contornar firewalls.
Biblioteca | Descrição |
---|---|
sombras | protocolo principal shadowocks |
serviço shadowocks | Serviços para servir shadowocks |
shadowocks-ferrugem | Binários executando serviços shadowocks comuns |
Projetos Relacionados:
sslocal
usando GTK, discussãosslocal
, discussão hickory-dns
- Usa hickory-resolver
como resolvedor de DNS em vez do integrado do tokio
.
local-http
– Permitir o uso do protocolo HTTP para sslocal
local-http-native-tls
– Suporte HTTPS com native-tls
local-http-rustls
– Suporte HTTPS com rustls
local-tunnel
- Permitir o uso do protocolo de túnel para sslocal
local-socks4
- Permitir usar o protocolo SOCKS4/4a para sslocal
local-redir
- Permite usar o protocolo redir (proxy transparente) para sslocal
local-dns
- Permite o uso do protocolo DNS para sslocal
, serve como um servidor DNS fazendo proxy de consultas para servidores DNS locais ou remotos por regras ACL
local-fake-dns
- FakeDNS, alocando um endereço IP para cada consulta individual de um pool de IP específico
local-tun
- suporte de interface TUN para sslocal
local-online-config
- Entrega de configuração on-line SIP008
stream-cipher
- Habilita cifras de fluxo obsoletas. AVISO: as cifras de fluxo não são seguras!
aead-cipher-extra
- Habilita cifras AEAD não padrão
aead-cipher-2022
- Habilita cifras AEAD-2022 (SIP022)
aead-cipher-2022-extra
- Habilita cifras extras AEAD-2022 (cifras não padrão)
Este projeto usa alocador de memória do sistema (libc) (padrão do Rust). Mas também permite usar outros alocadores famosos por recursos:
jemalloc
- Usa jemalloc como alocador de memória globalmimalloc
- Usa mi-malloc como alocador de memória globaltcmalloc
- Usa TCMalloc como alocador de memória global. Ele tenta vincular tcmalloc em todo o sistema por padrão, use vendored from source com tcmalloc-vendored
.snmalloc
- Usa snmalloc como alocador de memória globalrpmalloc
- Usa rpmalloc como alocador de memória globalInstale em crates.io:
# Install from crates.io
cargo install shadowsocks-rust
então você pode encontrar sslocal
e ssserver
em $CARGO_HOME/bin
.
Para macOS e Linux, você pode instalá-lo usando 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
Baixe a compilação vinculada estática aqui.
build-windows
: Compilação para x86_64-pc-windows-msvc
build-linux
: Compilação para x86_64-unknown-linux-gnu
, Debian 9 (Stretch), GLIBC 2.18build-docker
: Compilar para x86_64-unknown-linux-musl
, x86_64-pc-windows-gnu
, ... (vinculado estaticamente) Este projeto forneceu imagens Docker para as arquiteturas linux/i386
e linux/amd64
e linux/arm64/v8
.
⚠️ Os contêineres do Docker não têm acesso ao IPv6 por padrão : certifique-se de desabilitar a rota IPv6 no cliente ou habilitar o acesso IPv6 aos contêineres do Docker.
O Docker extrairá a imagem da arquitetura apropriada de nossos pacotes GitHub.
docker pull ghcr.io/shadowsocks/sslocal-rust:latest
docker pull ghcr.io/shadowsocks/ssserver-rust:latest
Se você quiser construir a imagem Docker sozinho, precisará usar o 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 .
Você precisa montar o arquivo de configuração no contêiner e criar um mapa de porta externa para o contêiner se conectar a ele.
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
Este projeto forneceu manifestos yaml para implantação no Kubernetes.
Você pode aproveitar o serviço k8s para expor o tráfego externo, como LoadBalancer ou NodePort, que ganha mais granularidade em comparação com host ou porta fixa.
Para um caso de uso mais interessante, você pode usar um Ingress (Istio, nginx, etc.) que roteia o tráfego correspondente para shadowocks junto com o serviço da web real.
kubectl
kubectl apply -f https://github.com/shadowsocks/shadowsocks-rust/raw/master/k8s/shadowsocks-rust.yaml
Você pode alterar a configuração editando o ConfigMap chamado shadowsocks-rust
.
Para um controle mais refinado, use helm
.
helm
helm install my-release k8s/chart -f my-values.yaml
Abaixo estão os valores padrão comuns que você pode alterar:
# 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 "
Use carga para construir. NOTA: RAM >= 2GiB
cargo build --release
Então sslocal
e ssserver
aparecerão em ./target/(debug|release)/
, funciona de forma semelhante aos dois binários na implementação oficial do ShadowSocks.
make install TARGET=release
Então sslocal
, ssserver
, ssmanager
e ssurl
serão instalados em /usr/local/bin
(variável PREFIX).
Para usuários do Windows, se você encontrou algum problema na construção, verifique e discuta no item 102.
Se você estiver construindo para sua plataforma de CPU atual (por exemplo, construir e executar em seu computador pessoal), é recomendado definir o recurso target-cpu=native
para permitir que rustc
gere e otimize o código para a CPU que executa o compilador.
export RUSTFLAGS= " -C target-cpu=native "
Requisitos:
./build/build-release
Então sslocal
, ssserver
, ssmanager
e ssurl
serão empacotados em
./build/shadowsocks-${VERSION}-stable.x86_64-unknown-linux-musl.tar.xz
./build/shadowsocks-${VERSION}-stable.x86_64-pc-windows-gnu.zip
Leia Cargo.toml
para mais detalhes.
Gere uma senha segura para um método de criptografia específico ( aes-128-gcm
no exemplo) com:
ssservice genkey -m " aes-128-gcm "
Crie um arquivo de configuração do ShadowSocks. Exemplo
{
"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
}
Uma explicação detalhada do arquivo de configuração pode ser encontrada na documentação do shadowocks. (Link para o projeto original, não mais mantido!)
⚠️ Para instalações instantâneas, o arquivo de configuração provavelmente está localizado em/var/snap/shadowsocks-rust/common/etc/shadowsocks-rust/config.json
(consulte #621 / #1146)
No shadowocks-rust, também temos um formato de arquivo de configuração estendido, que é capaz de definir mais de um servidor. Você também pode desabilitar servidores individuais.
{
"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
seleciona automaticamente o melhor servidor com menor latência e maior disponibilidade.
Inicie o cliente e servidor Shadowsocks com:
sslocal -c config.json
ssserver -c config.json
Se você construir com carga:
cargo run --bin sslocal -- -c config.json
cargo run --bin ssserver -- -c config.json
Liste todos os argumentos disponíveis com -h
.
Inicie o cliente local com arquivo de configuração
# 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 "
Todos os parâmetros são iguais aos do cliente Socks5, exceto --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
ativa o modo túnel do cliente local-f "127.0.0.1:8080
define o endereço de destino do túnelNOTA : Atualmente só suporta
iptables
REDIRECT
e TPROXY
)pf
), como 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 "
Redireciona conexões com configurações iptables
para a porta que sslocal
está escutando.
--protocol redir
ativa o modo Redir do cliente local--tcp-redir
define o modo TCP para REDIRECT
(Linux)--udp-redir
define o modo UDP para TPROXY
(Linux)NOTA : Atualmente só suporta
Crie uma interface Tun com o nome tun0
ip tuntap add mode tun tun0
ifconfig tun0 inet 10.255.0.1 netmask 255.255.255.0 up
Inicie sslocal
com --protocol tun
e ligue-se a tun0
sslocal --protocol tun -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty " --outbound-bind-interface lo0 --tun-interface-name tun0
sslocal --protocol tun -s " [::1]:8388 " -m " aes-256-gcm " -k " hello-kitty " --outbound-bind-interface lo0 --tun-interface-address 10.255.0.1/24
Ele criará uma interface Tun com endereço 10.255.0.1
e máscara de rede 255.255.255.0
.
Baixe wintun.dll
do Wintun e coloque-o na pasta com os binários executáveis do shadowocks ou no PATH do sistema.
sslocal -- protocol tun - s " [::1]:8388 " - m " aes-256-gcm " - k " hello-kitty " -- outbound - bind - interface " Ethernet 0 " -- tun - interface - name " shadowsocks "
Compile-o habilitando --features "winservice"
(não incluído na compilação padrão):
cargo build --release --bin " sswinservice " --features " winservice "
Instale-o como um serviço do Windows (PowerShell):
New-Service - Name " shadowsocks-local-service " ` - DisplayName " Shadowsocks Local Service " ` - BinaryPathName "sswinservice.exe local -c local_config.json "
Existem outras maneiras de instalar sswinservice
como um serviço do Windows, por exemplo, o comando sc
.
Como você deve ter notado que -BinaryPathName
contém não apenas sswinservice.exe
, mas também local -c local_config.json
. Esses parâmetros de linha de comando serão usados como parâmetro padrão quando o serviço do Windows for iniciado. Você também pode iniciar o serviço com parâmetros customizados.
Saiba mais no documento da Microsoft.
O parâmetro sswinservice
funciona exatamente da mesma forma que ssservice
. Ele suporta subcomandos local
, server
e 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 de gerenciamento de vários usuários com suporte:
add
- Inicia uma instância do servidorremove
- Exclui uma instância de servidor existentelist
- Lista todos os servidores em execução no momentoping
- Lista dados estatísticos de todos os servidores NOTA: o comando stat
não é suportado. Porque os servidores estão rodando no mesmo processo do próprio gerenciador.
# 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 '
Para UI do gerenciador, verifique mais detalhes no projeto shadowocks-manager.
Exemplo de configuração:
{
// 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 ,
// 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" ,
// OPTIONAL. macOS launchd activate socket
"launchd_tcp_socket_name" : "TCPListener" ,
"launchd_udp_socket_name" : "UDPListener"
} ,
{
// HTTP local server (feature = "local-http")
"protocol" : "http" ,
// Listen address
"local_address" : "127.0.0.1" ,
"local_port" : 3128 ,
// OPTIONAL. macOS launchd activate socket
"launchd_tcp_socket_name" : "TCPListener"
} ,
{
// 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 ,
// OPTIONAL. DNS local server uses `tcp_and_udp` mode by default
"mode" : "udp_only" ,
// 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 ,
// OPTIONAL. dns client cache size for fetching dns queries.
"client_cache_size" : 5 ,
// OPTIONAL. macOS launchd activate socket
"launchd_tcp_socket_name" : "TCPListener" ,
"launchd_udp_socket_name" : "UDPListener"
} ,
{
// 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"
} ,
{
// FakeDNS local server (feature = "local-fake-dns")
// FakeDNS is a DNS server that allocates an IPv4 / IPv6 address in a specific pool for each queries.
// Subsequence requests from the other local interfaces that the target addresses includes those allocated IP addresses,
// will be substituted back to their original domain name addresses.
// This feature is useful mostly for transparent proxy, which will allow the proxied domain names to be resolved remotely.
"protocol" : "fake-dns" ,
// Listen address
"local_address" : "127.0.0.1" ,
"local_port" : 10053 ,
// IPv4 address pool (for A records)
"fake_dns_ipv4_network" : "10.255.0.0/16" ,
// IPv6 address pool (for AAAA records)
"fake_dns_ipv6_network" : "fdf2:e786:ab40:9d2f::/64" ,
// Persistent storage for all allocated DNS records
"fake_dns_database_path" : "/var/shadowsocks/fakedns.db" ,
// OPTIONAL: Record expire duration in seconds, 10s by default
"fake_dns_record_expire_duration" : 10
}
] ,
// 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 "hickory-dns" is enabled.
"dns" : "google" ,
// Configure `cache_size` for "hickory-dns" ResolverOpts. Set to "0" to disable DNS cache.
"dns_cache_size" : 0 ,
// 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
} ,
// SIP008 Online Configuration Delivery
// https://shadowsocks.org/doc/sip008.html
"online_config" : {
"config_url" : "https://path-to-online-sip008-configuration" ,
// Optional. Seconds between each update to config_url. Default to 3600s
"update_interval" : 3600
} ,
// 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
}
}
O arquivo de configuração é definido por socks5_auth_config_path
em locals
.
{
// Password/Username Authentication (RFC1929)
"password" : {
"users" : [
{
"user_name" : "USERNAME in UTF-8" ,
"password" : "PASSWORD in UTF-8"
}
]
}
}
SS_SERVER_PASSWORD
: Uma senha padrão para servidores criados a partir do argumento da linha de comando ( --server-addr
)SS_SYSTEM_DNS_RESOLVER_FORCE_BUILTIN
: O resolvedor DNS "system"
força o uso do sistema integrado ( getaddrinfo
em *NIX) 2022-blake3-aes-128-gcm
, 2022-blake3-aes-256-gcm
2022-blake3-chacha20-poly1305
, 2022-blake3-chacha8-poly1305
Essas cifras exigem que "password"
seja uma string de chave Base64 que tenha exatamente o mesmo comprimento do tamanho da chave da cifra. Recomenda-se usar ssservice genkey -m "METHOD_NAME"
para gerar uma chave segura e protegida.
chacha20-ietf-poly1305
aes-128-gcm
, aes-256-gcm
plain
ou none
(sem criptografia, usado apenas para depuração ou com plugins que garantem a segurança do transporte)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
sslocal
, ssserver
e ssmanager
suportam arquivo ACL com sintaxe como shadowocks-libev. Alguns exemplos podem ser encontrados aqui.
sslocal
, ssredir
, ...)[bypass_all]
- ACL é executado no modo BlackList
. Ignora todos os endereços que não correspondem a nenhuma regra.[proxy_all]
- ACL é executado no modo WhiteList
. Faz proxy de todos os endereços que não correspondem a nenhuma regra.[bypass_list]
- Regras para conexão direta[proxy_list]
- Regras para conexão através de proxiesssserver
)[reject_all]
- ACL é executado no modo BlackList
. Rejeita todos os clientes que não correspondam a nenhuma regra.[accept_all]
- ACL é executado no modo WhiteList
. Aceita todos os clientes que não correspondam a nenhuma regra.[white_list]
- Regras para clientes aceitos[black_list]
- Regras para clientes rejeitados[outbound_block_list]
– Regras para bloquear endereços de saída. # 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
ssurl
serve para codificar e decodificar URLs ShadowSocks (SIP002). Exemplo: ss://[email protected]:8388/?plugin=obfs-local%3Bobfs%3Dhttp%3Bobfs-host%3Dwww.baidu.com
Ele suporta os seguintes recursos:
libcrypto
(aguardando por uma implementação aceitável de Rust crypto lib) rustc
estávelcrypto2
)A Licença MIT (MIT)
Direitos autorais (c) 2014 YT CHUNG
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar , publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão serão incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM HIPÓTESE ALGUMA OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.