منصة وكيل متعددة الاستخدامات وفعالة للاتصالات الآمنة.
splice(2)
.recvmmsg(2)
و sendmmsg(2)
. تتوفر حزم الإصدار وVCS في AUR:
تحميل من الاصدارات.
قم ببناء أحدث إصدار وتثبيته باستخدام Go:
go install github.com/database64128/shadowsocks-go/cmd/shadowsocks-go@latest
go install github.com/database64128/shadowsocks-go/cmd/shadowsocks-go-domain-set-converter@latest
أو قم باستنساخ المستودع وإنشائه يدويًا:
go build -trimpath -ldflags ' -s -w ' ./cmd/shadowsocks-go
go build -trimpath -ldflags ' -s -w ' ./cmd/shadowsocks-go-domain-set-converter
يمكن العثور على جميع أمثلة التكوين وملفات وحدة systemd في دليل المستندات.
يمكن حذف حقل clients
أو تركه فارغًا. ستتم إضافة العميل "المباشر" الافتراضي تلقائيًا.
على خوادم الإنتاج، قد ترغب في تعيين udpRelayBatchSize
على قيمة أقل مثل 8 لتقليل استخدام الذاكرة مع الاستمرار في الاستفادة من recvmmsg(2)
و sendmmsg(2)
.
قد يتم تعبئة حزم UDP حتى الحد الأقصى لحجم الحزمة المحسوب من mtu
. إذا كان من الممكن استخدام الخادم من اتصال PPPoE، فيجب تقليل mtu
إلى 1492. إذا كان PMTU من عميل إلى خادم غير معروف، فيمكن تعطيل الحشو تمامًا عن طريق تعيين paddingPolicy
على NoPadding
.
بالنسبة للخوادم التي لا تحتوي على أي PSKs للمستخدم (وضع المستخدم الفردي)، يحدد الحقل psk
PSK، ويمكن حذف حقل uPSKStorePath
أو تركه فارغًا. عند تحديد PSK واحد أو أكثر للمستخدم في ملف مخزن uPSK، يحدد الحقل psk
هوية PSK.
لإضافة/تحديث/إزالة المستخدمين دون إعادة تشغيل الخادم، قم بتعديل ملف متجر uPSK وأرسل إشارة SIGUSR1
إلى عملية الخادم، أو استخدم RESTful API. سيتم حفظ التحديثات من RESTful API في ملف متجر uPSK تلقائيًا.
/etc/shadowsocks-go/config.json
{
"servers" : [
{
"name" : " ss-2022 " ,
"listen" : " :20220 " ,
"protocol" : " 2022-blake3-aes-128-gcm " ,
"enableTCP" : true ,
"listenerTFO" : true ,
"enableUDP" : true ,
"mtu" : 1500 ,
"psk" : " qQln3GlVCZi5iJUObJVNCw== " ,
"uPSKStorePath" : " /etc/shadowsocks-go/upsks.json "
}
]
}
/etc/shadowsocks-go/upsks.json
{
"Steve" : " oE/s2z9Q8EWORAB8B3UCxw== " ,
"Alex" : " hWXLOSW/r/LtNKynrA3S8Q== "
}
افتراضيًا، يستخدم جهاز التوجيه خادم DNS الذي تم تكوينه لحل أسماء النطاقات ومطابقة قواعد IP. يتم استخدام عناوين IP التي تم حلها فقط لمطابقة قواعد IP. يتم تقديم الطلبات باستخدام اسم المجال الأصلي. لتعطيل مطابقة قاعدة IP لأسماء النطاقات، قم بتعيين disableNameResolutionForIPRules
على true.
{
"servers" : [
{
"name" : " socks5 " ,
"listen" : " :1080 " ,
"protocol" : " socks5 " ,
"enableTCP" : true ,
"listenerTFO" : true ,
"enableUDP" : true ,
"mtu" : 1500
},
{
"name" : " http " ,
"listen" : " :8080 " ,
"protocol" : " http " ,
"enableTCP" : true ,
"listenerTFO" : true
}
],
"clients" : [
{
"name" : " ss-2022 " ,
"protocol" : " 2022-blake3-aes-128-gcm " ,
"endpoint" : " [2001:db8:bd63:362c:2071:a0f6:827:ab6a]:20220 " ,
"enableTCP" : true ,
"dialerTFO" : true ,
"enableUDP" : true ,
"mtu" : 1500 ,
"psk" : " oE/s2z9Q8EWORAB8B3UCxw== " ,
"iPSKs" : [
" qQln3GlVCZi5iJUObJVNCw== "
]
},
{
"name" : " direct " ,
"protocol" : " direct " ,
"enableTCP" : true ,
"dialerTFO" : true ,
"enableUDP" : true ,
"mtu" : 1500
}
],
"dns" : [
{
"name" : " cf-v6 " ,
"addrPort" : " [2606:4700:4700::1111]:53 " ,
"tcpClientName" : " ss-2022 " ,
"udpClientName" : " ss-2022 "
},
{
"name" : " system " ,
"type" : " system "
}
],
"router" : {
"defaultTCPClientName" : " ss-2022 " ,
"defaultUDPClientName" : " ss-2022 " ,
"geoLite2CountryDbPath" : " /usr/share/shadowsocks-go/Country.mmdb " ,
"domainSets" : [
{
"name" : " category-ads-all " ,
"type" : " gob " ,
"path" : " /usr/share/shadowsocks-go/ss-go-gob-category-ads-all "
},
{
"name" : " private " ,
"type" : " gob " ,
"path" : " /usr/share/shadowsocks-go/ss-go-gob-private "
},
{
"name" : " cn " ,
"type" : " gob " ,
"path" : " /usr/share/shadowsocks-go/ss-go-gob-cn "
},
{
"name" : " geolocation-!cn@cn " ,
"type" : " gob " ,
"path" : " /usr/share/shadowsocks-go/ss-go-gob-geolocation-!cn@cn "
}
],
"routes" : [
{
"name" : " ads " ,
"client" : " reject " ,
"toDomainSets" : [
" category-ads-all "
]
},
{
"name" : " direct " ,
"client" : " direct " ,
"resolver" : " cf-v6 " ,
"toDomainSets" : [
" private " ,
" cn "
],
"toPrefixes" : [
" 0.0.0.0/8 " ,
" 10.0.0.0/8 " ,
" 100.64.0.0/10 " ,
" 127.0.0.0/8 " ,
" 169.254.0.0/16 " ,
" 172.16.0.0/12 " ,
" 192.0.0.0/24 " ,
" 192.0.2.0/24 " ,
" 192.88.99.0/24 " ,
" 192.168.0.0/16 " ,
" 198.18.0.0/15 " ,
" 198.51.100.0/24 " ,
" 203.0.113.0/24 " ,
" 224.0.0.0/3 " ,
" ::1/128 " ,
" fc00::/7 " ,
" fe80::/10 " ,
" ff00::/8 "
],
"toGeoIPCountries" : [
" CN "
]
},
{
"name" : " cn-verify-ip " ,
"client" : " direct " ,
"resolver" : " system " ,
"toDomainSets" : [
" geolocation-!cn@cn "
],
"toMatchedDomainExpectedGeoIPCountries" : [
" CN "
]
}
]
}
}
راجع المستندات/config.json.
لدى Shadowsocks-go تنسيق ملف محدد للمجال الخاص به، لأن التنسيقات الأخرى التي رأيتها كلها فظيعة!
ولا تقلق، فلدينا أداة تحويل بسيطة للتحويل بين التنسيقات المختلفة: Shadowsocks-go-domain-set-converter
يبدأ الملف النصي لمجموعة المجال بشكل اختياري بتعليق تلميح للسعة. يمكن لأداة التحويل إنشاء تلميح للسعة لك تلقائيًا. هناك 4 أنواع من قواعد مطابقة النطاق:
domain:
تطابق المجال.suffix:
تطابق المجال ونطاقاته الفرعية.keyword:
تطابق إذا كان المجال يحتوي على الكلمة الأساسية.regexp:
تطابق إذا كان المجال يطابق التعبير العادي.مثال على ملف نصي لمجموعة المجال:
# shadowsocks-go domain set capacity hint 1 6 1 1 DSKR
domain:www.example.net
suffix:example.com
suffix:github.com
suffix:cube64128.xyz
suffix:api.ipify.org
suffix:api6.ipify.org
suffix:archlinux.org
keyword:dev
regexp:^adservice.google.([a-z]{2}|com?)(.[a-z]{2})?$
عند تحميل ملف نصي لمجموعة مجال، يقوم Shadowsocks-go بتحميل جميع اللواحق كما هي في خريطة واحدة. وهذا يحقق أفضل توازن بين سرعة بدء التشغيل واستخدام الذاكرة وسرعة المطابقة. إذا كنت تريد أداء أفضل، يمكنك استخدام أداة التحويل لتحويل الملف النصي إلى تنسيق gob.
تنسيق gob هو في الأساس نفس الشيء، ولكن يحتوي على كل شيء متسلسل ثنائي ويستخدم محاولة لتخزين اللواحق ومطابقتها. تقوم أداة التحويل بتحميل اللواحق لإنشاء لاحقة ثلاثية، ثم إجراء تسلسل للقواعد الأخرى في ملف gob. أنيق جدا، أليس كذلك؟
بالطبع، أنا لست خبيرًا في الخوارزميات، لذا فإن العملية برمتها لا تزال تعاني من الكثير من أوجه القصور. لكنها جيدة بما فيه الكفاية بالنسبة لي. إذا كان لديك أفكار جديدة رائعة، واسمحوا لي أن أعرف!
يتم تحديث مجموعة من مجموعات النطاق شائعة الاستخدام أسبوعيًا في Shadowsocks-go-domain-sets في فرع الإصدار. يمكن لمستخدمي Arch Linux تثبيت حزمة Shadowsocks-go-domain-sets-git من AUR.
لإنشاء مجموعات النطاقات باستخدام https://github.com/v2fly/domain-list-community كمصدر، قم باستنساخ المستودع وإنشاء المولد، ثم قم بإنشاء قوائم نص عادي:
./domain-list-community -exportlists ' google,netflix '
استخدم shadowsocks-go-domain-set-converter
لتحويل قوائم النص العادي إلى ملفات مجموعة المجال:
shadowsocks-go-domain-set-converter -inDlc google.txt -outGob ss-go-gob-google
shadowsocks-go-domain-set-converter -inDlc netflix.txt -outGob ss-go-gob-netflix
يستخدم Shadowsocks-go قاعدة بيانات MaxMind GeoLite2 Country لتحديد الموقع الجغرافي IP. يمكن تنزيل قاعدة البيانات من https://github.com/Dreamacro/maxmind-geoip. يمكن لمستخدمي Arch Linux تثبيت حزمة Shadowsocks-go-geolite2-country-git من AUR.
يتم تطبيق سياسات تعبئة الحزم لبروتوكول Shadowsocks 2022. تتحكم سياسة حشو الحزم فيما إذا كان سيتم إضافة حشوة إلى الحزم الصادرة أم لا.
عند إضافة الحشو، يتم أخذ وحدة الإرسال الكبرى (MTU) بعين الاعتبار، وبالتالي فإن حجم الحزمة المبطنة لن يتجاوز وحدة الإرسال الكبرى (MTU). لذلك من المهم ضبط MTU بشكل صحيح.
يمكن تكوين سياسة الحشو بشكل فردي لكل عميل وخادم Shadowsocks 2022.
PadPlainDNS
: أضف المساحة المتروكة إذا كان منفذ الوجهة هو 53. (افتراضي)PadAll
: لوحة كافة الحزم.NoPadding
: لا الحشو.يتم تنفيذ سياسات الرفض لجميع خوادم TCP. يتم استدعاء سياسة الرفض لخادم TCP عندما يفشل اتصال مقبول في عملية المصافحة الخاصة بالبروتوكول. كل بروتوكول لديه سياسة الرفض الافتراضية الخاصة به. يمكن أن تكون سياسات الرفض المخصصة مفيدة لخوادم التحايل على الرقابة لتجنب التحقيق النشط.
JustClose
: فقط أغلق الاتصال. (الافتراضي لبروتوكولات النص الواضح)ForceReset
: إعادة ضبط الاتصال بالقوة. تتصرف العديد من البروتوكولات بهذه الطريقة عند تلقي بيانات غير صالحة. (افتراضي لـ Shadowsocks 2022)CloseWriteDrain
: أرسل FIN واستمر في القراءة حتى EOF. هذه هي عادةً الطريقة التي تتعامل بها خوادم Shadowsocks القديمة مع إعادة التشغيل.ReplyWithGibberish
: استمر في القراءة وأرسل البيانات المهملة بشكل عشوائي بعد إرجاع كل قراءة. يحاكي هذا كيفية تصرف خادم Shadowsocks القديم بدون حماية إعادة التشغيل، باستثناء أنه لا يقوم فعليًا بترحيل الحمولة المعاد تشغيلها. يمكن تكوين خادم Shadowsocks 2022 لإعادة توجيه اتصالات TCP إلى عنوان احتياطي عند فشل المصافحة. أضف الحقل unsafeFallbackAddress
إلى كتلة الخادم لتحديد العنوان الاحتياطي. عند بدء التشغيل، ستتم طباعة رسالة تحذيرية لإعلامك بأن استخدام هذه الميزة "يفسد" الخادم. يعمل الإجراء الاحتياطي غير الآمن فقط مع اتصالات TCP.
قد تكون هذه الميزة مفيدة عندما يتضمن نموذج التهديد الخاص بك فقط مهاجمين خارج المسار، وتريد إعادة استخدام المنفذ أو خداع التحقيقات للاعتقاد بأن الخادم شيء آخر. يمكن للمهاجم الموجود على المسار (مثل الرقيب النموذجي) أن يعرف بسهولة أن حركة المرور العادية لا تتطابق مع حركة المرور الاحتياطية.
تتيح لك ميزة بادئة الدفق غير الآمنة تكوين زوج من بادئات النص الواضح المشتركة مسبقًا لتدفقات Shadowsocks 2022. يتم إضافة البادئات مسبقًا إلى تدفقات الطلب والاستجابة لخداع جدران الحماية البسيطة.
لاستخدام هذه الميزة، أضف unsafeRequestStreamPrefix
و unsafeResponseStreamPrefix
إلى كل من كتل العميل والخادم، وحدد البادئات في ترميز base64. يجب أن يتفق العميل والخادم على نفس زوج البادئات. عند بدء التشغيل، ستتم طباعة رسالة تحذيرية لإعلامك بأن استخدام هذه الميزة "يلوث" العميل والخادم.
AGPL-3.0 أو الأحدث