이것은 Shadowsocks의 항구입니다.
Shadowsocks는 방화벽을 우회하는 데 도움이 되는 빠른 터널 프록시입니다.
도서관 | 설명 |
---|---|
그림자 양말 | Shadowsocks 핵심 프로토콜 |
섀도우삭스 서비스 | Shadowsock 제공 서비스 |
그림자 양말 - 녹 | 일반적인 Shadowsocks 서비스를 실행하는 바이너리 |
관련 프로젝트:
sslocal
용 Linux GUI, 토론sslocal
용 OpenWRT 솔루션, 토론 hickory-dns
- tokio
의 내장 기능 대신 hickory-resolver
DNS 해석기로 사용합니다.
local-http
- sslocal
에 HTTP 프로토콜 사용을 허용합니다.
local-http-native-tls
- native-tls
로 HTTPS 지원
local-http-rustls
- rustls
로 HTTPS 지원
local-tunnel
- sslocal
에 대한 터널 프로토콜 사용을 허용합니다.
local-socks4
- sslocal
에 SOCKS4/4a 프로토콜 사용을 허용합니다.
local-redir
- sslocal
에 redir(투명 프록시) 프로토콜 사용을 허용합니다.
local-dns
- sslocal
에 대한 DNS 프로토콜 사용을 허용하고 ACL 규칙에 따라 로컬 또는 원격 DNS 서버에 대한 쿼리를 프록시하는 DNS 서버 역할을 합니다.
local-fake-dns
- 특정 IP 풀에서 각 개별 쿼리에 대한 IP 주소를 할당하는 FakeDNS
local-tun
- sslocal
에 대한 TUN 인터페이스 지원
local-online-config
- SIP008 온라인 구성 전달
stream-cipher
- 더 이상 사용되지 않는 스트림 암호를 활성화합니다. 경고: 스트림 암호는 안전하지 않습니다!
aead-cipher-extra
- 비표준 AEAD 암호 활성화
aead-cipher-2022
- AEAD-2022 암호 활성화(SIP022)
aead-cipher-2022-extra
- AEAD-2022 추가 암호 활성화(비표준 암호)
이 프로젝트는 시스템(libc) 메모리 할당자(Rust의 기본값)를 사용합니다. 그러나 기능별로 다른 유명한 할당자를 사용할 수도 있습니다.
jemalloc
- 전역 메모리 할당자로 jemalloc을 사용합니다.mimalloc
- 전역 메모리 할당자로 mi-malloc을 사용합니다.tcmalloc
- TCMalloc을 전역 메모리 할당자로 사용합니다. 기본적으로 시스템 전체의 tcmalloc 연결을 시도하고, tcmalloc-vendored
와 함께 소스에서 Vendored를 사용합니다.snmalloc
- snmalloc을 전역 메모리 할당자로 사용합니다.rpmalloc
- rpmalloc을 전역 메모리 할당자로 사용합니다.crates.io에서 설치:
# Install from crates.io
cargo install shadowsocks-rust
$CARGO_HOME/bin
에서 sslocal
및 ssserver
찾을 수 있습니다.
macOS 및 Linux의 경우 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
여기에서 정적 링크 빌드를 다운로드하세요.
build-windows
: x86_64-pc-windows-msvc
용 빌드build-linux
: x86_64-unknown-linux-gnu
, Debian 9(Stretch), GLIBC 2.18용 빌드build-docker
: x86_64-unknown-linux-musl
, x86_64-pc-windows-gnu
, ...용 빌드(정적으로 링크됨) 이 프로젝트는 linux/i386
, linux/amd64
및 linux/arm64/v8
아키텍처용 Docker 이미지를 제공했습니다.
⚠️ Docker 컨테이너는 기본적으로 IPv6에 액세스할 수 없습니다 . 클라이언트에서 IPv6 경로를 비활성화하거나 Docker 컨테이너에 대한 IPv6 액세스를 활성화해야 합니다.
Docker는 GitHub 패키지에서 적절한 아키텍처의 이미지를 가져옵니다.
docker pull ghcr.io/shadowsocks/sslocal-rust:latest
docker pull ghcr.io/shadowsocks/ssserver-rust:latest
Docker 이미지를 직접 빌드하려면 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 .
구성 파일을 컨테이너에 탑재하고 컨테이너가 연결할 외부 포트 맵을 생성해야 합니다.
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
이 프로젝트는 Kubernetes에 배포하기 위한 yaml 매니페스트를 제공했습니다.
k8s 서비스를 활용하여 고정 호스트나 포트에 비해 더 세분화된 LoadBalancer 또는 NodePort와 같은 외부 트래픽을 노출할 수 있습니다.
보다 흥미로운 사용 사례를 위해 일치하는 트래픽을 실제 웹 서비스와 함께 Shadowsock으로 라우팅하는 Ingress(Istio, nginx 등)를 사용할 수 있습니다.
kubectl
사용 kubectl apply -f https://github.com/shadowsocks/shadowsocks-rust/raw/master/k8s/shadowsocks-rust.yaml
shadowsocks-rust
라는 ConfigMap을 편집하여 구성을 변경할 수 있습니다.
보다 세밀하게 제어하려면 helm
사용하세요.
helm
사용 helm install my-release k8s/chart -f my-values.yaml
변경할 수 있는 일반적인 기본값은 다음과 같습니다.
# 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 "
화물을 사용하여 건설하세요. 참고: RAM >= 2GiB
cargo build --release
그러면 sslocal
및 ssserver
./target/(debug|release)/
에 나타나며 공식 ShadowSocks 구현의 두 바이너리와 유사하게 작동합니다.
make install TARGET=release
그런 다음 sslocal
, ssserver
, ssmanager
및 ssurl
/usr/local/bin
(변수 PREFIX)에 설치됩니다.
Windows 사용자의 경우, 구축 시 문제가 발생하는 경우 #102를 확인하고 논의하시기 바랍니다.
현재 CPU 플랫폼용으로 빌드하는 경우(예: 개인용 컴퓨터에서 빌드 및 실행), rustc
가 컴파일러를 실행하는 CPU용 코드를 생성하고 최적화할 수 있도록 target-cpu=native
기능을 설정하는 것이 좋습니다.
export RUSTFLAGS= " -C target-cpu=native "
요구사항:
./build/build-release
그런 다음 sslocal
, ssserver
, ssmanager
및 ssurl
이 패키지됩니다.
./build/shadowsocks-${VERSION}-stable.x86_64-unknown-linux-musl.tar.xz
./build/shadowsocks-${VERSION}-stable.x86_64-pc-windows-gnu.zip
자세한 내용은 Cargo.toml
읽어보세요.
다음을 사용하여 특정 암호화 방법(예: aes-128-gcm
)에 대해 안전하고 보안이 유지되는 비밀번호를 생성합니다.
ssservice genkey -m " aes-128-gcm "
ShadowSocks의 구성 파일을 만듭니다. 예
{
"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
}
구성 파일에 대한 자세한 설명은 Shadowsocks 문서에서 찾을 수 있습니다. (원래 프로젝트에 대한 링크, 더 이상 유지되지 않음!)
⚠️ 스냅 설치의 경우 구성 파일은/var/snap/shadowsocks-rust/common/etc/shadowsocks-rust/config.json
에 있을 가능성이 높습니다(#621 / #1146 참조).
Shadowsocks-rust에는 둘 이상의 서버를 정의할 수 있는 확장 구성 파일 형식도 있습니다. 개별 서버를 비활성화할 수도 있습니다.
{
"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
대기 시간이 가장 짧고 가용성이 가장 높은 최상의 서버를 자동으로 선택합니다.
다음을 사용하여 Shadowsocks 클라이언트 및 서버를 시작합니다.
sslocal -c config.json
ssserver -c config.json
Cargo로 빌드하는 경우:
cargo run --bin sslocal -- -c config.json
cargo run --bin ssserver -- -c config.json
-h
사용하여 사용 가능한 모든 인수를 나열합니다.
구성 파일을 사용하여 로컬 클라이언트 시작
# 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 "
--protocol http
제외하고 모든 매개변수는 Socks5 클라이언트와 동일합니다.
# 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
로컬 클라이언트 터널 모드를 활성화합니다.-f "127.0.0.1:8080
터널 대상 주소를 설정합니다.참고 : 현재는
iptables
대상 REDIRECT
및 TPROXY
사용)pf
포함) 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 "
iptables
구성과의 연결을 sslocal
수신 대기 중인 포트로 리디렉션합니다.
--protocol redir
로컬 클라이언트 Redir 모드를 활성화합니다.--tcp-redir
TCP 모드를 REDIRECT
(Linux)로 설정합니다.--udp-redir
UDP 모드를 TPROXY
(Linux)로 설정합니다.참고 : 현재는
이름이 tun0
인 Tun 인터페이스를 만듭니다.
ip tuntap add mode tun tun0
ifconfig tun0 inet 10.255.0.1 netmask 255.255.255.0 up
--protocol tun
사용하여 sslocal
시작하고 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
주소가 10.255.0.1
이고 넷마스크가 255.255.255.0
인 Tun 인터페이스가 생성됩니다.
Wintun에서 wintun.dll
다운로드하고 Shadowsocks의 실행 가능한 바이너리가 있는 폴더나 시스템 PATH에 넣습니다.
sslocal -- protocol tun - s " [::1]:8388 " - m " aes-256-gcm " - k " hello-kitty " -- outbound - bind - interface " Ethernet 0 " -- tun - interface - name " shadowsocks "
--features "winservice"
활성화하여 컴파일합니다(기본 빌드에는 포함되지 않음).
cargo build --release --bin " sswinservice " --features " winservice "
Windows 서비스(PowerShell)로 설치합니다.
New-Service - Name " shadowsocks-local-service " ` - DisplayName " Shadowsocks Local Service " ` - BinaryPathName "sswinservice.exe local -c local_config.json "
sswinservice
Windows 서비스로 설치하는 다른 방법(예: sc
명령)이 있습니다.
-BinaryPathName
에는 sswinservice.exe
뿐만 아니라 local -c local_config.json
도 포함되어 있음을 알 수 있습니다. 이러한 명령줄 매개변수는 Windows 서비스가 시작될 때 기본 매개변수로 사용됩니다. 사용자 정의된 매개변수를 사용하여 서비스를 시작할 수도 있습니다.
Microsoft 문서에서 자세히 알아보세요.
sswinservice
의 매개변수는 ssservice
와 정확히 동일하게 작동합니다. local
, server
및 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:
add
- 서버 인스턴스를 시작합니다.remove
- 기존 서버 인스턴스를 삭제합니다.list
- 현재 실행 중인 모든 서버를 나열합니다.ping
- 모든 서버의 통계 데이터를 나열합니다. 참고: stat
명령은 지원되지 않습니다. 서버는 관리자 자체와 동일한 프로세스에서 실행되기 때문입니다.
# 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 '
관리자 UI에 대한 자세한 내용은 Shadowsocks-manager 프로젝트에서 확인하세요.
예시 구성:
{
// 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
}
}
구성 파일은 locals
의 socks5_auth_config_path
에 의해 설정됩니다.
{
// Password/Username Authentication (RFC1929)
"password" : {
"users" : [
{
"user_name" : "USERNAME in UTF-8" ,
"password" : "PASSWORD in UTF-8"
}
]
}
}
SS_SERVER_PASSWORD
: 명령줄 인수( --server-addr
)에서 생성된 서버의 기본 비밀번호SS_SYSTEM_DNS_RESOLVER_FORCE_BUILTIN
: "system"
DNS 확인자 강제 사용 시스템 내장(*NIX의 getaddrinfo
) 2022-blake3-aes-128-gcm
, 2022-blake3-aes-256-gcm
2022-blake3-chacha20-poly1305
, 2022-blake3-chacha8-poly1305
이러한 암호에는 암호의 키 크기와 정확히 동일한 길이를 갖는 Base64 키 문자열인 "password"
가 필요합니다. 안전하고 안전한 키를 생성하려면 ssservice genkey -m "METHOD_NAME"
사용하는 것이 좋습니다.
chacha20-ietf-poly1305
aes-128-gcm
, aes-256-gcm
plain
또는 none
(암호화 없음, 디버깅에만 사용되거나 전송 보안을 보장하는 플러그인에만 사용됨)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
및 ssmanager
Shadowsocks-libev와 같은 구문을 사용하여 ACL 파일을 지원합니다. 몇 가지 예는 여기에서 찾을 수 있습니다.
sslocal
, ssredir
, ...)[bypass_all]
- ACL은 BlackList
모드에서 실행됩니다. 규칙과 일치하지 않는 모든 주소를 우회합니다.[proxy_all]
- ACL은 WhiteList
모드에서 실행됩니다. 어떤 규칙과도 일치하지 않는 모든 주소를 프록시합니다.[bypass_list]
- 직접 연결 규칙[proxy_list]
- 프록시를 통한 연결 규칙ssserver
)[reject_all]
- ACL은 BlackList
모드에서 실행됩니다. 규칙과 일치하지 않는 모든 클라이언트를 거부합니다.[accept_all]
- ACL은 WhiteList
모드에서 실행됩니다. 규칙과 일치하지 않는 모든 클라이언트를 허용합니다.[white_list]
- 허용된 클라이언트에 대한 규칙[black_list]
- 거부된 클라이언트에 대한 규칙[outbound_block_list]
- 아웃바운드 주소를 차단하는 규칙입니다. # 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
ShadowSocks URL(SIP002)을 인코딩 및 디코딩하기 위한 것입니다. 예: ss://[email protected]:8388/?plugin=obfs-local%3Bobfs%3Dhttp%3Bobfs-host%3Dwww.baidu.com
다음 기능을 지원합니다.
libcrypto
에 의존하지 않고 더 많은 암호 지원(허용 가능한 Rust 암호화 lib 구현을 기다리는 중) rustc
로 빌드crypto2
로 차단)MIT 라이센스(MIT)
Copyright (c) 2014 YT 정(YT CHUNG)
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.