هذا هو ميناء الظلال.
Shadowsocks هو وكيل نفق سريع يساعدك على تجاوز جدران الحماية.
مكتبة | وصف |
---|---|
com.shadowsocks | بروتوكول Shadowsocks الأساسي |
com.shadowsocks-service | خدمات لخدمة 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 على مستوى النظام بشكل افتراضي، استخدم بائع من المصدر مع tcmalloc-vendored
.snmalloc
- يستخدم snmalloc كمخصص للذاكرة العامةrpmalloc
- يستخدم rpmalloc كمخصص للذاكرة العامةالتثبيت من صناديق.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 (Stretch)، GLIBC 2.18build-docker
: إنشاء لـ x86_64-unknown-linux-musl
، x86_64-pc-windows-gnu
، ... (مرتبط بشكل ثابت) قدم هذا المشروع صور Docker لمعماريات linux/i386
و linux/amd64
و linux/arm64/v8
.
⚠️ لا تتمتع حاويات Docker بإمكانية الوصول إلى IPv6 بشكل افتراضي : تأكد من تعطيل مسار IPv6 في العميل أو تمكين وصول 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
قدم هذا المشروع بيانات 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 "
استخدام البضائع للبناء. ملاحظة: ذاكرة الوصول العشوائي>= 2 جيجا بايت
cargo build --release
ثم سيظهر sslocal
و ssserver
في ./target/(debug|release)/
، ويعملان بشكل مشابه للثنائيين في تطبيق ShadowSocks الرسمي.
make install TARGET=release
بعد ذلك سيتم تثبيت sslocal
و ssserver
و ssmanager
و ssurl
على /usr/local/bin
(بادئة متغيرة).
بالنسبة لمستخدمي Windows، إذا واجهت أي مشكلة في البناء، راجع وناقش في رقم 102.
إذا كنت تقوم بالإنشاء لمنصة وحدة المعالجة المركزية الحالية لديك (على سبيل المثال، الإنشاء والتشغيل على جهاز الكمبيوتر الشخصي الخاص بك)، فمن المستحسن تعيين ميزة target-cpu=native
للسماح rustc
بإنشاء التعليمات البرمجية وتحسينها لوحدة المعالجة المركزية التي تقوم بتشغيل المترجم.
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 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
وقناع الشبكة 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 " <Pathto>sswinservice.exe local -c <Pathto>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 "
دعم إدارة واجهة برمجة تطبيقات المستخدمين المتعددين:
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 '
بالنسبة لواجهة مستخدم المدير، تحقق من المزيد من التفاصيل في مشروع 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 ,