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.
プログラムは2つのバージョンで配布されます。
このプログラムは、OpenWRT、Entware(Keenetic/Asus)、およびホストマシンに基づくルーターと互換性があります。このプログラムは、GitHubアクションを介してバイナリを提供します。バイナリは、Githubリリースを介しても利用できます。最新の最新のビルドには、最新のプレリリースを使用してください。これまでに編集されたすべてのバイナリを見たい場合は、GitHubアクションをチェックしてください。バイナリを使用するためにハードウェアのアーシテクチャを知っている必要があります。 OpenWrtでは、コマンドgrep ARCH /etc/openwrt_release
で確認できます。
OpenWrtとEntwareの両方で、OPKGを使用してプログラムをインストールします。読み取り専用ファイルシステムエラーが発生した場合、バイナリを手動で解凍するか、OPKGパスopkg -o <destdir>
を指定できます。
Windowsを使用するには、Valdikss(YouTubeで使用する方法を見つけることができます)によってGoodByedPiを使用します。LinuxのZapretパッケージにも同じ動作が実装されています。
リリースパッケージを入手したら、インストールする必要があります。 Routerインターフェイスに移動して、 System-> Softwareに移動し、リストを更新して、 install_Packageボタンを介してYouTubeunblockをインストールします。次に、 System-Startupメニューに移動してファイアウォールをリロードする必要があります(サービス - > 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
次のステップは、必要なファイアウォールルールを追加することです。
OpenWRTルールのNFTABLESの場合、すぐに入手し、 /usr/share/nftables.d/ruleset-post/537-youtubeUnblock.nft
share/nftables.d/ruleset-post/537-youtubeunblock.nftの下に保存されます。必要なのは、インストール要件とdo /etc/init.d/firewall reload
だけです。いいえの場合は、ファイアウォールの構成に移動します。
次に、構成に進みます。 OpenWrtの場合、ここではUCIとLuciを使用できる構成です(それぞれCLIとGUI)。
Luci aka aka gui aka web-interface of Routerの場合、通常のYouTubeunblockパッケージで行ったように、 luci-app-youtubunblockパッケージをインストールする必要があります。公式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
で使用できます。構成はフラグで行われます。フラグの名前は同じではないことに注意してください:あなたは置き換える必要があります-
_
、forフラグに--
を使用してはいけません。また、 1
のトグルフラグ(パラメーターなし)を有効にします。
たとえば、トレースログを有効にするには、実行する必要があります
uci set youtubeUnblock.youtubeUnblock.trace=1
logread -l 200 | grep youtubeUnblock
でCLIモードでログを確認できます。 logread -l 200 | grep youtubeUnblock
コマンド。
UCIの場合は、構成を保存するには、 uci commit
行う必要があります。YouTubeunblockを再起動するためにreload_config
CLIモードでは、YouTubeunblockを通常のinit.dサービスとして使用します。たとえば、 /etc/init.d/youtubeUnblock enable
で有効にすることができます。
KeeneticのEntwareの場合、インストールガイド(ロシア語)があります。
opkg install youtubeUnblock-*.ipk
。インストール後、/opt/etc/init.d/s51youtubeunblockのバイナリIn/opt/binとinitスクリプトが利用可能になります。 YouTubeunBlockを実行するには、 /opt/etc/init.d/S51youtubeUnblock start
を実行するだけです
ターゲットカーネルにnfnetlink_queueカーネルモジュールを使用する必要があることに注意してください。モジュールが無効になっている場合もあれば、存在しない場合もあります。 Entware S51youtubeunblockはKMODSを挿入しようとしますが、ソフトウェアによって提供されていない場合は、手動でインストールする必要があります。 KeeneticsのAfaikは、顧客がコンパイルしたモジュールを備えたリポジトリです。デバイスのWebインターフェイスのどこかに見つけることができます。他のルーターでは、その場合はより深い調査を行い、KMODを見つけたいかもしれません。何も見つからない場合は、LinuxカーネルのGPLコードを顧客に依頼し(またOpenWrtである場合もあります)、KMODを手動でコンパイルすることができます。
モジュールを挿入する必要があります(この手順は、ENTWAREおよびOPENWRTで省略できます):
modprobe nfnetlink_queue
ローカルホストでは、次のファイアウォールルールセットで出力チェーンに前方に変更してください。
youtubeUnblock.service
to /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の場合、IP6テーブルの上記のルールを複製する必要があります。
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 。最大スレッドはデフォルトで16ですが、プログラムで変更される場合があります。あなたがそれを増やそうとしている場合、ここであなたが間違った方法でいる可能性は100%であることに注意してください。
また、追加の匿名性には、HTTPSを介したDNSが推奨されます。
以下は、それが機能するかどうかをテストするコマンドです。
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
リスト。デフォルトのドメインリストを変更する場合は、この文字列を使用してください。 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 queue youtubeunblockの数がリンクされます。デフォルトは537です。
-fake - sni = --fake-sni={0|1}
このフラグは、 youtubeunblockがTLS clienthelloの1つではなく少なくとも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
0x03
、5バイト0x01
0x00
0x04
として使用されることを意味し0x02
。
--faking-strategy={randseq|ttl|tcp_check|pastseq|md5sum}
このフラグは、偽のパケットの無効化の戦略を決定します。デフォルトはrandseq
です
randseq
ランダムシーケンス/謝辞ランダムが設定されることを指定します。このオプションは、 Conntrackが無効なConntrack Stateファイアウォールルールの有効にドロップしてDropで使用するプロバイダーによって処理される場合があります。ttl
、Packetが--faking-ttl=n
ホップの後に無効になることを指定します。 ttl
方が優れていますが、構成されていない場合は問題を引き起こす可能性があります。pastseq
はrandseq
に似ていますが、シーケンス番号はランダムではありませんが、過去に送信されたパケットを参照してください(現在の前に)。tcp_check
Faking Packetを無効なチェックサムで無効にします。一部のプロバイダー/TSPUによって処理およびドロップされる場合があります。md5sum
無効なTCP MD5Sumで偽のパケットを無効にします。 MD5Sumは、宛先サーバーによって処理されますが、TSPUでスキップされる場合があるTCPオプションです。 --faking-ttl=<ttl>
偽のSNIメッセージのライブ(TTL)の時間を調整します。 TTLは、パケットがDPIシステムを通過し、それによってキャプチャされるように指定されていますが、宛先サーバーに到達しません。デフォルトは8です。
--fake-seq-offset
は、偽のパケットの元のシーケンス番号からオフセットを調整します。 Randseq Faking戦略で使用。デフォルトは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は、Position POSでパケットを分割します。デフォルトは1です。
--quic-drop
youtubeunblockに通じるすべてのquicパケットをドロップします。他のUDPパケットには影響しません。一部のテレビに適しています。このオプションを機能させるには、ファイアウォールのYouTubeunblockにプロキシUDPを追加する必要があることに注意してください。 connbytes
UDPで使用することもできます。
--fk-winsize=<winsize>
断片化されたTCPパケットのウィンドウサイズを指定します。応答を断片化する必要がある場合は適用されます。接続の初期化の速度が低下する場合があります。
--synfake={1|0}
1の場合、各リクエストの前にsynペイロードが送信されます。このアイデアは、Zapret ProjectのSyndataから取られています。 Synペイロードは通常、エンドポイントによって破棄されますが、TSPUによって処理される場合があります。このオプションは、そのペイロードに通常の偽物を送信します。オプションはすべてのサイトで機能するため、-Sni-Domainsは何も変更しないことに注意してください。
--synfake-len=<len>
シンフェイクで送信された偽のパケットが大きすぎる可能性があります。問題が発生した場合は、Synfake-Lenを下げてください。レンは、シンダタとしてどのくらいのバイトを送信するかを表しています。偽のパケット全体を送信する場合は0に合格します。デフォルトは0です
--sni-detection={parse|brute}
SNIの検出方法を指定します。 Parseは通常、クライアントのHelloメッセージを解析することにより、それを検出します。ブルートはメッセージ全体を通過し、SNIの発生の可能性を確認します。 --sni-domains
オプションがすべてがo(nm)時間の複雑さになるとは限らない場合、nはメッセージの長さを表し、mはドメインの数であることに注意してください。デフォルトは解析します。
--seg2delay=<delay>
このフラッグは、スプリットパケットの2番目のパケットを送信する前に、 YouTubeunblockを少し待つように強制します。
--silent
冗長モードを無効にします。
- デバッグの目的で最大冗長性--trace
。
--no-gso
GSOを使用するGoogle Chrome Fatパケットのサポートを無効にします。この機能は現在よくテストされているため、このフラグはおそらく何も修正しません。
--no-ipv6
IPv6のサポートを無効にします。 IPv6ソケットを開く必要がない場合に役立つ場合があります。
--threads=<threads number>
プログラムに実行するスレッドの量を指定します。これはデフォルトで1で、通常の使用のために編集しないでください。ただし、YouTubeunBlockの複数のキューインスタンスが本当に必要な場合は、(Queue-num to -queueバランスを変更する必要があることに注意してください。たとえば、4つのスレッドを使用して、iptablesで--queue-balance 537:540
を使用し、nftablesでqueue num 537-540
。
--packet-mark=<mark>
このオプションを使用して、youtubeunblockが他のシステムと競合する場合はパケットマークに依存しています。 IPTablesのMARKに従うために、受け入れてルールを変更したい場合があることに注意してください。
--fbegin
and --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
flagと--frag-sni-faked=1
試すことをお勧めします。一部のサイトがプロキシになっている場合に問題がある場合は、フラグの値で再生できます。たとえば、誰かの場合--faking-strategy=ttl
動作します。適切な--fake-sni-ttl=<ttl value>
を指定する必要があります。ここで、TTLはあなたとDPIの間のホップの量です。
Chromiumを使用している場合は、 Kyberを無効にする必要がある場合があります(TLS ClientHelloを非常に大きくする機能)。ルーターで問題が発生しているため、可能なエラーを逃れるために、それを無効にする方が良いです。Chrome chrome://flags
kyberを検索して、障害状態に切り替えます。または、 --sni-detection=brute
とおそらく調整--sni-domains
フラグを設定することもできます。
ブラウザがQUICを使用している場合、適切に機能しない場合があります。 chrome://flags
about:config
firefox network.http.http{2,3}.enable(d)
一部のTSPUは不正なパケットをブロックし始めたように思われるため、偽造戦略で遊んでください。私は個人的にmd5sum
Faking戦略から始めることをお勧めします。
テレビは最大の頭痛です。
この問題では、問題が解決されました。そして今、YouTubeunblockはデフォルトのフラグで動作するはずです。そうでない場合は、偽造戦略やその他の旗をいっぱいにしてください。また、QUICを無効にする必要があるかもしれません。それを行うには、適切なファイアウォール構成を備えた--quic-drop
フラグを使用できます(フラグの説明を確認)。このフラグはGQUICを無効にしないことに注意してください。一部のテレビはそれを中継する可能性があります。 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は多くの場所で発生する可能性がありますが、一般的にここには2つあります: MNL_CB_RUNとRAWSOCKET (raw_frags_sendと偽のSNIを送信する)を介してパケットを送信するとき。
MNL_CB_RUN操作は許可されていないことは、YouTubeunBlockの別のインスタンスが指定されたキューナムで実行されていることを示しています。
RawSocket操作は許可されていないことは、パケットがNEFILTERルールによって削除されていることを示しています。実際、これはカーネルからのヒントであり、何か間違ったことが起こっているため、ファイアウォールのルールを確認する必要があります。問題に飛び込む前に、マングルされたパケットがどのように送信されているかをきれいにしましょう。 Nefilter Queueは、パケットを少なくとも2つの独立したパケットに分割する必要があるため、フライでパケットをマングルする機能を提供しますが、このプログラムには適していません。そのため、IPv4パケットを送信できるLinux Raw Socketsを使用しています。パケットは、nfqueueがフォワードにセットアップされている場合でも、出力チェーンから移動します(OpenWRTに適しています)。したがって、ここでパケットの拒否を逃れる必要があります。
iptables -I OUTPUT -m mark --mark 32768/32768 -j ACCEPT
/nftablesを配置する必要があります。または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
が含まれます。パッケージには、NetFilter NFQueueサポートで構築されたlinux-headers
とカーネルが必要です。
パッケージはルーターとも互換性があります。ルーターは、OpenWRTなどのLinuxベースのシステムによって実行される必要があります。
OpenWRTの下で2つのオプションを使用できます。1つ目はSDKを介して、OpenWRTツールチェーンを使用して手動でクロスコンパイルです。
OpenWRTは、パッケージビルドに高レベルのSDKを提供します。
最初のステップは、特定のプラットフォーム用にOpenWrt SDKをダウンロードまたはコンパイルすることです。 SDKは、このチュートリアルに従ってコンパイルできます。
SDKのRAWソースコードに加えて、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
と呼ばれます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 GCCは、ステージングディレクトを作成し、環境変数として渡すように頼みました。また、ToolSuiteパッケージに気づき、Make Commandをあなたのものに置き換える必要があります。
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は私のモデルで動作しないため、ソフトウェアアップロードパッケージページを介してアプリケーションをルーターに注入しました。エラーが発生しましたが、rootディレクトリでコピーしたa /tmp/upload.ipk
ファイル、 chmod +x
it and runも与えてくれました。
このセクションでは、YouTubeunblockのカーネルモジュールバージョンについて説明します。カーネルモジュールは、カーネル内の通常のモジュールとして動作し、ネットフィルタースタック内に統合して、インターネットを介して送信されたパケットをステートルにマングルします。
insmodでフラグを使用してモジュールを構成できます。
insmod kyoutubeUnblock.ko fake_sni=1 exclude_domains=.ru quic_drop=1
フラグ名は-
通常のYouTubeunblock --
OpenWrtのUCI構成のように)に使用されるフラグ名とは異なること_
注意してください。また、トグを構成するには、 1
( quic_drop=1
)に設定する必要があります
また、言及するのに適したものは冗長です。カーネルモジュールは、1つのパラメーターverbosity
に - トレースと - シレントオプションを組み合わせます。このパラメーターは、 trace
、 debug
、 silent
の3つの引数を受け入れます。ルーターでtrace
Modを有効にすることは、パフォーマンスに大きな問題を引き起こしたり、デバイスをフリーズすることもできるため、あまりお勧めしません。
また、パケットマークを除くすべてのパラメーターに対して、交換の低下がサポートされています。パラメーターを変更する場合、交換の低下はモジュールの再起動を必要としません。 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
外部カーネル用のモジュールを構築するには、そのカーネルをローカルに構築し、ポイントに作成する必要があります。 makeにKERNEL_BUILDER_MAKEDIR=~/linux
フラグを使用してください。
make kmake KERNEL_BUILDER_MAKEDIR=~/linux
カーネルは既に構成および構築する必要があることに注意してください。特定のケースの詳細については、Linuxカーネルビルディングマニュアルを参照してください。
OpenWrt SDKを使用した建物はそれほど難しいことではありません。あなたがすべきことは、SDKを取得することです。現在使用されているOpenWrtのアーキテクチャとバージョンを見ることで、それを見つけることができます。そこにあるカーネルが頻繁に変更されるため、OpenWrtの正確なバージョンを使用する必要があります。 SDKは2つの方法で見つけることができます。サイトからダウンロードするか、OpenWrt SDK Dockerコンテナを使用して(推奨)。
Tar Archiveをダウンロードすることにした場合は、次の手順に従ってください。私のために、アーカイブは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が内蔵されているdocker画像を取得できます: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]
質問/提案/問題がある場合は、お気軽に問題を開いてください。