SNI에 의존하는 딥 패킷 검사 (DPI) 시스템을 우회합니다. 패키지는 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 액션을 확인하십시오. 바이너리를 사용하려면 하드웨어의 자문을 알아야합니다. OpenWrt에서는 grep ARCH /etc/openwrt_release
명령으로 확인할 수 있습니다.
OpenWrt 및 Entware 모두에서 OPKG로 프로그램을 설치하십시오. 읽기 전용 파일 시스템 오류가 발생하면 바이너리를 수동으로 포장하거나 OPKG PATH opkg -o <destdir>
지정할 수 있습니다.
Windows의 경우 Valdikss의 GoodbyEdpi를 사용하는 경우 (YouTube에서 사용하는 방법을 찾을 수 있음) Linux 용 Zapret 패키지에서도 동일한 동작도 구현됩니다.
릴리스 패키지가 있으면 설치해야합니다. 라우터 인터페이스로 이동하여 System-> 소프트웨어 로 이동하고 설치 _package 버튼을 통해 업데이트 목록을 작성하고 YouTubeUnblock을 설치하십시오. 그런 다음 System-Startup 메뉴로 이동하여 방화벽을 다시로드해야합니다 ( 서비스-> YouTubeUnBlock 메뉴 내에서 수행 할 수도 있음).
작동하려면 iPtables 규칙을 등록하고 필요한 커널 모듈을 설치해야합니다. 모듈 목록은 OpenWrt 버전과 사용하는 방화벽 (iptables 또는 nftables)에 따라 다릅니다. 대부분의 최신 버전의 OpenWrt (v23.x, v22.x)의 경우 nftables 규칙을 사용해야합니다.
일반적인 의존성은입니다
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
다음 단계는 필요한 방화벽 규칙을 추가하는 것입니다.
OpenWrt 규칙에 대한 NFTABLE의 경우 /usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft
에 저장됩니다. 설치 요구 사항 및 /etc/init.d/firewall reload
만 있으면됩니다. 아니요, 방화벽 구성으로 이동하십시오.
이제 우리는 구성으로 이동합니다. OpenWrt의 경우 여기 UCI 및 Luci를 통한 구성이 있습니다 (각각 CLI 및 GUI).
Luci AKA GUI 일명 라우터의 웹 인터페이스 의 경우 일반적인 YouTubeUnBlock 패키지로 수행 한 것처럼 Luci-App-YoutubeUnblock 패키지를 설치해야합니다. 공식 OPKG 피드 목록에로드해야합니다 ( 업데이트 목록 옵션으로 수행 ).
* pkg_hash_check_unresolved: cannot find dependency luci-lua-runtime for luci-app-youtubeUnblock
. Old OpenWrt를 사용하고 있습니다. 이 더미 패키지를 설치하십시오. 자세한 내용은이 의견을 확인하십시오.
Luci 구성은 서비스-> YouTubeUnblock 섹션에 있습니다. 각 깃발에 대한 설명과 함께 자기 설명입니다. Save & Apply
버튼을 누른 후 구성이 자동으로 적용되고 서비스가 다시 시작됩니다.
UCI 구성은 youtubeUnblock.youtubeUnblock
섹션에서/etc/config/youtubeunblock 파일에서 사용할 수 있습니다. 구성은 플래그로 수행됩니다. 플래그의 이름은 동일하지 않습니다. _
로 -
해야 --
. 또한 1
로 플래그 (매개 변수없이) 토글을 활성화합니다.
예를 들어 추적 로그를 활성화하려면 수행해야합니다
uci set youtubeUnblock.youtubeUnblock.trace=1
logread -l 200 | grep youtubeUnblock
로 CLI 모드로 로그를 확인할 수 있습니다. logread -l 200 | grep youtubeUnblock
명령.
UCI의 경우 구성을 저장하려면 uci commit
수행 한 다음 reload_config
수행하여 YouTubeUnBlock을 다시 시작해야합니다.
CLI 모드에서는 YouTubeUnBlock을 일반 init.d 서비스로 사용합니다. 예를 들어, /etc/init.d/youtubeUnblock enable
사용하여 활성화 할 수 있습니다.
Keenetic의 Entware의 경우 여기에는 설치 안내서 (러시아어)가 있습니다.
opkg install youtubeUnblock-*.ipk
로 바이너리를 설치하십시오. 설치 후/opt/bin의 바이너리 및/opt/etc/init.d/s51youtubeunblock의 INIT 스크립트를 사용할 수 있습니다. YouTubeUnBlock을 실행하려면 /opt/etc/init.d/S51youtubeUnblock start
실행하십시오
NFNetLink_Queue 커널 모듈로 대상 커널을 공급해야합니다. 모듈은 비활성화되거나 존재하지 않을 수 있습니다. ENTWARE S51YOUTUBEUNBLOCK은 KMOD를 어떤 식 으로든 삽입하려고 시도하지만 소프트웨어로 제공되지 않으면 수동으로 설치해야합니다. Keenetics에 대한 Afaik은 고객이 컴파일 한 모듈이있는 저장소입니다. 장치의 웹 인터페이스 어딘가에서 찾을 수 있습니다. 다른 라우터에서는이 경우 더 깊은 연구를하고 KMOD를 찾을 수 있습니다. 아무것도 찾을 수 없다면 고객에게 Linux 커널의 GPL 코드 (및 OpenWrt)를 요청하고 kmods를 수동으로 컴파일 할 수 있습니다.
모듈을 삽입해야합니다 (이 단계는 Entware 및 OpenWrt에서 생략 될 수 있습니다) :
modprobe nfnetlink_queue
로컬 호스트의 경우 다음 방화벽 규칙 세트에서 출력 체인 으로 전달하십시오.
youtubeUnblock.service
/usr/lib/systemd/system
으로 복사합니다 (예 : /usr/bin/youtubeUnblock
과 같은 파일 내부의 경로를 프로그램 위치로 변경해야 할 수도 있습니다. 수동으로 제어). 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
iptables의 IPv6의 경우 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을 사용하여 연결에서 YouTubeUnblock 로 처음 20 개의 패킷 만 라우팅합니다. 예를 들어 YouTubeUnblock 과 같은 문제가 발생하면 YouTube를 감지하지 못하고 규칙에서 Connbytes를 삭제하십시오. 그러나 그것은 가능성이 거의 없으며 규칙 세트를 확인해야 할 것입니다.
성능을 위해 여러 인스턴스의 YouTubeUnBlock 인스턴스와 함께 --queue-balance
사용할 수 있습니다. 이 동작은 멀티 스레딩을 통해 지원됩니다. 전달 --threads=n
여기서 N은 활성화하려는 많은 스레드를 나타냅니다. n은 기본값 1으로 1 입니다. 최대 스레드는 기본값이 16 으로 표시되지만 프로그래밍 방식으로 변경 될 수 있습니다. 당신이 그것을 늘리려고한다면, 당신이 잘못된 길을 가질 확률은 100%입니다.
또한 추가 익명성에 대해 HTTPS보다 DN이 선호됩니다.
다음은 작동 여부를 테스트하는 명령입니다.
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에있는 경우 스크립트 안에 플래그를 넣어야합니다. vi 또는 nano와 같은 텍스트 편집기와 함께 /etc/init.d/youtubeUnblock
을 켜고 procd_set_param command /usr/bin/youtubeUnblock
줄 뒤에 플래그를 넣으십시오.
사용 가능한 깃발 :
--sni-domains=<comma separated domain list>|all
도메인 목록. 기본 도메인 목록을 변경하려면이 문자열을 사용하십시오. 기본적으로 googlevideo.com,ggpht.com,ytimg.com,youtube.com,play.google.com,youtu.be,googleapis.com,googleusercontent.com,gstatic.com,l.google.com
. 모든 ClientHello가 처리되기를 원한다면 모든 것을 전달할 수 있습니다. --exclude-domains
플래그로 일부 도메인을 제외 할 수 있습니다.
--exclude-domains=<comma separated domain list>
타겟팅에서 제외 할 도메인 목록.
--queue-num=<number of netfilter queue>
NetFilter 큐 YouTubeUnBlock 의 수는 다음과 같습니다. 기본값은 537 입니다.
-fake - --fake-sni={0|1}
이 플래그는 youtubeunblock에게 tls clientHello 가 있는 하나 대신 3 개 이상의 패킷을 보내도록 가짜 sni를 활성화합니다. 이 플래그는 일부 작업이 허용되지 않은 오류 메시지와 관련이있을 수 있으므로 문제를 열기 전에 EPERM에 대한 문제 해결을 참조하십시오. 기본값은 1 입니다.
--fake-sni-seq-len=<length>
이 플래그는 YouTubeUnblock을 지정하여 가짜 클라이언트 헬로 패킷의 복잡한 구성을 구축합니다. 길이는 얼마나 많은 가짜가 보내질 것인지 결정합니다. 기본값은 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
랜덤 시퀀스/envidentgemend random이 설정 될 것을 지정합니다. 이 옵션은 유효하지 않은 Conntrack State Firewall 규칙을 사용하여 Conntrack을 사용하는 제공자가 처리 할 수 있습니다.ttl
패킷이 --faking-ttl=n
홉 후에 무효화 될 것이라고 지정합니다. ttl
이 더 좋지만 구성되지 않은 경우 문제를 일으킬 수 있습니다.pastseq
는 randseq
와 같지만 시퀀스 번호는 무작위가 아니지만 과거에 전송 된 패킷 (현재).tcp_check
유효하지 않은 체크섬으로 가짜 패킷을 무효화합니다. 일부 제공 업체/TSPU에 의해 처리 및 삭제 될 수 있습니다.md5sum
유효하지 않은 TCP MD5SUM으로 가짜 패킷을 무효화합니다. MD5SUM은 대상 서버에서 처리하지만 TSPU에서 건너 뛸 수있는 TCP 옵션입니다. --faking-ttl=<ttl>
가짜 SNI 메시지의 라이브 시간 (TTL)을 조정합니다. TTL은 패킷이 DPI 시스템을 거쳐 캡처되지만 대상 서버에 도달하지는 않습니다. 기본값은 8 까지.
--fake-seq-offset
은 가짜 패킷의 원래 시퀀스 번호에서 오프셋을 조정합니다. 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을 지정하여 가짜 패킷이 가까운 클라이언트 hello (0을 채우는 페이로드를 채우기)를 보내십시오. 기본값은 0 까지.
--frag-middle-sni={0|1}
이 옵션을 사용하여 YouTubeUnBlock은 SNI 데이터 중간에 패킷을 분할합니다. 기본값은 1입니다.
--frag-sni-pos=<pos>
이 옵션을 사용하면 YouTubeUnBlock이 위치 POS에서 패킷을 분할합니다. 기본값은 1입니다.
--quic-drop
YouTubeUnBlock으로 이동하는 모든 quic 패킷을 떨어 뜨립니다. 다른 UDP 패킷에는 영향을 미치지 않습니다. 일부 TV에 적합합니다. 이 옵션이 작동하려면 방화벽의 YouTubeUnBlock에 프록시 UDP를 추가해야합니다. connbytes
UDP와 함께 사용될 수 있습니다.
--fk-winsize=<winsize>
조각난 TCP 패킷의 창 크기를 지정합니다. 응답을 파편화하려는 경우 적용 할 수 있습니다. 연결 초기화를 둔화시킬 수 있습니다.
--synfake={1|0}
1이면 각 요청 전에 Syn Payload가 전송됩니다. 이 아이디어는 Zapret Project의 Syndata에서 가져온 것입니다. Syn Payload는 일반적으로 엔드 포인트에 의해 폐기되지만 TSPU에서 처리 할 수 있습니다. 이 옵션은 해당 페이로드에서 일반 가짜를 보냅니다. 옵션은 모든 사이트에 대해 작동하므로 -sni-domains는 아무것도 변경하지 않습니다.
--synfake-len=<len>
신 파이크로 전송 된 가짜 패킷은 너무 클 수 있습니다. 문제가 발생하면 신파 렌트를 낮추십시오. Len이 Syndata로 얼마나 많은 바이트를 보내야 하는가. 가짜 패킷 전체를 보내려면 0을 통과하십시오. 기본값은 0까지
--sni-detection={parse|brute}
SNI를 감지하는 방법을 지정합니다. 구문 분석은 일반적으로 클라이언트 Hello Message를 구문 분석하여이를 감지합니다. Brute는 전체 메시지를 거쳐 SNI 발생 가능성을 확인합니다. --sni-domains
옵션이 모두 무차별이 아닌 경우 N은 메시지 길이를 나타내고 M은 도메인의 수입니다. 기본값은 구문 분석합니다.
--seg2delay=<delay>
이 플래그는 youtubeunblock이 분할 패킷의 두 번째 부분을 보내기 전에 약간 기다리게합니다.
--silent
장점 모드를 비활성화합니다.
--trace
디버깅 목적을위한 최대 구동성.
--no-gso
GSO를 사용하는 Google Chrome Fat Packets를 지원하지 않습니다. 이 기능은 지금 잘 테스트되어 있으므로이 깃발은 아마도 아무것도 고치지 않을 것입니다.
--no-ipv6
IPv6에 대한 지원을 비활성화합니다. IPv6 소켓을 열지 않으려면 유용 할 수 있습니다.
--threads=<threads number>
프로그램에 대해 실행하려는 스레드의 양을 지정합니다. 이 기본값은 1 로 1로, 정상적인 사용을 위해 편집해서는 안됩니다. 그러나 YouTubeUnblock의 여러 대기열 인스턴스를 원한다면 (Queue-Num)-Queue Balance로 변경해야합니다. 예를 들어, 4 개의 스레드를 사용하면 iptables에서 --queue-balance 537:540
사용하고 nftables에서 queue num 537-540
사용하십시오.
--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
. 이 세트의 우선 순위는 뒤로갑니다. 마지막으로, 기본값 (-pbegin으로 시작하지 않는 것은 마지막)입니다. 새 섹션을 시작하면 매개 변수가없는 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://flags
및 Firefox network.http.http{2,3}.enable(d)
에서 Chrome에서 about:config
하십시오.
일부 TSPU가 잘못된 eq 패킷을 차단하기 시작한 것처럼 보이므로 가짜 전략을 가지고 놀아야합니다. 나는 개인적으로 md5sum
가짜 전략으로 시작하는 것이 좋습니다.
텔레비전은 가장 큰 두통입니다.
이 문제에서는 문제가 해결되었습니다. 이제 YouTubeUnBlock은 기본 플래그에서 작동해야합니다. 그렇지 않다면, 가짜 전략과 다른 깃발을 가지고 놀십시오. 또한 quic을 비활성화해야 할 수도 있습니다. 이를 위해서는 적절한 방화벽 구성이있는 --quic-drop
플래그 (플래그의 설명을 확인)를 사용할 수 있습니다. 이 플래그는 gquic을 비활성화하지 않으며 일부 TV는이를 중계 할 수 있습니다. gquic을 비활성화하려면 방화벽 구성에서 UDP 용 전체 443 포트를 차단해야합니다.
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 과 RAWSOCKE (RAW_FRAGS_SEND 및 FAKE SNI를 보내기)를 통해 패킷을 보낼 때 두 가지가 있습니다.
MNL_CB_RUN 작업 허용되지 않으면 youTubeUnBlock의 다른 인스턴스가 지정된 큐에서 실행 중임을 나타냅니다.
RawSocket 작동이 허용되지 않으면 패킷이 Nefilter 규칙에 의해 삭제되고 있음을 나타냅니다. 실제로 이것은 커널의 힌트로 무언가 잘못되고 있으며 방화벽 규칙을 확인해야합니다. 문제에 빠지기 전에 엉망진창 패킷이 어떻게 전송되는지 깨끗하게 만들어 봅시다. Nefilter Deue는 패킷을 즉석에서 밀어 넣을 수있는 기능을 제공하지만 패킷을 적어도 두 개의 독립적 인 패킷으로 분할해야하기 때문에이 프로그램에 적합하지 않습니다. 따라서 IPv4 패킷을 보낼 수있는 Linux 원시 소켓을 사용하고 있습니다. 패킷은 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
와 NetFilter NFqueue 지원으로 제작 된 커널이 필요합니다.
패키지는 라우터와도 호환됩니다. 라우터는 OpenWrt와 같은 Linux 기반 시스템에서 실행해야합니다.
OpenWrt 아래에 두 가지 옵션으로 구축 할 수 있습니다. 첫 번째 - SDK를 통해 선호하는 방법이며 두 번째는 OpenWrt 도구 체인을 사용하여 수동으로 크로스 컴파일됩니다.
OpenWrt는 패키지 빌드에 고급 SDK를 제공합니다.
첫 번째 단계는 특정 플랫폼에 대해 OpenWrt SDK를 다운로드하거나 컴파일하는 것입니다. SDK는이 튜토리얼에 따라 편집 할 수 있습니다.
SDK의 원시 소스 코드 외에도 OpenWrt는 라우터에 대한 사전 컴파일 된 SDK를 제공합니다. 라우터 페이지에서 찾을 수 있습니다. 예를 들어, RAMIPS/MT76X8 기반 라우터가 있으므로 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 이미지를 사용하십시오. 일부 Makeystem이 실패하기 때문에 뿌리가 아닌 사용자가되어야합니다. 다음으로 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
라고합니다. 도구 체인을 다운로드하면 어딘가에 틀리지 않습니다. 이제 우리는 편집 준비가되었습니다. 내 크로스 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
여기에 넣었습니다. 라우터 모델 이름의 경우 Automake 크로스 컴파일 매뉴얼이 도움이 될 수 있습니다.
컴파일이 완료되면 바이너리 파일은 빌드 디렉토리에 있습니다. 라우터에 복사하십시오. SSH 액세스가 진행되어야 할 가능성이 높습니다. SSHFS는 내 모델에서 작동하지 않으므로 소프트웨어 업로드 패키지 페이지를 통해 라우터에 응용 프로그램을 주입했습니다. 루트 디렉토리에 복사 한 /tmp/upload.ipk
파일, chmod +x
it it it it in 오류가 주어졌습니다.
이 섹션에서는 YouTubeUnblock의 커널 모듈 버전에 대해 설명합니다. 커널 모듈은 커널 내부의 일반 모듈로 작동하며 NetFilter 스택 내에 통합하여 인터넷을 통해 전송 된 패킷을 무국적으로 관리합니다.
Insmod에서 플래그로 모듈을 구성 할 수 있습니다.
insmod kyoutubeUnblock.ko fake_sni=1 exclude_domains=.ru quic_drop=1
플래그 이름은 일반 YouTubeUnBlock (OpenWrt의 UCI 구성에서와 같이)에 사용되는 이름과 다릅니다. 대체 -
_
및 --
로 대체하십시오. 또한 토글러를 구성하려면 1
으로 설정해야합니다 ( quic_drop=1
).
또한 언급 할 좋은 사람은 구두입니다. 커널 모듈은 -트레이스 및 -실런트 옵션을 하나의 매개 변수의 verbosity
와 결합합니다. 이 매개 변수는 trace
, debug
및 silent
의 3 인수를 허용합니다. 성능에 큰 문제가 발생하고 장치를 동결 할 수 있기 때문에 라우터에서 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
매개 변수를 확인합니다.
호스트 시스템에 커널 모듈을 구축하려면 빌드 필수 도구 및 gcc
컴파일러 제품군을 제공하는 linux-headers
설치해야합니다. 호스트 시스템에서는 모듈을 구축 할 수 있습니다
make kmake
외부 커널 용 모듈을 만들려면 해당 커널을 로컬로 빌드하고 포인트를 만들어야합니다. KERNEL_BUILDER_MAKEDIR=~/linux
플래그를 사용하여 다음과 같습니다.
make kmake KERNEL_BUILDER_MAKEDIR=~/linux
커널은 이미 구성되고 빌드되어야합니다. 특정 사례에 대한 자세한 내용은 Linux 커널 빌딩 설명서를 참조하십시오.
OpenWrt SDK로 건물은 그렇게 어렵지 않습니다. 당신이해야 할 유일한 일은 SDK를 얻는 것입니다. 현재 사용되는 OpenWrt의 아키텍처 및 버전을 살펴보면 찾을 수 있습니다. 커널이 자주 변경되므로 OpenWrt의 정확한 버전을 사용해야합니다. SDK를 사이트에서 다운로드하거나 OpenWrt SDK Docker 컨테이너 (권장)를 사용하여 SDK를 찾을 수 있습니다.
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
에 살고 있습니다. openwrt-sdk-23.05.3-ramips-mt76x8_gcc-12.3.0_musl.Linux-x86_64
. 문제가 있으시면 시스템에 SDK 요구 사항을 설치해야합니다. Docker Ubuntu : 24.04 이미지를 사용하십시오. 일부 Makeystem이 실패하기 때문에 뿌리가 아닌 사용자가되어야합니다. 다음으로 SDK와 CD를 사용하지 않습니다.
또는 sdk 내장 (https://hub.docker.com/u/openwrt/sdk)으로 Docker 이미지를 얻을 수 있습니다. 내 경우 이미지에는 TAG 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]
질문/제안/문제가 있으시면 자유롭게 문제를여십시오.