นี่คือท่าเรือแห่งถุงเท้าเงา
shadowsocks เป็นพร็อกซีช่องสัญญาณที่รวดเร็วซึ่งช่วยให้คุณข้ามไฟร์วอลล์ได้
ห้องสมุด | คำอธิบาย |
---|---|
ถุงเท้าเงา | โปรโตคอลหลักของ shadowsocks |
shadowsocks-บริการ | บริการเสิร์ฟถุงเท้าเงา |
shadowsocks-สนิม | ไบนารีที่ใช้บริการ Shadowsocks ทั่วไป |
โครงการที่เกี่ยวข้อง:
sslocal
โดยใช้ GTK การสนทนาsslocal
การสนทนา hickory-dns
- ใช้ hickory-resolver
เป็นตัวแก้ไข DNS แทนที่จะเป็นบิวด์อินของ tokio
local-http
- อนุญาตให้ใช้โปรโตคอล HTTP สำหรับ sslocal
local-http-native-tls
- รองรับ HTTPS ด้วย native-tls
local-http-rustls
- รองรับ HTTPS ด้วย rustls
local-tunnel
- อนุญาตให้ใช้โปรโตคอลทันเนลสำหรับ sslocal
local-socks4
- อนุญาตให้ใช้โปรโตคอล SOCKS4/4a สำหรับ sslocal
local-redir
- อนุญาตให้ใช้โปรโตคอล redir (พร็อกซีแบบโปร่งใส) สำหรับ sslocal
local-dns
- อนุญาตให้ใช้โปรโตคอล DNS สำหรับ sslocal
ทำหน้าที่เป็นเซิร์ฟเวอร์ DNS ทำการสืบค้นพร็อกซีไปยังเซิร์ฟเวอร์ DNS ภายในหรือระยะไกลตามกฎ ACL
local-fake-dns
- FakeDNS จัดสรรที่อยู่ IP สำหรับการค้นหาแต่ละรายการจากกลุ่ม IP เฉพาะ
local-tun
- รองรับอินเทอร์เฟซ TUN สำหรับ sslocal
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 ทั่วทั้งระบบตามค่าเริ่มต้น ใช้ vendored จากแหล่งที่มากับ tcmalloc-vendored
snmalloc
- ใช้ snmalloc เป็นตัวจัดสรรหน่วยความจำส่วนกลางrpmalloc
- ใช้ rpmalloc เป็นตัวจัดสรรหน่วยความจำส่วนกลางติดตั้งจาก crates.io:
# Install from crates.io
cargo install shadowsocks-rust
จากนั้นคุณจะพบ sslocal
และ ssserver
ใน $CARGO_HOME/bin
สำหรับ 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 (ยืดออก), GLIBC 2.18build-docker
: สร้างสำหรับ x86_64-unknown-linux-musl
, x86_64-pc-windows-gnu
, ... (เชื่อมโยงแบบคงที่) โปรเจ็กต์นี้จัดเตรียมอิมเมจ Docker สำหรับสถาปัตยกรรม linux/i386
และ linux/amd64
และ linux/arm64/v8
คอนเทนเนอร์นักเทียบท่าไม่สามารถเข้าถึง IPv6 ตามค่าเริ่มต้น : ตรวจสอบให้แน่ใจว่าได้ปิดการใช้งานเส้นทาง IPv6 ในไคลเอนต์หรือเปิดใช้งานการเข้าถึง IPv6 ไปยังคอนเทนเนอร์นักเทียบท่า
นักเทียบท่าจะดึงภาพของสถาปัตยกรรมที่เหมาะสมจากแพ็คเกจ 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
โปรเจ็กต์นี้จัดให้มีไฟล์ Manifest yaml สำหรับการปรับใช้กับ Kubernetes
คุณสามารถใช้ประโยชน์จากบริการ k8s เพื่อเปิดเผยการรับส่งข้อมูลภายนอก เช่น LoadBalancer หรือ NodePort ซึ่งมีความละเอียดมากขึ้นเมื่อเทียบกับโฮสต์หรือพอร์ตแบบคงที่
สำหรับกรณีการใช้งานที่น่าสนใจยิ่งขึ้น คุณสามารถใช้ Ingress (Istio, nginx ฯลฯ) ซึ่งกำหนดเส้นทางการรับส่งข้อมูลที่ตรงกันไปยัง shadowsocks พร้อมกับบริการเว็บจริง
kubectl
kubectl apply -f https://github.com/shadowsocks/shadowsocks-rust/raw/master/k8s/shadowsocks-rust.yaml
คุณสามารถเปลี่ยนการกำหนดค่าผ่านการแก้ไข ConfigMap ชื่อ shadowsocks-rust
เพื่อการควบคุมที่ละเอียดยิ่งขึ้น ให้ใช้ 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)/
debug|release)/ ซึ่งทำงานคล้ายกับไบนารีสองตัวในการใช้งาน ShadowSocks อย่างเป็นทางการ
make install TARGET=release
จากนั้น sslocal
, ssserver
, ssmanager
และ ssurl
จะถูกติดตั้งไปที่ /usr/local/bin
(ตัวแปร PREFIX)
สำหรับผู้ใช้ Windows หากคุณประสบปัญหาใด ๆ ในการสร้าง ตรวจสอบและหารือใน #102
หากคุณกำลังสร้างสำหรับแพลตฟอร์ม CPU ปัจจุบันของคุณ (เช่น สร้างและรันบนคอมพิวเตอร์ส่วนบุคคลของคุณ) ขอแนะนำให้ตั้งค่าคุณสมบัติ target-cpu=native
เพื่อให้ rustc
สร้างและปรับโค้ดให้เหมาะสมสำหรับ CPU ที่รันคอมไพเลอร์
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 (ลิงก์ไปยังโครงการดั้งเดิม ไม่ได้รับการดูแลอีกต่อไป!)
สำหรับการติดตั้งแบบ snap ไฟล์การกำหนดค่าส่วนใหญ่น่าจะอยู่ใน /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 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 "
พารามิเตอร์ทั้งหมดเหมือนกับไคลเอนต์ Socks5 ยกเว้น --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
เปิดใช้งานโหมดอุโมงค์ไคลเอนต์ในเครื่อง-f "127.0.0.1:8080
ตั้งค่าที่อยู่เป้าหมายช่องสัญญาณหมายเหตุ : ขณะนี้รองรับเฉพาะเท่านั้น
iptables
REDIRECT
และ TPROXY
)pf
) เช่น 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 "
เปลี่ยนเส้นทางการเชื่อมต่อด้วยการกำหนดค่า iptables
ไปยังพอร์ตที่ sslocal
กำลังรับฟังอยู่
--protocol redir
เปิดใช้งานโหมด Redir ไคลเอ็นต์ในเครื่อง--tcp-redir
ตั้งค่าโหมด TCP เป็น REDIRECT
(Linux)--udp-redir
ตั้งค่าโหมด UDP เป็น TPROXY
(Linux)หมายเหตุ : ขณะนี้รองรับเฉพาะเท่านั้น
สร้างอินเทอร์เฟซ Tun ด้วยชื่อ tun0
ip tuntap add mode tun tun0
ifconfig tun0 inet 10.255.0.1 netmask 255.255.255.0 up
เริ่มต้น sslocal
ด้วย --protocol tun
และผูกกับ 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
มันจะสร้างอินเทอร์เฟซ Tun พร้อมที่อยู่ 10.255.0.1
และ netmask 255.255.255.0
ดาวน์โหลด wintun.dll
จาก Wintun และวางไว้ในโฟลเดอร์ที่มีไบนารีที่รันได้ของ 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 Service เช่น คำสั่ง 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
}
}
ไฟล์การกำหนดค่าถูกตั้งค่าโดย socks5_auth_config_path
ใน locals
{
// 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 บังคับให้ใช้บิวด์อินของระบบ ( getaddrinfo
ใน *NIX) 2022-blake3-aes-128-gcm
, 2022-blake3-aes-256-gcm
2022-blake3-chacha20-poly1305
, 2022-blake3-chacha8-poly1305
Cipher เหล่านี้จำเป็นต้องมี "password"
เพื่อเป็นสตริง Base64 ของคีย์ที่มี ความยาวเท่ากันทุกประการ กับขนาดคีย์ของ Cipher ขอแนะนำให้ใช้ 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
รองรับไฟล์ ACL ด้วยไวยากรณ์เช่น shadowsocks-libev ตัวอย่างบางส่วนสามารถพบได้ที่นี่
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
ใช้สำหรับการเข้ารหัสและถอดรหัส URL ของ ShadowSocks (SIP002) ตัวอย่าง: ss://[email protected]:8388/?plugin=obfs-local%3Bobfs%3Dhttp%3Bobfs-host%3Dwww.baidu.com
รองรับคุณสมบัติดังต่อไปนี้:
libcrypto
(รอการใช้งาน Rust crypto lib ที่ยอมรับได้) rustc
ที่มั่นคงcrypto2
)ใบอนุญาต MIT (MIT)
ลิขสิทธิ์ (c) 2014 YT CHUNG
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.