บายพาสระบบการตรวจสอบแพ็คเก็ตลึก (DPI) ที่อาศัย SNI แพ็คเกจสำหรับ Linux เท่านั้น นอกจากนี้ยังเข้ากันได้อย่างสมบูรณ์กับเราเตอร์ที่ใช้ OpenWrt
โปรแกรมได้รับการพัฒนาเป็นหลักเพื่อข้ามการหยุดทำงานของ YouTube ในรัสเซีย
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 รุ่น ใช้การเปิดตัวล่าสุดสำหรับการสร้างที่ทันสมัยที่สุด ตรวจสอบการกระทำของ GitHub หากคุณต้องการดูไบนารีทั้งหมดที่รวบรวมไว้ตลอดกาล คุณควรรู้ Arcitecture ของฮาร์ดแวร์ของคุณเพื่อใช้ไบนารี บน OpenWrt คุณสามารถตรวจสอบได้ด้วยคำสั่ง grep ARCH /etc/openwrt_release
ทั้ง OpenWRT และ Entware ติดตั้งโปรแกรมด้วย OPKG หากคุณมีข้อผิดพลาดของระบบไฟล์แบบอ่านอย่างเดียวคุณสามารถแกะไบนารีด้วยตนเองหรือระบุเส้นทาง opkg opkg -o <destdir>
สำหรับ Windows ใช้ GoodmyEdpi โดย Valdikss (คุณสามารถค้นหาวิธีการใช้งานสำหรับ YouTube ได้ที่นี่) พฤติกรรมเดียวกันนี้ยังถูกนำไปใช้ในแพ็คเกจ Zapret สำหรับ Linux
เมื่อคุณได้รับแพ็คเกจรีลีสคุณควรติดตั้ง ไปที่อินเทอร์เฟซเราเตอร์ของคุณไปยัง ระบบ-> ซอฟต์แวร์ ทำ รายการอัปเดต และติดตั้ง YouTubeUnBlock ผ่านปุ่ม Install_Package จากนั้นคุณควรไปที่เมนู สตาร์ทอัพระบบ และโหลดไฟร์วอลล์ใหม่ (คุณอาจทำภายใน บริการ-> เมนู YouTubeUnBlock )
ในการทำงานคุณควรลงทะเบียนกฎ IPTABLES และติดตั้งโมดูลเคอร์เนลที่ต้องการ รายการของโมดูลขึ้นอยู่กับเวอร์ชันของ 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
บน 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 WEBTERFACE ของเราเตอร์ คุณควรติดตั้งแพ็คเกจ Luci-App-YoutubeUnblock เหมือนที่คุณทำด้วยแพ็คเกจ YouTubeUnBlock ปกติ โปรดทราบว่าควรโหลดรายการฟีด OPKG อย่างเป็นทางการ ( ทำด้วยตัวเลือกรายการอัปเดตรายการ )
หากคุณได้รับ * pkg_hash_check_unresolved: cannot find dependency luci-lua-runtime for luci-app-youtubeUnblock
คุณกำลังใช้ OpenWrt เก่า ติดตั้งแพ็คเกจจำลองนี้ ตรวจสอบความคิดเห็นนี้สำหรับรายละเอียดเพิ่มเติม
การกำหนดค่า LUCI อาศัยอยู่ใน บริการ-> ส่วน YouTubeUnBlock มันเป็นคำอธิบายตัวเองพร้อมคำอธิบายสำหรับแต่ละธง โปรดทราบว่าหลังจากที่คุณกดปุ่ม Save & Apply
การกำหนดค่าจะถูกนำไปใช้โดยอัตโนมัติและบริการจะเริ่มต้นใหม่
การกำหนดค่า UCI มีอยู่ในไฟล์/etc/config/youtubeunblock ในส่วน youtubeUnblock.youtubeUnblock
การกำหนดค่าทำด้วยธง โปรดทราบว่าชื่อของธงไม่เหมือนกัน: คุณควรแทนที่ -
ด้วย _
คุณไม่ควรใช้นำ --
สำหรับธง นอกจากนี้คุณจะเปิดใช้งานการสลับธง (ไม่มีพารามิเตอร์) ด้วย 1
ตัวอย่างเช่นเพื่อเปิดใช้งานบันทึกการติดตามที่คุณควรทำ
uci set youtubeUnblock.youtubeUnblock.trace=1
คุณสามารถตรวจสอบบันทึกในโหมด CLI ด้วย logread -l 200 | grep youtubeUnblock
คำสั่ง logread -l 200 | grep youtubeUnblock
สำหรับ UCI ในการบันทึกการกำหนดค่าที่คุณควรทำ uci commit
จากนั้น reload_config
เพื่อรีสตาร์ท YouTubeUnblock
ในโหมด CLI คุณจะใช้ YouTubeUnBlock เป็นบริการ init.d ปกติ: ตัวอย่างเช่นคุณสามารถเปิดใช้งานได้ด้วย /etc/init.d/youtubeUnblock enable
สำหรับ Entware on Keenetic ที่นี่เป็นคู่มือการติดตั้ง (รัสเซีย)
ติดตั้งไบนารีด้วย opkg install youtubeUnblock-*.ipk
หลังจากการติดตั้งจะมีการใช้ไบนารีใน/opt/bin และสคริปต์ init ใน /opt/etc/init.d/s51youtubeunblock ในการเรียกใช้ YouTubeUnBlock เพียงแค่เรียกใช้ /opt/etc/init.d/S51youtubeUnblock start
โปรดทราบว่าคุณควรป้อนเคอร์เนลเป้าหมายด้วยโมดูลเคอร์เนล nfnetlink_queue โมดูลอาจถูกปิดใช้งานหรือไม่ปรากฏอยู่ Entware S51YOUTUBEUNBLOCK จะพยายามแทรก KMODS แต่หากซอฟต์แวร์ไม่ได้รับการจัดเตรียมไว้ด้วยตนเองคุณควรติดตั้งด้วยตนเอง Afaik on Keenetics ที่นี่เป็นที่เก็บที่มีโมดูลที่รวบรวมโดยลูกค้า คุณสามารถค้นหาได้ที่ไหนสักแห่งในเว็บอินเตอร์เฟสของอุปกรณ์ของคุณ ในเราเตอร์อื่น ๆ คุณอาจต้องการทำการวิจัยที่ลึกซึ้งยิ่งขึ้นในกรณีนั้นและค้นหา KMOD ของคุณ หากคุณไม่พบสิ่งใดคุณอาจถามลูกค้าสำหรับรหัส GPL ของเคอร์เนล Linux (และอาจเป็น OpenWrt) และรวบรวม KMODS ด้วยตนเอง
คุณควรแทรกโมดูลด้วย (ขั้นตอนนี้อาจถูกละเว้นใน Entware และ OpenWrt):
modprobe nfnetlink_queue
บนโฮสต์ในพื้นที่ตรวจสอบให้แน่ใจว่าได้เปลี่ยนไปข้างหน้าเป็นห่วง โซ่ เอาต์พุต ในกฎไฟร์วอลล์ต่อไปนี้
คัดลอก youtubeUnblock.service
to /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 เพื่อประสิทธิภาพ พฤติกรรมนี้ได้รับการสนับสนุนผ่านมัลติเธรด เพียงแค่ผ่าน --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
ใส่ธงลงใน ไบนารี ไม่ใช่สคริปต์เริ่มต้น หากคุณอยู่ใน 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
คุณสามารถผ่าน ทั้งหมดได้ หากคุณต้องการให้ ลูกค้า ทุกคนได้รับการจัดการ คุณสามารถแยกโดเมนบางอย่างด้วย --exclude-domains
Flag
--exclude-domains=<comma separated domain list>
รายการของโดเมนที่จะถูกแยกออกจากการกำหนดเป้าหมาย
--queue-num=<number of netfilter queue>
จำนวนของ netfilter queue youtubeunblock จะเชื่อมโยงกับ ค่าเริ่มต้นถึง 537
--fake-sni={0|1}
ธงนี้เปิดใช้งาน Fake-SNI ซึ่งบังคับให้ YouTubeUnBlock ส่งอย่างน้อยสามแพ็คเก็ตแทนที่จะเป็นหนึ่งเดียวกับ TLS ClientHello : Fake ClientHello ส่วนที่ 1 ของ ClientHello ดั้งเดิมส่วนที่ 2 ของ ClientHello ดั้งเดิม การตั้งค่าสถานะนี้อาจเกี่ยวข้องกับการดำเนินการบางอย่างที่ไม่อนุญาตให้มีข้อความแสดงข้อผิดพลาดดังนั้นก่อนที่จะเปิดปัญหาอ้างถึงการแก้ไขปัญหาสำหรับ EPERMS ค่าเริ่มต้นเป็น 1
--fake-sni-seq-len=<length>
ธงนี้ระบุ YouTubeunBlock เพื่อสร้างการก่อสร้างที่ซับซ้อนของไคลเอนต์ Hello Packets ที่ซับซ้อน ความยาวกำหนดจำนวนของปลอมที่จะส่ง ค่าเริ่มต้นเป็น 1
--fake-sni-type={default|custom|random}
ธงนี้ระบุประเภทข้อความที่แกล้งใช้สำหรับแพ็คเก็ตปลอม สำหรับ random
ข้อความที่มีความยาวแบบสุ่มและด้วยการสุ่มน้ำหนักบรรทุกจะถูกส่ง สำหรับ default
จะมีการใช้ payload เริ่มต้น (sni = www.google.com) และสำหรับตัวเลือก custom
ส่วน payload จาก --fake-custom-payload
ใช้ ค่าเริ่มต้นเป็นค่า default
--fake-custom-payload=<payload>
มีประโยชน์กับ --fake-sni-type=custom
คุณควรระบุ payload สำหรับข้อความปลอมด้วยตนเอง ใช้รูปแบบ hex: --fake-custom-payload=0001020304
หมายความว่า 5 ไบต์ลำดับ: 0x00
, 0x01
, 0x02
, 0x03
, 0x04
ใช้เป็นของปลอม
--faking-strategy={randseq|ttl|tcp_check|pastseq|md5sum}
ธงนี้กำหนดกลยุทธ์ของแพ็คเก็ตปลอม ค่าเริ่มต้นเป็น randseq
randseq
ระบุว่าการสุ่มตามลำดับ/ACKNOWLEDGEMEND จะถูกตั้งค่า ตัวเลือกนี้อาจได้รับการจัดการโดยผู้ให้บริการซึ่งใช้ conntrack โดยเปิดใช้งานกฎไฟร์วอลล์สถานะ Conntrack ที่ไม่ถูกต้องttl
ระบุว่าแพ็คเก็ตจะไม่ถูกต้องหลังจาก --faking-ttl=n
hops ttl
ดีกว่า แต่อาจทำให้เกิดปัญหาหากไม่ได้กำหนดค่าpastseq
เป็นเหมือน randseq
แต่หมายเลขลำดับไม่ได้สุ่ม แต่อ้างอิงแพ็คเก็ตที่ส่งมาในอดีต (ก่อนปัจจุบัน)tcp_check
จะทำให้แพ็คเก็ตปลอมเป็นโมฆะด้วยการตรวจสอบที่ไม่ถูกต้อง อาจได้รับการจัดการและลดลงโดยผู้ให้บริการ/TSPUs บางรายmd5sum
จะทำให้แพ็คเก็ตแกลบที่ไม่ถูกต้องด้วย TCP MD5SUM ที่ไม่ถูกต้อง MD5SUM เป็นตัวเลือก TCP ซึ่งจัดการโดยเซิร์ฟเวอร์ปลายทาง แต่อาจถูกข้ามโดย TSPU --faking-ttl=<ttl>
ปรับแต่งเวลาในการใช้ชีวิต (TTL) ของข้อความ SNI ปลอม TTL มีการระบุเช่นเดียวกับแพ็คเก็ตจะผ่านระบบ DPI และถูกจับโดยมัน แต่จะไม่ถึงเซิร์ฟเวอร์ปลายทาง ค่าเริ่มต้นถึง 8
--fake-seq-offset
ออฟเซ็ตจากหมายเลขลำดับเดิมสำหรับแพ็กเก็ตปลอม ใช้โดยกลยุทธ์การแกล้ง Randseq ค่าเริ่มต้นเป็น 10,000 ถ้า 0 จะมีการตั้งค่าหมายเลขลำดับสุ่ม
--frag={tcp,ip,none}
ระบุกลยุทธ์การกระจายตัวของแพ็คเก็ต TCP ถูกใช้โดยค่าเริ่มต้น การกระจายตัวของ IP อาจถูกบล็อกโดยระบบ DPI ไม่มีใครระบุการกระจายตัว อาจจะไม่ได้ผล แต่อาจจะใช้ได้กับกลยุทธ์ SNI ปลอม
--frag-sni-reverse={0|1}
ระบุ youtubeunblock เพื่อส่งชิ้นส่วน clienthello ในลำดับย้อนกลับ ค่าเริ่มต้นเป็น 1
--frag-sni-faked={0|1}
ระบุ youtubeunblock เพื่อส่งแพ็กเก็ตปลอมใกล้ clienthello (เติมน้ำหนักบรรทุกด้วย Zeroes) ค่าเริ่มต้นเป็น 0
--frag-middle-sni={0|1}
ด้วยตัวเลือกนี้ YouTubeUnblock จะแยกแพ็คเก็ตตรงกลางของข้อมูล SNI ค่าเริ่มต้นเป็น 1
--frag-sni-pos=<pos>
ด้วยตัวเลือกนี้ YouTubeunBlock จะแยกแพ็คเก็ตที่ตำแหน่ง POS ค่าเริ่มต้นเป็น 1
--quic-drop
วางแพ็คเก็ต Quic ทั้งหมดที่ไปที่ YouTubeunBlock จะไม่ส่งผลกระทบต่อแพ็กเก็ต UDP อื่น ๆ เหมาะสำหรับทีวีบางตัว โปรดทราบว่าสำหรับตัวเลือกนี้ในการทำงานคุณควรเพิ่มพร็อกซี UDP ลงใน YouTubeunBlock ในไฟร์วอลล์ connbytes
อาจใช้กับ UDP
--fk-winsize=<winsize>
ระบุขนาดหน้าต่างสำหรับแพ็คเก็ต TCP ที่กระจัดกระจาย ใช้งานได้หากคุณต้องการให้การตอบสนองถูกแยกส่วน อาจเริ่มต้นการเริ่มต้นการเชื่อมต่อที่ช้าลง
--synfake={1|0}
ถ้า 1, syn payload จะถูกส่งก่อนคำขอแต่ละครั้ง แนวคิดนี้นำมาจาก Syndata จากโครงการ Zapret โดยปกติแล้ว Payload Syn จะถูกทิ้งโดยจุดสิ้นสุด แต่อาจจัดการโดย TSPU ตัวเลือกนี้ส่งปลอมปกติในน้ำหนักบรรทุกนั้น โปรดทราบว่าตัวเลือกใช้งานได้สำหรับทุกไซต์ดังนั้น--โดเมน SNI จะไม่เปลี่ยนแปลงอะไรเลย
--synfake-len=<len>
แพ็คเก็ตปลอมที่ส่งใน synfake อาจมีขนาดใหญ่เกินไป หากคุณประสบปัญหาให้ลด Synfake-Len ที่ Len ย่อมาจากจำนวนไบต์ที่ควรส่งเป็น syndata ผ่าน 0 หากคุณต้องการส่งแพ็คเก็ตปลอมทั้งหมด ค่าเริ่มต้นเป็น 0
--sni-detection={parse|brute}
ระบุวิธีการตรวจจับ SNI โดยปกติ Parse จะตรวจจับได้โดยแยกวิเคราะห์ข้อความสวัสดีไคลเอนต์ เดรัจฉานจะผ่านข้อความทั้งหมดและตรวจสอบความเป็นไปได้ของการเกิด SNI โปรดทราบว่าเมื่อ-ตัวเลือก --sni-domains
ไม่ได้เป็นเดรัจฉานทั้งหมดจะเป็นความซับซ้อนของเวลา o (nm) ที่ n หมายถึงความยาวของข้อความและ m คือจำนวนโดเมน ค่าเริ่มต้นที่จะแยกวิเคราะห์
--seg2delay=<delay>
ธงนี้บังคับให้ YouTubeUnBlock รอสักครู่ก่อนที่จะส่งส่วนที่ 2 ของแพ็คเก็ตแยก
--silent
ปิดใช้งานโหมด verbose
--trace
คำฟุ่มเฟือยสูงสุดเพื่อจุดประสงค์ในการดีบัก
--no-gso
ปิดการรองรับแพ็คเก็ตไขมัน Google Chrome ซึ่งใช้ GSO ฟีเจอร์นี้ได้รับการทดสอบอย่างดีในขณะนี้ดังนั้นธงนี้อาจจะไม่แก้ไขอะไรเลย
--no-ipv6
ปิดการรองรับ IPv6 อาจมีประโยชน์หากคุณไม่ต้องการเปิดซ็อกเก็ต IPv6
--threads=<threads number>
ระบุจำนวนเธรดที่คุณต้องการเรียกใช้สำหรับโปรแกรมของคุณ ค่าเริ่มต้นนี้เป็น 1 และไม่ควรแก้ไขสำหรับการใช้งานปกติ แต่ถ้าคุณต้องการอินสแตนซ์คิวหลายครั้งของ YouTubeUnBlock โปรดทราบว่าคุณควรเปลี่ยน-คิว-นัมเป็น-คิวคงที่ ตัวอย่างเช่นด้วย 4 เธรดใช้ --queue-balance 537:540
บน iptables และ queue num 537-540
บน Nftables
--packet-mark=<mark>
ใช้ตัวเลือกนี้หาก YouTubeUnBlock ขัดแย้งกับระบบอื่น ๆ ขึ้นอยู่กับเครื่องหมายแพ็คเก็ต โปรดทราบว่าคุณอาจต้องการเปลี่ยนกฎการยอมรับสำหรับ iptables เพื่อทำตามเครื่องหมาย
--fbegin
และ --fend
ธงก่อกวน: 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
หากคุณมีปัญหากับบางไซต์ที่เป็นพร็อกซีคุณสามารถเล่นกับค่าธงได้ ตัวอย่างเช่นสำหรับใครบางคน --faking-strategy=ttl
ใช้งานได้ คุณควรระบุ --fake-sni-ttl=<ttl value>
โดยที่ TTL คือปริมาณการกระโดดระหว่างคุณกับ DPI
หากคุณอยู่ในโครเมียมคุณอาจต้องปิดการใช้งาน Kyber (คุณสมบัติที่ทำให้ TLS clienthello ใหญ่มาก) ฉันมีปัญหากับมันบนเราเตอร์ดังนั้นเพื่อหลบหนีข้อผิดพลาดที่เป็นไปได้ดังนั้นจึงเป็นการดีกว่าที่จะปิดการใช้งาน: ใน chrome://flags
ค้นหา Kyber และเปลี่ยนเป็นสถานะปิดใช้งาน อีกทางเลือกหนึ่งคุณอาจตั้งค่า --sni-detection=brute
และอาจปรับ-ธง --sni-domains
หากเบราว์เซอร์ของคุณใช้ quic มันอาจทำงานไม่ถูกต้อง ปิดการใช้งานใน Chrome ใน chrome://flags
และใน Firefox network.http.http{2,3}.enable(d)
ใน about:config
ดูเหมือนว่า TSPU บางตัวเริ่มปิดกั้นแพ็คเก็ตผิดเซคดังนั้นคุณควรเล่นด้วยกลยุทธ์การแกล้งทำ โดยส่วนตัวฉันแนะนำให้เริ่มต้นด้วยกลยุทธ์การแกล้ง 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 กำลังทำงานบนคิว -num ที่ระบุ
ไม่อนุญาตให้ใช้งาน RawSocket ระบุว่าแพ็คเก็ตกำลังถูกลดลงตามกฎของ Nefilter ในความเป็นจริงนี่เป็นคำใบ้จากเคอร์เนลที่มีบางอย่างผิดปกติเกิดขึ้นและเราควรตรวจสอบกฎไฟร์วอลล์ ก่อนที่จะดำน้ำในปัญหาลองมาทำความสะอาดว่าแพ็คเก็ต mangled ถูกส่งไปอย่างไร Nefilter Queue ให้ความสามารถในการจัดการแพ็คเก็ตอย่างรวดเร็ว แต่ไม่เหมาะสำหรับโปรแกรมนี้เพราะเราจำเป็นต้องแยกแพ็คเก็ตออกเป็นอย่างน้อยสองแพ็คเก็ตอิสระ ดังนั้นเราจึงใช้ซ็อกเก็ต 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
และเคอร์เนลที่สร้างขึ้นด้วยการสนับสนุน nfqueue netfilter
แพ็คเกจนี้เข้ากันได้กับเราเตอร์ เราเตอร์ควรทำงานโดยระบบที่ใช้ Linux เช่น OpenWrt
คุณสามารถสร้างภายใต้ OpenWRT ด้วยสองตัวเลือก: ก่อน - ผ่าน SDK ซึ่งเป็นวิธีที่ต้องการและที่สองคือ cross -compile ด้วยตนเองด้วย OpenWRT Toolchain
OpenWRT จัดเตรียม SDK ระดับสูงสำหรับการสร้างแพ็คเกจ
ขั้นตอนแรกคือการดาวน์โหลดหรือรวบรวม OpenWRT SDK สำหรับแพลตฟอร์มเฉพาะของคุณ SDK สามารถรวบรวมได้ตามบทช่วยสอนนี้
นอกเหนือจากซอร์สโค้ดดิบของ SDK แล้ว OpenWrt ยังมี SDK ที่คอมไพล์ไว้ล่วงหน้าสำหรับเราเตอร์ของคุณ คุณสามารถค้นหาได้ในหน้าเราเตอร์ ตัวอย่างเช่นฉันมีเราเตอร์ที่ใช้ Ramips/MT76X8 ดังนั้น openwrt-sdk-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64
ฉัน SDK อยู่ที่ 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 ลงในนั้น
ทำ
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
.ipk
เชนเครื่องมือที่รวบรวมไว้ล่วงหน้าอยู่ใกล้กับ SDK ตัวอย่างเช่นเรียกว่า openwrt-toolchain-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64.tar.xz
เมื่อคุณดาวน์โหลด Toolchain ให้ใช้งานที่ไหนสักแห่ง ตอนนี้เราพร้อมสำหรับการรวบรวม Cross GCC ของฉันขอให้ฉันสร้างการแสดงละครสำหรับมันและส่งผ่านเป็นตัวแปรสภาพแวดล้อม นอกจากนี้คุณควรสังเกตเห็นแพ็คเกจเครื่องมือและแทนที่คำสั่ง 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
ไว้ที่นี่ สำหรับชื่อรุ่นเราเตอร์ของคุณอาจเป็นคู่มือการแข่งขันข้ามแบบอัตโนมัติจะเป็นประโยชน์
เมื่อทำการรวบรวมไฟล์ไบนารีจะอยู่ในไดเรกทอรีบิลด์ คัดลอกไปยังเราเตอร์ของคุณ โปรดทราบว่าการเข้าถึง SSH มีแนวโน้มที่จะต้องดำเนินการต่อ SSHFS ไม่ทำงานกับโมเดลของฉันดังนั้นฉันจึงฉีดแอปพลิเคชันไปยังเราเตอร์ผ่านหน้า แพ็คเกจอัปโหลดซอฟต์แวร์ มันทำให้ฉันมีข้อผิดพลาด แต่ยังรวมถึงไฟล์ /tmp/upload.ipk
ซึ่งฉันคัดลอกในไดเรกทอรีรูท, chmod +x
มันและเรียกใช้
ส่วนนี้อธิบายถึงเคอร์เนลโมดูลของ YouTubeUnBlock เวอร์ชัน โมดูลเคอร์เนลทำงานเป็นโมดูลปกติภายในเคอร์เนลและรวมเข้าด้วยกันภายในสแต็ก NetFilter เพื่อรวบรวมแพ็กเก็ตที่ส่งผ่านอินเทอร์เน็ตอย่างไร้สถิติ
คุณสามารถกำหนดค่าโมดูลด้วยธงใน INSMOD:
insmod kyoutubeUnblock.ko fake_sni=1 exclude_domains=.ru quic_drop=1
โปรดทราบว่าชื่อธงนั้นแตกต่างจากชื่อที่ใช้สำหรับ YouTubeUnBlock ปกติ (ถูกต้องเหมือนในการกำหนดค่า UCI สำหรับ OpenWRT): แทนที่ -
ด้วย _
และไม่นำ --
นอกจากนี้ในการกำหนดค่า togglers คุณควรตั้งค่าเป็น 1
( quic_drop=1
)
นอกจากนี้การพูดถึงที่ดีคือคำฟาง โมดูลเคอร์เนลรวม -ตัวเลือกและ -เงียบกับพารามิเตอร์หนึ่ง verbosity
พารามิเตอร์นี้ยอมรับข้อโต้แย้ง 3 ข้อ: trace
debug
และ silent
ฉันไม่แนะนำให้เปิดใช้งาน trace
Mod บนเราเตอร์เพราะอาจทำให้เกิดปัญหาใหญ่กับประสิทธิภาพและแม้กระทั่งการหยุดอุปกรณ์ของคุณ
นอกจากนี้ยังรองรับการเปลี่ยนการแทนที่สำหรับพารามิเตอร์ทั้งหมดที่ไม่รวมเครื่องหมายแพ็คเก็ต การเปลี่ยนในการเปลี่ยนไม่จำเป็นต้องมีการรีสตาร์ทโมดูลหากคุณต้องการเปลี่ยนพารามิเตอร์ คุณสามารถระบุและตรวจสอบพารามิเตอร์ภายในไดเรกทอรีของโมดูลภายใน sysfs: /sys/module/kyoutubeUnblock/parameters/
ตัวอย่างเช่นในการตั้งค่า quic_drop เป็นจริงคุณอาจใช้คำสั่งถัดไป:
echo 1 | sudo tee /sys/module/kyoutubeUnblock/parameters/quic_drop
และ
cat /sys/module/kyoutubeUnblock/parameters/quic_drop
เพื่อตรวจสอบพารามิเตอร์
ในการสร้างโมดูลเคอร์เนลบนระบบโฮสต์ของคุณคุณควรติดตั้ง linux-headers
ซึ่งจะให้เครื่องมือที่จำเป็นและชุดคอมไพเลอร์ gcc
ในระบบโฮสต์คุณสามารถสร้างโมดูลด้วย
make kmake
ในการสร้างโมดูลสำหรับเคอร์เนลภายนอกคุณควรสร้างเคอร์เนลนั้นในพื้นที่และชี้ไปที่มัน ใช้ KERNEL_BUILDER_MAKEDIR=~/linux
flag สำหรับ Make ตัวอย่างเช่น:
make kmake KERNEL_BUILDER_MAKEDIR=~/linux
โปรดทราบว่าเคอร์เนลควรได้รับการกำหนดค่าและสร้างแล้ว ดูคู่มือการสร้างเคอร์เนล Linux สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกรณีเฉพาะของคุณ
การสร้างด้วย OpenWrt SDK ไม่ใช่เรื่องยาก สิ่งเดียวที่คุณควรทำคือการได้รับ SDK คุณสามารถค้นหาได้โดยมองไปที่สถาปัตยกรรมและเวอร์ชันของ OpenWrt ที่ใช้ในปัจจุบัน คุณควรใช้ OpenWRT เวอร์ชันของคุณอย่างแน่นอนเนื่องจากเมล็ดมีการเปลี่ยนแปลงบ่อยครั้ง คุณสามารถค้นหา SDK ได้สองวิธี: โดยการดาวน์โหลดจากเว็บไซต์ของพวกเขาหรือโดยใช้คอนเทนเนอร์ OpenWRT SDK Docker (แนะนำ)
หากคุณตัดสินใจที่จะดาวน์โหลด TAR Archive ให้ทำตามขั้นตอนต่อไป: openwrt-sdk-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64
ฉันที่เก็บถาวรอาศัยอยู่ใน 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 ลงในนั้น
หรือคุณสามารถรับภาพนักเทียบท่าด้วย SDK ในตัว: https://hub.docker.com/u/openwrt/sdk ในกรณีของฉันภาพมีแท็ก ramips-mt76x8-23.05.3
สิ่งที่ดีที่นี่คือคุณไม่จำเป็นต้องติดตั้งการพึ่งพาใด ๆ ภายในคอนเทนเนอร์ Docker Docker Hub ยังมีการค้นหาที่สมบูรณ์แบบเกี่ยวกับแท็กหากคุณไม่แน่ใจว่าอันไหนสอดคล้องกับอุปกรณ์ของคุณ
เมื่อคุณแกะ/ติดตั้ง SDK คุณพร้อมที่จะเริ่มต้นด้วยการสร้างโมดูลเคอร์เนล
ทำ
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 ตรวจสอบคู่มือที่นี่ [rus]
หากคุณมีคำถาม/ข้อเสนอแนะ/ปัญหาใด ๆ อย่าลังเลที่จะเปิดปัญหา