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.serviceDescargue la compilación vinculada estáticamente aquí.
build-windows : compilación para x86_64-pc-windows-msvcbuild-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:latestSi 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:latestEste 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.jsonSi 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 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 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 ,