Este es un puerto de calcetines de sombra.
Shadowsocks es un proxy de túnel rápido que te ayuda a evitar los firewalls.
Biblioteca | Descripción |
---|---|
calcetines de sombra | Protocolo central de Shadowsocks. |
servicio-shadowsocks | Servicios para servir calcetines de sombra. |
calcetines de sombra-óxido | Binarios que ejecutan servicios comunes de Shadowsocks |
Proyectos relacionados:
sslocal
usando GTK, discusiónsslocal
, discusión hickory-dns
: utiliza hickory-resolver
como solucionador de DNS en lugar del integrado de tokio
.
local-http
: permite el uso del protocolo HTTP para sslocal
local-http-native-tls
: admite HTTPS con native-tls
local-http-rustls
: admite HTTPS con rustls
local-tunnel
: permite el uso del protocolo de túnel para sslocal
local-socks4
- Permitir el uso del protocolo SOCKS4/4a para sslocal
local-redir
: permite el uso del protocolo redir (proxy transparente) para sslocal
local-dns
: permite el uso del protocolo dns para sslocal
, sirve como servidor DNS que envía consultas a servidores DNS locales o remotos mediante reglas ACL.
local-fake-dns
: FakeDNS, que asigna una dirección IP para cada consulta individual de un grupo de IP específico
local-tun
- Soporte de interfaz TUN para sslocal
local-online-config
- Entrega de configuración en línea SIP008
stream-cipher
: habilita cifrados de flujo obsoletos. ADVERTENCIA: ¡los cifrados de flujo NO son SEGUROS!
aead-cipher-extra
: habilita cifrados AEAD no estándar
aead-cipher-2022
: habilita los cifrados AEAD-2022 (SIP022)
aead-cipher-2022-extra
: habilita cifrados adicionales AEAD-2022 (cifrados no estándar)
Este proyecto utiliza el asignador de memoria del sistema (libc) (el valor predeterminado de Rust). Pero también te permite utilizar otros asignadores famosos por características:
jemalloc
: utiliza jemalloc como asignador de memoria globalmimalloc
: utiliza mi-malloc como asignador de memoria globaltcmalloc
: utiliza TCMalloc como asignador de memoria global. Intenta vincular tcmalloc en todo el sistema de forma predeterminada, use el proveedor desde la fuente con tcmalloc-vendored
.snmalloc
: utiliza snmalloc como asignador de memoria globalrpmalloc
: utiliza rpmalloc como asignador de memoria globalInstalar desde crates.io:
# Install from crates.io
cargo install shadowsocks-rust
entonces puedes encontrar sslocal
y ssserver
en $CARGO_HOME/bin
.
Para macOS y Linux, puedes instalarlo 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
Descargue la compilación vinculada estáticamente aquí.
build-windows
: compilación para x86_64-pc-windows-msvc
build-linux
: Compilación para x86_64-unknown-linux-gnu
, Debian 9 (Stretch), GLIBC 2.18build-docker
: compilación para x86_64-unknown-linux-musl
, x86_64-pc-windows-gnu
, ... (vinculado estáticamente) Este proyecto proporcionó imágenes de Docker para las arquitecturas linux/i386
y linux/amd64
y linux/arm64/v8
.
⚠️ Los contenedores Docker no tienen acceso a IPv6 de forma predeterminada : asegúrese de deshabilitar la ruta IPv6 en el cliente o habilitar el acceso IPv6 a los contenedores Docker.
Docker extraerá la imagen de la arquitectura apropiada de nuestros paquetes de GitHub.
docker pull ghcr.io/shadowsocks/sslocal-rust:latest
docker pull ghcr.io/shadowsocks/ssserver-rust:latest
Si desea crear la imagen de Docker usted mismo, debe utilizar 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 .
Debe montar el archivo de configuración en el contenedor y crear un mapa de puerto externo para que el contenedor se conecte a él.
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 proyecto proporcionó manifiestos yaml para implementar en Kubernetes.
Puede aprovechar el servicio k8s para exponer el tráfico externo, como LoadBalancer o NodePort, que se vuelve más detallado en comparación con el host o puerto fijo.
Para un caso de uso más interesante, puede utilizar Ingress (Istio, nginx, etc.) que enruta el tráfico coincidente a Shadowsocks junto con el servicio web real.
kubectl
kubectl apply -f https://github.com/shadowsocks/shadowsocks-rust/raw/master/k8s/shadowsocks-rust.yaml
Puede cambiar la configuración editando el ConfigMap llamado shadowsocks-rust
.
Para un control más detallado, utilice helm
.
helm
helm install my-release k8s/chart -f my-values.yaml
A continuación se muestran los valores predeterminados comunes que puede cambiar:
# 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 "
Utilice carga para construir. NOTA: RAM >= 2GiB
cargo build --release
Luego, sslocal
y ssserver
aparecerán en ./target/(debug|release)/
, funciona de manera similar a los dos binarios en la implementación oficial de ShadowSocks.
make install TARGET=release
Luego, sslocal
, ssserver
, ssmanager
y ssurl
se instalarán en /usr/local/bin
(prefijo variable).
Para los usuarios de Windows, si han encontrado algún problema en la construcción, consulte y analice el punto 102.
Si está compilando para su plataforma de CPU actual (por ejemplo, compilando y ejecutando en su computadora personal), se recomienda configurar la característica target-cpu=native
para permitir que rustc
genere y optimice el código para la CPU que ejecuta el compilador.
export RUSTFLAGS= " -C target-cpu=native "
Requisitos:
./build/build-release
Luego sslocal
, ssserver
, ssmanager
y ssurl
se empaquetarán en
./build/shadowsocks-${VERSION}-stable.x86_64-unknown-linux-musl.tar.xz
./build/shadowsocks-${VERSION}-stable.x86_64-pc-windows-gnu.zip
Lea Cargo.toml
para obtener más detalles.
Genere una contraseña segura para un método de cifrado específico ( aes-128-gcm
en el ejemplo) con:
ssservice genkey -m " aes-128-gcm "
Cree un archivo de configuración de ShadowSocks. Ejemplo
{
"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
}
La explicación detallada del archivo de configuración se puede encontrar en la documentación de Shadowsocks. (Enlace al proyecto original, ¡ya no se mantiene!)
⚠️ Para instalaciones instantáneas, el archivo de configuración probablemente esté ubicado en/var/snap/shadowsocks-rust/common/etc/shadowsocks-rust/config.json
(ver #621 / #1146)
En Shadowsocks-rust, también tenemos un formato de archivo de configuración extendido, que es capaz de definir más de un servidor. También puede desactivar servidores individuales.
{
"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
selecciona automáticamente el mejor servidor con la latencia más baja y la mayor disponibilidad.
Inicie el cliente y servidor Shadowsocks con:
sslocal -c config.json
ssserver -c config.json
Si lo construyes con Cargo:
cargo run --bin sslocal -- -c config.json
cargo run --bin ssserver -- -c config.json
Enumere todos los argumentos disponibles con -h
.
Iniciar cliente local con archivo de configuración
# 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 los parámetros son los mismos que los del cliente Socks5, excepto --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
habilita el modo de túnel del cliente local-f "127.0.0.1:8080
establece la dirección de destino del túnelNOTA : Actualmente solo admite
iptables
apunta REDIRECT
y 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 "
Redirige las conexiones con configuraciones iptables
al puerto en el que escucha sslocal
.
--protocol redir
habilita el modo Redir del cliente local--tcp-redir
establece el modo TCP en REDIRECT
(Linux)--udp-redir
establece el modo UDP en TPROXY
(Linux)NOTA : Actualmente solo admite
Crea una interfaz Tun con nombre tun0
ip tuntap add mode tun tun0
ifconfig tun0 inet 10.255.0.1 netmask 255.255.255.0 up
Inicie sslocal
con --protocol tun
y se vincula 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
Creará una interfaz Tun con dirección 10.255.0.1
y máscara de red 255.255.255.0
.
Descargue wintun.dll
de Wintun y colóquelo en la carpeta con los archivos binarios ejecutables de Shadowsocks o en la RUTA del sistema.
sslocal -- protocol tun - s " [::1]:8388 " - m " aes-256-gcm " - k " hello-kitty " -- outbound - bind - interface " Ethernet 0 " -- tun - interface - name " shadowsocks "
Compílelo habilitando --features "winservice"
(no incluido en la compilación predeterminada):
cargo build --release --bin " sswinservice " --features " winservice "
Instálelo como un servicio de Windows (PowerShell):
New-Service - Name " shadowsocks-local-service " `
- DisplayName " Shadowsocks Local Service " `
- BinaryPathName " <Pathto>sswinservice.exe local -c <Pathto>local_config.json "
Hay otras formas de instalar sswinservice
como servicio de Windows, por ejemplo, el comando sc
.
Como habrás notado, -BinaryPathName
contiene no solo sswinservice.exe
, sino también local -c local_config.json
. Estos parámetros de línea de comando se utilizarán como parámetro predeterminado cuando se inicie el servicio de Windows. También puede iniciar el servicio con parámetros personalizados.
Obtenga más información en el documento de Microsoft.
El parámetro de sswinservice
funciona exactamente igual que ssservice
. Admite subcomandos local
, server
y 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 administración de múltiples usuarios admitida:
add
: inicia una instancia de servidorremove
: elimina una instancia de servidor existentelist
: enumera todos los servidores en ejecución actualmenteping
: enumera los datos estadísticos de todos los servidores NOTA: el comando stat
no es compatible. Porque los servidores se ejecutan en el mismo proceso que el propio administrador.
# 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 la interfaz de usuario del administrador, consulte más detalles en el proyecto Shadowsocks-Manager.
Configuración de ejemplo:
{
// 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 ,