يتجاوز أنظمة فحص الحزم العميقة (DPI) التي تعتمد على SNI. الحزمة مخصصة Linux فقط. كما أنه متوافق تمامًا مع أجهزة التوجيه التي تعمل OpenWrt.
تم تطوير البرنامج في المقام الأول لتجاوز انقطاع يوتيوب في روسيا.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
تم توزيع البرنامج في نسختين:
يتوافق البرنامج مع أجهزة التوجيه على أساس OpenWrt و Entware (Keenetic/ASUS) والآلات المضيفة. يقدم البرنامج الثنائيات عبر إجراءات GitHub. الثنائيات متاحة أيضا عبر إصدارات جيثب. استخدم أحدث ما قبل الإصدار للبناء الأحدث. تحقق من إجراءات github إذا كنت تريد رؤية جميع الثنائيات التي تم تجميعها على الإطلاق. يجب أن تعرف بنية الأجهزة الخاصة بك لاستخدام الثنائيات. على OpenWrt ، يمكنك التحقق من ذلك باستخدام الأمر grep ARCH /etc/openwrt_release
.
على كل من OpenWrt و Entware قم بتثبيت البرنامج باستخدام OPKG. إذا حصلت على خطأ في نظام الملفات للقراءة فقط ، فيمكنك إلغاء تفريغ الثنائي يدويًا أو تحديد مسار OPKG opkg -o <destdir>
.
بالنسبة إلى Windows ، استخدم GoodbyedPI بواسطة Valdikss (يمكنك العثور على كيفية استخدامه لـ YouTube هنا) يتم تنفيذ السلوك نفسه أيضًا في حزمة Zapret لـ Linux.
عندما تحصل على حزمة الإصدار ، يجب عليك تثبيتها. انتقل إلى واجهة جهاز التوجيه الخاص بك ، إلى النظام-> البرامج ، قم بتحديث القوائم وتثبيت YouTubeunBlock عبر زر Install_Package . بعد ذلك ، يجب عليك الانتقال إلى قائمة STYSTARTUP وإعادة تحميل جدار الحماية (يمكنك أيضًا القيام بذلك داخل الخدمات-> قائمة YouTubeunBlock ).
لجعلها تعمل ، يجب عليك تسجيل قاعدة IPTABLES وتثبيت وحدات kernel المطلوبة. تعتمد قائمة الوحدات النمطية على إصدار OpenWrt والتي تستخدمها جدار الحماية (Iptables أو Nftables). بالنسبة لمعظم الإصدارات الحديثة من OpenWrt (v23.x ، v22.x) ، يجب عليك استخدام قواعد Nftables ، للأقدم التي تعتمد عليها ، ولكن عادةً ما تكون Iptables.
التبعية المشتركة هي
kmod-nfnetlink-queue
ولكن يتم توفيرها كاعتماد على حزم جدار الحماية.
لذا ، إذا كنت على iPtables ، فيجب عليك تثبيتها:
kmod-ipt-nfqueue
iptables-mod-nfqueue
kmod-ipt-conntrack-extra
iptables-mod-conntrack-extra
وبالطبع ، يجب أن يكون تطبيق Iptables User-Space متاحًا.
على nftables التبعيات هي:
kmod-nft-queue
kmod-nf-conntrack
الخطوة التالية هي إضافة قواعد جدار الحماية المطلوبة.
بالنسبة إلى NFTABLES على قواعد OpenWRT ، يأتي خارج الصندوق وتخزينه تحت /usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft
. كل ما تحتاجه هو تثبيت المتطلبات و do /etc/init.d/firewall reload
. إذا كان لا ، انتقل إلى تكوين جدار الحماية.
الآن نذهب إلى التكوين. لـ OpenWrt هنا هو التكوين عبر UCI و Luci المتاح (CLI و GUI على التوالي).
بالنسبة إلى Luci AKA GUI AKA -Interface من جهاز التوجيه ، يجب عليك تثبيت حزمة Luci-App-Youtubeunblock كما فعلت مع حزمة YouTubeunBlock العادية. ملاحظة ، يجب تحميل قوائم خلاصات OPKG الرسمية ( قم بذلك باستخدام خيار قوائم التحديث ).
إذا حصلت على * pkg_hash_check_unresolved: cannot find dependency luci-lua-runtime for luci-app-youtubeUnblock
، فأنت تستخدم Oldwrt القديم. تثبيت هذه الحزمة وهمية. تحقق من هذا التعليق لمزيد من التفاصيل.
يعيش تكوين LUCI في الخدمات-> قسم YouTubeunBlock . إنه وصفي ذاتي ، مع وصف لكل علامة. لاحظ أنه بعد الضغط على زر Save & Apply
، يتم تطبيق التكوين تلقائيًا ويتم إعادة تشغيل الخدمة.
تكوين UCI متاح في ملف/etc/config/youtubeunblock ، في القسم youtubeUnblock.youtubeUnblock
. يتم التكوين مع الأعلام. لاحظ أن أسماء الأعلام ليست هي نفسها: يجب أن تستبدل -
بـ _
، يجب ألا تستخدم الرائدة --
للعلم. كما أنك ستتمكن من تبديل أعلام (بدون معلمات) مع 1
.
على سبيل المثال ، لتمكين سجلات التتبع يجب عليك القيام بها
uci set youtubeUnblock.youtubeUnblock.trace=1
يمكنك التحقق من السجلات في وضع CLI مع logread -l 200 | grep youtubeUnblock
أمر.
بالنسبة إلى UCI ، لحفظ التكوينات التي يجب عليك القيام بها uci commit
ثم reload_config
لإعادة تشغيل YouTubeunblock
في وضع CLI ، ستستخدم YouTubeunBlock كخدمة init.d العادية: على سبيل المثال ، يمكنك تمكينه مع /etc/init.d/youtubeUnblock enable
.
لبرامج entware على keenetic هنا دليل التثبيت (الروسي).
قم بتثبيت الثنائي مع opkg install youtubeUnblock-*.ipk
. بعد التثبيت ، سيكون متاح الثنائي في/opt/bin و init script in /opt/etc/init.d/s51youtubeunblock. لتشغيل youtubeunblock ، ما عليك سوى تشغيل /opt/etc/init.d/S51youtubeUnblock start
لاحظ أنه يجب عليك إطعام kernel الهدف باستخدام وحدة kernel nfnetlink_queue. قد يتم تعطيل الوحدة أو حتى غير موجودة. ستحاول Entware S51YoutubeUnblock إدراج Kmods بأي طريقة ولكن إذا لم يتم توفيرها بواسطة البرنامج ، فيجب عليك تثبيتها يدويًا. AFAIK على keenetics هنا هو مستودع مع وحدات جمعها العميل. يمكنك العثور عليها في مكان ما في واجهة الويب لجهازك. في أجهزة التوجيه الأخرى ، قد ترغب في إجراء بحث أعمق في هذه الحالة والعثور على Kmods. إذا لم تتمكن من العثور على أي شيء ، فيمكنك أن تطلب من العميل رموز GPL من kernel Linux (وقد تكون مفتوحة حتى) وتجميع kmods يدويًا.
يجب عليك إدراج الوحدة النمطية (قد يتم حذف هذه الخطوة على Entware و OpenWrt):
modprobe nfnetlink_queue
في المضيف المحلي ، تأكد من التغيير إلى سلسلة الإنتاج في قواعد جدار الحماية التالية.
نسخ youtubeUnblock.service
إلى /usr/lib/systemd/system
(يجب عليك تغيير المسار داخل الملف إلى موضع البرنامج ، على سبيل المثال /usr/bin/youtubeUnblock
، قد ترغب أيضًا في حذف إضافة قاعدة iPtables الافتراضية في ملف النظام إلى تحكمها يدويًا). وتشغيل systemctl start youtubeUnblock
.
على nftables يجب عليك وضع قواعد Nftables التالية:
nft add chain inet fw4 youtubeUnblock ' { type filter hook postrouting priority mangle - 1; policy accept; } '
nft add rule inet fw4 youtubeUnblock ' meta l4proto { tcp, udp } th dport 443 ct original packets < 20 counter queue num 537 bypass '
nft insert rule inet fw4 output ' mark and 0x8000 == 0x8000 counter accept '
على iPtables يجب عليك وضع قواعد Iptables التالية:
iptables -t mangle -N YOUTUBEUNBLOCK
iptables -t mangle -A YOUTUBEUNBLOCK -p tcp --dport 443 -m connbytes --connbytes-dir original --connbytes-mode packets --connbytes 0:19 -j NFQUEUE --queue-num 537 --queue-bypass
iptables -t mangle -A YOUTUBEUNBLOCK -p udp --dport 443 -m connbytes --connbytes-dir original --connbytes-mode packets --connbytes 0:19 -j NFQUEUE --queue-num 537 --queue-bypass
iptables -t mangle -A POSTROUTING -j YOUTUBEUNBLOCK
iptables -I OUTPUT -m mark --mark 32768/32768 -j ACCEPT
بالنسبة لـ IPv6 على IPTables ، تحتاج إلى تكرار القواعد المذكورة أعلاه لـ IP6Tables:
ip6tables -t mangle -N YOUTUBEUNBLOCK
ip6tables -t mangle -A YOUTUBEUNBLOCK -p tcp --dport 443 -m connbytes --connbytes-dir original --connbytes-mode packets --connbytes 0:19 -j NFQUEUE --queue-num 537 --queue-bypass
ip6tables -t mangle -A YOUTUBEUNBLOCK -p udp --dport 443 -m connbytes --connbytes-dir original --connbytes-mode packets --connbytes 0:19 -j NFQUEUE --queue-num 537 --queue-bypass
ip6tables -t mangle -A POSTROUTING -j YOUTUBEUNBLOCK
ip6tables -I OUTPUT -m mark --mark 32768/32768 -j ACCEPT
لاحظ أن القواعد أعلاه تستخدم Conntrack لتوجيه 20 حزمة فقط من الاتصال إلى YouTubeunblock . إذا واجهت بعض المشاكل معها ، على سبيل المثال ، لا يكتشف YouTubeunBlock YouTube ، فحاول حذف connbytes من القواعد. لكنه سلوك غير محتمل وربما يجب عليك التحقق من مجموعة القواعد الخاصة بك.
يمكنك استخدام --queue-balance
مع مثيلات متعددة من YouTubeunblock للأداء. يتم دعم هذا السلوك عن طريق MultiThreading. ما عليك سوى المرور --threads=n
حيث تقف N بعدد من المواضيع التي تريد تمكينها. الافتراضيات n إلى 1 . تتخلف مؤشرات الترابط القصوى إلى 16 ولكن قد يتم تغييرها برمجيًا. لاحظ أنه إذا كنت على وشك زيادته ، فهناك فرصة بنسبة 100 ٪ أن تكون في الاتجاه الخطأ.
كما يفضل DNS عبر HTTPS لإضفاء الطابع الإضافي على عدم الكشف عن هويته.
فيما يلي الأمر لاختبار ما إذا كان يعمل أم لا:
curl -o/dev/null -k --connect-to ::google.com -k -L -H Host: mirror.gcr.io https://test.googlevideo.com/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
يجب أن تعود السرعة المنخفضة دون YouTubeunblock وأسرع معها. مع YouTubeunblock ، يجب أن تكون السرعة هي نفسها بسرعة مع الأمر التالي:
curl -o/dev/null -k --connect-to ::google.com -k -L -H Host: mirror.gcr.io https://mirror.gcr.io/v2/cimg/android/blobs/sha256:6fd8bdac3da660bde7bd0b6f2b6a46e1b686afb74b9a4614def32532b73f5eaa
ضع الأعلام على الثنائي ، وليس البرنامج النصي init. إذا كنت على OpenWrt ، فيجب عليك وضع الأعلام داخل البرنامج النصي: Open /etc/init.d/youtubeUnblock
مع أي محرر نصوص ، مثل VI أو Nano ووضع أعلامك بعد خط procd_set_param command /usr/bin/youtubeUnblock
.
الأعلام المتاحة:
--sni-domains=<comma separated domain list>|all
قائمة المجالات التي تريد معالجتها بواسطة SNI. استخدم هذه السلسلة إذا كنت تريد تغيير قائمة المجال الافتراضي. الإعدادات الافتراضية إلى googlevideo.com,ggpht.com,ytimg.com,youtube.com,play.google.com,youtu.be,googleapis.com,googleusercontent.com,gstatic.com,l.google.com
. يمكنك تمرير كل شيء إذا كنت تريد معالجة كل عميل Hello . يمكنك استبعاد بعض المجالات مع --exclude-domains
.
--exclude-domains=<comma separated domain list>
قائمة المجالات المراد استبعادها من الاستهداف.
--queue-num=<number of netfilter queue>
سيتم ربط عدد قائمة انتظار NetFilter YouTubeunblock . الافتراضات إلى 537 .
--fake-sni={0|1}
تتيح هذه العلامة SNI المزيفة التي تجبر YouTubeunblock إرسال ثلاث حزم على الأقل بدلاً من واحدة مع TLS ClientHello : Fake ClientHello ، الجزء الأول من ClientHello الأصلي ، الجزء الثاني من العميل الأصلي. قد يكون هذا العلامة مرتبطًا ببعض عمليات الخطأ غير المسموح بها ، لذلك قبل فتح مشكلة ، راجع استكشاف الأخطاء وإصلاحها لـ Eperms. الإعدادات الافتراضية إلى 1 .
--fake-sni-seq-len=<length>
تحدد هذه العلامة YouTubeunBlock لبناء بناء معقد لحزم Hello Client Hello. يحدد الطول مقدار المزيفة التي سيتم إرسالها. الإعدادات الافتراضية إلى 1 .
--fake-sni-type={default|custom|random}
يحدد هذه العلامة أي نوع رسالة التزوير يجب استخدامه للحزم المزيفة. بالنسبة random
، سيتم إرسال رسالة الطول العشوائي ومع الحمولة العشوائية. من أجل default
يتم استخدام الحمولة الافتراضية (sni = www.google.com). وللخيار custom
، يتم استخدام الحمولة النافعة من --fake-custom-payload
. الافتراضات إلى default
.
--fake-custom-payload=<payload>
مفيد مع-- --fake-sni-type=custom
. يجب عليك تحديد الحمولة الحمولة للرسالة المزيفة يدويًا. استخدم تنسيق Hex: --fake-custom-payload=0001020304
تعني أن 5 بايت تسلسل: 0x00
، 0x01
، 0x02
، 0x03
، 0x04
المستخدمة على أنها مزيفة.
--faking-strategy={randseq|ttl|tcp_check|pastseq|md5sum}
يحدد هذا العلامة استراتيجية إبطال الحزم المزيفة. الإعدادات الافتراضية إلى randseq
randseq
أنه سيتم تعيين التسلسل العشوائي/الإقرار العشوائي. قد يتم التعامل مع هذا الخيار بواسطة مزود يستخدم Conntrack مع تمكين Drop على قاعدة جدار الحماية غير صالحة لـ Conntrack .ttl
أنه سيتم إبطال الحزمة بعد- --faking-ttl=n
HOPS. ttl
أفضل ولكن قد يسبب مشاكل إذا لم يتم تكوينه.pastseq
randseq
ولكن رقم التسلسل ليس عشوائيًا ولكن يشير إلى الحزمة المرسلة في الماضي (قبل التيار).tcp_check
إبطال حزمة التزوير مع اختبارات غير صالحة. يمكن التعامل معها وإسقاطها من قبل بعض مقدمي الخدمات/ملعقة صغيرة.md5sum
إبطال حزمة التزوير مع TCP غير صالح MD5SUM. MD5SUM هو خيار TCP الذي يتم التعامل معه بواسطة خادم الوجهة ولكن قد يتم تخطيه بواسطة TSPU. --faking-ttl=<ttl>
يغني الوقت للعيش (TTL) لرسائل SNI المزيفة. تم تحديد TTL مثل أن الحزمة سوف تمر عبر نظام DPI ويتم التقاطها به ، ولكن لن تصل إلى خادم الوجهة. الإعدادات الافتراضية إلى 8 .
--fake-seq-offset
Thinks الإزاحة من رقم التسلسل الأصلي للحزم المزيفة. تستخدم من قبل استراتيجية التزوير Randseq. الإعدادات الافتراضية إلى 10000. إذا كان 0 ، سيتم تعيين رقم تسلسل عشوائي.
--frag={tcp,ip,none}
يحدد استراتيجية التجزئة للحزمة. يستخدم TCP افتراضيًا. قد يتم حظر تجزئة IP بواسطة نظام DPI. لا شيء لا يحدد أي تفتت. ربما لن ينجح هذا ، ولكن قد يعمل مع بعض استراتيجيات SNI المزيفة.
--frag-sni-reverse={0|1}
يحدد YouTubeunBlock لإرسال شظايا ClientHello بالترتيب العكسي. الإعدادات الافتراضية إلى 1 .
--frag-sni-faked={0|1}
يحدد YouTubeunBlock لإرسال حزم مزيفة بالقرب من ClientHello (يملأ الحمولة مع الأصفار). الافتراضات إلى 0 .
--frag-middle-sni={0|1}
مع هذه الخيارات ، سوف يقسم YouTubeunBlock الحزمة في منتصف بيانات SNI. الإعدادات الافتراضية إلى 1.
--frag-sni-pos=<pos>
مع هذا الخيار ، سيقوم YouTubeunBlock بتقسيم الحزمة في الموضع. الإعدادات الافتراضية إلى 1.
--quic-drop
إسقاط جميع حزم quic التي تذهب إلى YouTubeunblock. لن تؤثر على أي حزم UDP أخرى. مناسبة لبعض أجهزة التلفزيون. لاحظ أنه بالنسبة لهذا الخيار للعمل ، يجب عليك أيضًا إضافة وكيل UDP إلى YouTubeunblock في جدار الحماية. يمكن أيضًا استخدام connbytes
مع UDP.
--fk-winsize=<winsize>
يحدد حجم النافذة لحزمة TCP المجزأة. قابلة للتطبيق إذا كنت تريد أن تكون الاستجابة مجزأة. قد تباطؤ تهيئة الاتصال.
--synfake={1|0}
إذا تم إرسال حمولة SYN 1 قبل كل طلب. الفكرة مأخوذة من Syndata من مشروع Zapret. عادةً ما يتم التخلص من حمولة SYN بواسطة نقطة النهاية ولكن قد يتم التعامل معها بواسطة TSPU. يرسل هذا الخيار مزيفًا عاديًا في هذا الحمولة. يرجى ملاحظة أن الخيار يعمل لجميع المواقع ، لذلك-لن تغير المجالات SNI أي شيء.
--synfake-len=<len>
قد تكون الحزمة المزيفة المرسلة في Synfake كبيرة جدًا. إذا واجهت مشكلات ، فأختام Synfake-Len. حيث يرمز لين عن مقدار البايتات التي يجب إرسالها كملحقة. مرر 0 إذا كنت تريد إرسال حزمة مزيفة كاملة. الافتراضات إلى 0
--sni-detection={parse|brute}
يحدد كيفية اكتشاف SNI. سوف يكتشف Parse عادة عن طريق تحليل رسالة Hello العميل. سوف يمر الغاشمة بالرسالة بأكملها وتحقق من إمكانية حدوث SNI. يرجى ملاحظة أنه عندما-لا يكون خيار --sni-domains
كله غاشمًا سيكون التعقيد الزمني (NM) حيث يرمز N إلى طول الرسالة و M هو عدد المجالات. الإعدادات الافتراضية لتحليل.
--seg2delay=<delay>
يفرض هذا العلامة على YouTubeunblock الانتظار قليلاً قبل إرسال الجزء الثاني من الحزمة المنقسمة.
-يعطل --silent
وضع المطوّل.
--trace
قدر من الفعل لأغراض تصحيح الأخطاء.
--no-gso
دعم حزم الدهون في Google Chrome التي تستخدم GSO. تم اختبار هذه الميزة بشكل جيد الآن ، لذلك ربما لن تقوم هذه العلامة بإصلاح أي شيء.
--no-ipv6
دعم IPv6. قد يكون مفيدًا إذا كنت لا تريد فتح مقبس IPv6.
--threads=<threads number>
يحدد مقدار مؤشرات الترابط التي تريد تشغيلها لبرنامجك. هذا الافتراضيات إلى 1 ولا ينبغي تحريره للاستخدام العادي. ولكن إذا كنت تريد حقًا مثيلات قائمة انتظار متعددة من YouTubeunBlock ، لاحظ أنه يجب عليك تغيير التوازن-num إلى-. على سبيل المثال ، مع 4 مؤشرات ترابط ، استخدم --queue-balance 537:540
على iPtables و queue num 537-540
على Nftables.
--packet-mark=<mark>
استخدم هذا الخيار إذا تعارض youtubeunblock مع أنظمة أخرى تعتمد على علامة الحزمة. لاحظ أنك قد ترغب في تغيير القاعدة قبول لـ IPTABLES لمتابعة العلامة.
--fbegin
--fend
Flags: يدعم YouTubeunBlock مجموعات متعددة من الاستراتيجيات لمرشحات محددة. قد ترغب في بدء مجموعة جديدة بعد المجموعة الافتراضية ، مثل: --sni-domains=googlevideo.com --faking-strategy=md5sum --fbegin --sni-domains=youtube.com --faking-strategy=tcp_check --fend --fbegin --sni-domains=l.google.com --faking-strategy=pastseq --fend
. لاحظ أن أولوية هذه المجموعات تتراجع إلى الوراء: الأخير هو الأول ، الافتراضي (واحد لا يبدأ -fbegin) هو الأخير. إذا قمت بتشغيل القسم الجديد ، فسيتم تنفيذ الإعدادات الافتراضية تمامًا مثل YouTubeunBlock دون أي معلمات. لاحظ أن التكوين أعلاه هو مجرد مثال ولن يعمل من أجلك.
تحقق من هذه المشكلة للحصول على تكوينات مفيدة.
إذا واجهت مشاكل مع بعض المواقع وتأكد من حظرها بواسطة SNI (YouTube على سبيل المثال) ، فقد يلعب استخدام الأعلام ومجموعاتها. في البداية ، من المستحسن تجربته --faking-strategy
--frag-sni-faked=1
. إذا كان لديك مشاكل في بعض المواقع التي يتم تنفيذه ، فيمكنك اللعب بقيم Flags. على سبيل المثال ، بالنسبة لشخص --faking-strategy=ttl
. يجب عليك تحديد مناسبة- --fake-sni-ttl=<ttl value>
حيث TTL هو مقدار القفزات بينك وبين DPI.
إذا كنت على chromium ، فقد تضطر إلى تعطيل Kyber (الميزة التي تجعل ClientHello TLS كبيرًا جدًا). لقد واجهت مشكلة معها على جهاز التوجيه ، لذا للهروب من الأخطاء المحتملة ، لذلك من الأفضل تعطيلها: في chrome://flags
Search for Kyber و switch to statibed state. بدلاً من ذلك ، يمكنك ضبط- --sni-detection=brute
وربما ضبط- --sni-domains
.
إذا كان متصفحك يستخدم QUIC ، فقد لا يعمل بشكل صحيح. قم بتعطيله في Chrome في chrome://flags
وفي network.http.http{2,3}.enable(d)
about:config
يبدو أن بعض tspus بدأت في منع حزم knerSeq ، لذلك يجب أن تلعب مع استراتيجيات مزيف. أنا شخصياً أوصي ببدء استراتيجية مزيفة md5sum
.
أجهزة التلفزيون هي أكبر صداع.
في هذه المسألة تم حل المشكلة. والآن يجب على YouTubeunblock العمل مع الأعلام الافتراضية. إذا لم يكن كذلك ، العب مع استراتيجيات مزيف وغيرها من الأعلام. كما قد يكون عليك تعطيل Quic. للقيام بذلك ، يمكنك استخدام العلم- --quic-drop
مع تكوين جدار الحماية المناسب (تحقق من وصف العلم). لاحظ أن هذه العلامة لن تعطيل Gquic وقد تنقل بعض أجهزة التلفزيون عليها. لتعطيل Gquic ، ستحتاج إلى حظر منفذ 443 بالكامل لـ UDP في تكوين جدار الحماية:
ل Nftables تفعل
nft insert rule inet fw4 forward ip saddr 192.168.. udp dport 443 counter drop
ل Iptables
iptables -I OUTPUT --src 192.168.. -p udp --dport 443 -j DROP
حيث يجب أن تحل محل 192.168 .. مع IP من التلفزيون الخاص بك.
قد يحدث EPERM في الكثير من الأماكن ، ولكن بشكل عام هنا اثنان: mnl_cb_run وعند إرسال الحزمة عبر RawSocket (RAW_FRAGS_SEND وإرسال SNI المزيفة).
تشير عملية mnl_cb_run غير المسموح بها إلى أن مثيلًا آخر من YouTubeunBlock يعمل على قائمة الانتظار المحددة.
تشير عملية RawSocket غير المسموح بها إلى أن الحزمة يتم إسقاطها بواسطة قواعد Nfilter. في الواقع ، هذا تلميح من النواة إلى أن هناك خطأ ما يحدث ويجب أن نتحقق من قواعد جدار الحماية. قبل الغوص في المشكلة ، دعنا نجعلها نظيفة كيف يتم إرسال الحزم المشوهة. يوفر لنا Nefilter Queue القدرة على تشغيل الحزمة أثناء الطيران ، لكن هذا غير مناسب لهذا البرنامج لأننا بحاجة إلى تقسيم الحزمة إلى حزمتين مستقلتين على الأقل. لذلك نحن نستخدم Sockets Linux Raw التي تسمح لنا بإرسال أي حزمة IPv4. تنتقل الحزمة من سلسلة الإخراج حتى عند إعداد NFQueue على الأمام (مناسبة لـ OpenWrt). لذلك نحن بحاجة إلى الهروب من الحزمة يرفض هنا.
iptables -I OUTPUT -m mark --mark 32768/32768 -j ACCEPT
أو nft insert rule inet fw4 output mark and 0x8000 == 0x8000 counter accept
. قبل التجميع ، تأكد من تثبيت gcc
و make
و autoconf
و automake
و pkg-config
و libtool
. بالنسبة إلى Fedora glibc-static
أيضًا.
تجميع مع make
. التثبيت مع make install
. تشمل الحزمة libnetfilter_queue
و libnfnetlink
و libmnl
كتبعيات ثابتة. تتطلب الحزمة linux-headers
و kernel مصممة مع دعم NetFilter Nfqueue.
الحزمة متوافقة أيضًا مع أجهزة التوجيه. يجب أن يعمل جهاز التوجيه بواسطة نظام قائم على Linux مثل OpenWrt.
يمكنك البناء تحت OpenWrt مع خيارين: أولاً - من خلال SDK ، وهو الطريق المفضل والثاني هو المتبادل يدويًا مع OpenWrt Toolchain.
يوفر OpenWrt SDK عالي المستوى لبناء الحزمة.
الخطوة الأولى هي تنزيل أو تجميع OpenWrt SDK لمنصة محددة. يمكن تجميع SDK وفقًا لهذا البرنامج التعليمي.
بجانب رمز المصدر الخام لـ SDK ، يقدم OpenWrt أيضًا SDKs مسبقًا لجهاز التوجيه الخاص بك. يمكنك العثور عليه على صفحة جهاز التوجيه. على سبيل المثال ، لديّ جهاز توجيه قائم على Ramips/MT76x8 ، لذا بالنسبة لي openwrt-sdk-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64
فإن SDK موجود على https://downloads.openwrt.org/release/23.05.3/targets/ramips openwrt-sdk-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64
.
ستحتاج إلى تثبيت متطلبات SDK على نظامك إذا كان لديك أي مشاكل ، استخدم Docker Ubuntu: 24.04 صورة. تأكد من أن يكون مستخدمًا غير جذر لأن البعض يفشل في ذلك. بعد ذلك ، قم بإلغاء SDK و CD فيه.
يفعل
echo " src-git youtubeUnblock https://github.com/Waujito/youtubeUnblock.git;openwrt " >> feeds.conf
./scripts/feeds update youtubeUnblock
./scripts/feeds install -a -p youtubeUnblock
make package/youtubeUnblock/compile
الآن تم تصميم الحزمة ويمكنك استيرادها إلى جهاز التوجيه. ابحث عنه في bin/packages/<target>/youtubeUnblock/youtubeUnblock-<version>.ipk
.
تقع أدوات الأدوات المسبقة بالقرب من SDK. على سبيل المثال ، يطلق عليه openwrt-toolchain-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64.tar.xz
. عند تنزيل مجموعة الأدوات ، قم بفكها في مكان ما. الآن نحن مستعدون للتجميع. طلبت مني Cross Cross Cross إنشاء dir من أجله وتمريره كمتغير للبيئة. كما يجب أن تلاحظ حزم Toolsuite واستبدال أمر Make الخاص بي.
STAGING_DIR=temp make CC=/usr/bin/mipsel-openwrt-linux-gcc LD=/usr/bin/mipsel-openwrt-linux-ld AR=/usr/bin/mipsel-openwrt-linux-ar OBJDUMP=/usr/bin/mipsel-openwrt-linux-objdump NM=/usr/bin/mipsel-openwrt-linux-nm STRIP=/usr/bin/mipsel-openwrt-linux-strip CROSS_COMPILE_PLATFORM=mipsel-buildroot-linux-gnu
ألقِ نظرة على CROSS_COMPILE_PLATFORM
فهي مطلوبة بواسطة Autotools ولكن أعتقد أنه ليس من الضروري. على أي حال وضعت mipsel-buildroot-linux-gnu
هنا. للحصول على اسم طراز جهاز التوجيه الخاص بك ، ربما يكون دليل Automake Crossomile مفيدًا.
عند الانتهاء من التجميع ، سيكون الملف الثنائي في دليل الإنشاء. نسخه إلى جهاز التوجيه الخاص بك. لاحظ أنه من المحتمل أن يكون وصول SSH مطلوبًا للمتابعة. لا تعمل SSHFS على النموذج الخاص بي ، لذا قمت بإصدار التطبيق إلى جهاز التوجيه عبر صفحة حزمة تحميل البرامج . لقد أعطاني خطأ ، ولكن أيضًا ملف A /tmp/upload.ipk
الذي قمت بنسخه في دليل الجذر ، chmod +x
IT وتشغيله.
يصف هذا القسم إصدار وحدة Kernel من YouTubeunblock. تعمل وحدة kernel كوحدة عادية داخل kernel وتتكامل داخل مكدس NetFilter لإلحاق الحزم المرسلة عبر الإنترنت بلا أساس.
يمكنك تكوين الوحدة النمطية مع أعلامها في insmod:
insmod kyoutubeUnblock.ko fake_sni=1 exclude_domains=.ru quic_drop=1
لاحظ أن أسماء الأعلام مختلفة عن الأسماء المستخدمة في YouTubeunBlock العادية (كما هو الحال في تكوين UCI لـ OpenWrt): استبدال -
بـ _
وليس الرائدة --
. أيضًا لتكوين تبديل ، يجب عليك تعيينها على 1
( quic_drop=1
)
أيضا thig جيد أن نذكر هو فعل. تجمع وحدة kernel بين -خيار -Silent to the parmeter verbosity
. تقبل هذه المعلمة 3 وسيطات: trace
، debug
silent
. لا أوصي بشدة بتمكين trace
على جهاز التوجيه لأنه قد يسبب مشاكل كبيرة في الأداء وحتى تجميد جهازك.
كما يتم دعم انخفاض في الاستبدال لجميع المعلمات باستثناء علامة الحزمة. لا يتطلب الانخفاض في الاستبدال إعادة تشغيل الوحدة النمطية إذا كنت تريد تغيير المعلمات. يمكنك تحديد والتحقق من المعلمات داخل دليل الوحدة النمطية داخل sysfs: /sys/module/kyoutubeUnblock/parameters/
. على سبيل المثال ، لتعيين QUIC_DROP على TRUE يمكنك استخدام الأمر التالي:
echo 1 | sudo tee /sys/module/kyoutubeUnblock/parameters/quic_drop
و
cat /sys/module/kyoutubeUnblock/parameters/quic_drop
للتحقق من المعلمة.
لإنشاء وحدة Kernel على نظام المضيف الخاص بك ، يجب عليك تثبيت linux-headers
والتي ستوفر Build Tools و gcc
مترجم. في النظام المضيف ، يمكنك إنشاء الوحدة مع
make kmake
لإنشاء الوحدة النمطية للنواة الخارجية ، يجب أن تبني تلك النواة محليًا وتوفير النقطة. استخدم KERNEL_BUILDER_MAKEDIR=~/linux
علامة لجعل ، على سبيل المثال:
make kmake KERNEL_BUILDER_MAKEDIR=~/linux
لاحظ أنه يجب تكوين kernel بالفعل وبناءها. انظر Linux Kernel Building Cuilms لمزيد من المعلومات حول حالتك المحددة.
بناء مع OpenWrt SDK ليس شيئًا صعبًا. الشيء الوحيد الذي يجب عليك فعله هو الحصول على SDK. يمكنك العثور عليها من خلال النظر إلى بنيةك وإصدار OpenWrt المستخدمة حاليًا. يجب عليك استخدام الإصدار الخاص بك بالضبط من OpenWrt لأن النواة هناك تتغير في كثير من الأحيان. يمكنك العثور على SDK بطريقتين: عن طريق تنزيله من موقعهم أو باستخدام حاوية OpenWrt SDK Docker (موصى بها).
إذا قررت تنزيل أرشيف TAR ، اتبع الخطوات التالية: بالنسبة لي ، يعيش الأرشيف في https://downloads.openwrt.org/releases/23.05.3/targets/ramips/mt76x8/ ودعا openwrt-sdk-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64
. ستحتاج إلى تثبيت متطلبات SDK على نظامك إذا كان لديك أي مشاكل ، استخدم Docker Ubuntu: 24.04 صورة. تأكد من أن يكون مستخدمًا غير جذر لأن البعض يفشل في ذلك. بعد ذلك ، قم بإلغاء SDK و CD فيه.
أو يمكنك الحصول على صورة Docker مع SDK مدمج: https://hub.docker.com/u/openwrt/sdk. في حالتي ، تحتوي الصورة على ramips-mt76x8-23.05.3
. الشيء الجيد هنا هو أنك لست بحاجة إلى تثبيت أي تبعيات داخل حاوية Docker. يحتوي Docker Hub أيضًا على بحث مثالي حول العلامات إذا لم تكن متأكدًا من أي جهاز يتوافق مع جهازك.
عندما تقوم بتفريغ/تثبيت SDK ، فأنت مستعد للبدء ببناء وحدة Kernel.
يفعل
echo " src-git youtubeUnblock https://github.com/Waujito/youtubeUnblock.git;openwrt " >> feeds.conf
./scripts/feeds update youtubeUnblock
./scripts/feeds install -a -p youtubeUnblock
make defconfig
make package/kyoutubeUnblock/compile V=s
عندما تنتهي الأوامر ، تكون الوحدة جاهزة. ابحث عنه مع find bin -name "kmod-youtubeUnblock*.ipk"
، قم بنسخه إلى مضيفك وتثبيته إلى جهاز التوجيه عبر واجهة برنامج GUI. يجب أن تبدأ الوحدة على الفور. إذا لم يكن الأمر كذلك ، فقم modprobe kyoutubeUnblock
.
قد يعمل YouTubeunblock أيضًا على Padavan. تحقق من الدليل هنا [روس]
إذا كان لديك أي أسئلة/اقتراحات/مشاكل ، فلا تتردد في فتح مشكلة.