Ceci est un portage de shadowsocks.
shadowsocks est un proxy tunnel rapide qui vous aide à contourner les pare-feu.
Bibliothèque | Description |
---|---|
chaussettes d'ombre | protocole principal de shadowsocks |
service shadowsocks | Services pour servir des shadowsocks |
shadowsocks-rouille | Binaires exécutant des services shadowsocks communs |
Projets connexes :
sslocal
utilisant GTK, discussionsslocal
, discussion hickory-dns
- Utilise hickory-resolver
comme résolveur DNS au lieu du résolveur intégré de tokio
.
local-http
- Autoriser l'utilisation du protocole HTTP pour sslocal
local-http-native-tls
- Prise en charge de HTTPS avec native-tls
local-http-rustls
- Prise en charge de HTTPS avec rustls
local-tunnel
- Autoriser l'utilisation du protocole de tunnel pour sslocal
local-socks4
- Autoriser l'utilisation du protocole SOCKS4/4a pour sslocal
local-redir
- Autoriser l'utilisation du protocole redir (proxy transparent) pour sslocal
local-dns
- Autoriser l'utilisation du protocole DNS pour sslocal
, sert de serveur DNS proxy des requêtes vers des serveurs DNS locaux ou distants par des règles ACL
local-fake-dns
- FakeDNS, attribuant une adresse IP pour chaque requête individuelle à partir d'un pool IP spécifique
local-tun
- Prise en charge de l'interface TUN pour sslocal
local-online-config
- Livraison de configuration en ligne SIP008
stream-cipher
- Active les chiffrements de flux obsolètes. AVERTISSEMENT : les chiffrements de flux ne sont PAS SÉCURISÉS !
aead-cipher-extra
- Activer les chiffrements AEAD non standard
aead-cipher-2022
- Activer les chiffrements AEAD-2022 (SIP022)
aead-cipher-2022-extra
- Activer les chiffrements supplémentaires AEAD-2022 (chiffrements non standard)
Ce projet utilise l'allocateur de mémoire système (libc) (valeur par défaut de Rust). Mais il vous permet également d'utiliser d'autres allocateurs célèbres par fonctionnalités :
jemalloc
- Utilise jemalloc comme allocateur de mémoire globalmimalloc
- Utilise mi-malloc comme allocateur de mémoire globaltcmalloc
- Utilise TCMalloc comme allocateur de mémoire global. Il essaie de lier tcmalloc à l'échelle du système par défaut, en utilisant le fournisseur à partir des sources avec tcmalloc-vendored
.snmalloc
- Utilise snmalloc comme allocateur de mémoire globalrpmalloc
- Utilise rpmalloc comme allocateur de mémoire globalInstaller depuis crates.io :
# Install from crates.io
cargo install shadowsocks-rust
alors vous pouvez trouver sslocal
et ssserver
dans $CARGO_HOME/bin
.
Pour macOS et Linux, vous pouvez l'installer à l'aide de 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
Téléchargez la version à lien statique ici.
build-windows
: Build pour x86_64-pc-windows-msvc
build-linux
: Build pour x86_64-unknown-linux-gnu
, Debian 9 (Stretch), GLIBC 2.18build-docker
: Build pour x86_64-unknown-linux-musl
, x86_64-pc-windows-gnu
, ... (lié statiquement) Ce projet a fourni des images Docker pour les architectures linux/i386
et linux/amd64
et linux/arm64/v8
.
⚠️ Les conteneurs Docker n'ont pas accès à IPv6 par défaut : assurez-vous de désactiver la route IPv6 dans le client ou d'activer l'accès IPv6 aux conteneurs Docker.
Docker extraira l'image de l'architecture appropriée de nos packages GitHub.
docker pull ghcr.io/shadowsocks/sslocal-rust:latest
docker pull ghcr.io/shadowsocks/ssserver-rust:latest
Si vous souhaitez créer vous-même l'image Docker, vous devez utiliser 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 .
Vous devez monter le fichier de configuration dans le conteneur et créer une carte de port externe pour que le conteneur puisse s'y connecter.
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
Ce projet a fourni des manifestes yaml pour le déploiement sur Kubernetes.
Vous pouvez tirer parti du service k8s pour exposer le trafic à l'extérieur, comme LoadBalancer ou NodePort, qui gagne en précision par rapport à un hôte ou un port fixe.
Pour un cas d'utilisation plus intéressant, vous pouvez utiliser un Ingress (Istio, nginx, etc.) qui achemine le trafic correspondant vers shadowsocks avec le vrai service Web.
kubectl
kubectl apply -f https://github.com/shadowsocks/shadowsocks-rust/raw/master/k8s/shadowsocks-rust.yaml
Vous pouvez modifier la configuration en éditant le ConfigMap nommé shadowsocks-rust
.
Pour un contrôle plus précis, utilisez helm
.
helm
helm install my-release k8s/chart -f my-values.yaml
Vous trouverez ci-dessous les valeurs par défaut courantes que vous pouvez modifier :
# 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 "
Utilisez la cargaison pour construire. REMARQUE : RAM >= 2 Gio
cargo build --release
Ensuite, sslocal
et ssserver
apparaîtront dans ./target/(debug|release)/
, cela fonctionne de la même manière que les deux binaires dans l'implémentation officielle de ShadowSocks.
make install TARGET=release
Ensuite, sslocal
, ssserver
, ssmanager
et ssurl
seront installés dans /usr/local/bin
(variable PREFIX).
Pour les utilisateurs de Windows, si vous avez rencontré un problème lors de la construction, vérifiez et discutez-en au point 102.
Si vous construisez pour votre plate-forme CPU actuelle (par exemple, construisez et exécutez sur votre ordinateur personnel), il est recommandé de définir la fonctionnalité target-cpu=native
pour permettre rustc
de générer et d'optimiser le code pour le CPU exécutant le compilateur.
export RUSTFLAGS= " -C target-cpu=native "
Exigences:
./build/build-release
Ensuite, sslocal
, ssserver
, ssmanager
et ssurl
seront empaquetés dans
./build/shadowsocks-${VERSION}-stable.x86_64-unknown-linux-musl.tar.xz
./build/shadowsocks-${VERSION}-stable.x86_64-pc-windows-gnu.zip
Lisez Cargo.toml
pour plus de détails.
Générez un mot de passe sûr et sécurisé pour une méthode de cryptage spécifique ( aes-128-gcm
dans l'exemple) avec :
ssservice genkey -m " aes-128-gcm "
Créez un fichier de configuration ShadowSocks. Exemple
{
"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
}
Une explication détaillée du fichier de configuration peut être trouvée dans la documentation de shadowsocks. (Lien vers le projet original, plus maintenu !)
⚠️ Pour les installations instantanées, le fichier de configuration se trouve très probablement dans/var/snap/shadowsocks-rust/common/etc/shadowsocks-rust/config.json
(voir #621 / #1146)
Dans shadowsocks-rust, nous disposons également d'un format de fichier de configuration étendu, capable de définir plusieurs serveurs. Vous pouvez également désactiver des serveurs individuels.
{
"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
sélectionne automatiquement le meilleur serveur avec la latence la plus faible et la disponibilité la plus élevée.
Démarrez le client et le serveur Shadowsocks avec :
sslocal -c config.json
ssserver -c config.json
Si vous le construisez avec Cargo :
cargo run --bin sslocal -- -c config.json
cargo run --bin ssserver -- -c config.json
Répertoriez tous les arguments disponibles avec -h
.
Démarrer le client local avec le fichier de configuration
# 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 "
Tous les paramètres sont les mêmes que ceux du client Socks5, à l'exception de --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
active le mode tunnel du client local-f "127.0.0.1:8080
définit l'adresse cible du tunnelREMARQUE : Il ne prend actuellement en charge que
iptables
REDIRECT
et TPROXY
)pf
), tels que 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 les connexions avec les configurations iptables
vers le port sur lequel sslocal
écoute.
--protocol redir
active le mode Redir du client local--tcp-redir
définit le mode TCP sur REDIRECT
(Linux)--udp-redir
définit le mode UDP sur TPROXY
(Linux)REMARQUE : Il ne prend actuellement en charge que
Créez une interface Tun avec le nom tun0
ip tuntap add mode tun tun0
ifconfig tun0 inet 10.255.0.1 netmask 255.255.255.0 up
Démarrez sslocal
avec --protocol tun
et se lie à 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
Cela créera une interface Tun avec l'adresse 10.255.0.1
et le masque de réseau 255.255.255.0
.
Téléchargez wintun.dll
depuis Wintun et placez-le dans le dossier contenant les binaires exécutables de shadowsocks, ou dans le PATH du système.
sslocal -- protocol tun - s " [::1]:8388 " - m " aes-256-gcm " - k " hello-kitty " -- outbound - bind - interface " Ethernet 0 " -- tun - interface - name " shadowsocks "
Compilez-le en activant --features "winservice"
(non inclus dans la version par défaut) :
cargo build --release --bin " sswinservice " --features " winservice "
Installez-le en tant que service Windows (PowerShell) :
New-Service - Name " shadowsocks-local-service " `
- DisplayName " Shadowsocks Local Service " `
- BinaryPathName " <Pathto>sswinservice.exe local -c <Pathto>local_config.json "
Il existe d'autres moyens d'installer sswinservice
en tant que service Windows, par exemple la commande sc
.
Comme vous l'avez peut-être remarqué, le -BinaryPathName
contient non seulement le sswinservice.exe
, mais aussi local -c local_config.json
. Ces paramètres de ligne de commande seront utilisés comme paramètre par défaut au démarrage du service Windows. Vous pouvez également démarrer le service avec des paramètres personnalisés.
Apprenez-en davantage dans le document de Microsoft.
Le paramètre sswinservice
fonctionne exactement de la même manière que ssservice
. Il prend en charge les sous-commandes local
, server
et 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 gestion de plusieurs utilisateurs prise en charge :
add
- Démarre une instance de serveurremove
- Supprime une instance de serveur existantelist
- Répertorie tous les serveurs en cours d'exécutionping
- Répertorie les données statistiques de tous les serveurs REMARQUE : la commande stat
n'est pas prise en charge. Parce que les serveurs s'exécutent selon le même processus que le gestionnaire lui-même.
# 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 '
Pour l'interface utilisateur du gestionnaire, vérifiez plus de détails dans le projet shadowsocks-manager.
Exemple de configuration :
{
// 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 ,