このソフトウェアは、特定の Web サイトへのアクセスをブロックする多くのインターネット サービス プロバイダーに搭載されているディープ パケット インスペクション システムをバイパスするように設計されています。
データをブロックせず、要求された宛先よりも速く応答するだけの光スプリッターまたはポート ミラーリング (パッシブ DPI ) を使用して接続された DPI と、順番に接続されたアクティブ DPIを処理します。
Windows 7、8、8.1、10、または 11には管理者権限が必要です。
これらのスクリプトは、(DNS ポイズニングを防ぐため) 非標準ポート上の Yandex DNS への DNS リゾルバー リダイレクトを使用して、推奨モードで GoodbyeDPI を起動します。
うまくいけば、おめでとうございます!そのまま使用することも、さらに構成することもできます。
リリースページから最新バージョンをダウンロードして実行します。
Usage: goodbyedpi.exe [OPTION...]
-p block passive DPI
-q block QUIC/HTTP3
-r replace Host with hoSt
-s remove space between host header and its value
-m mix Host header case (test.com -> tEsT.cOm)
-f set HTTP fragmentation to value
-k enable HTTP persistent (keep-alive) fragmentation and set it to value
-n do not wait for first segment ACK when -k is enabled
-e set HTTPS fragmentation to value
-a additional space between Method and Request-URI (enables -s, may break sites)
-w try to find and parse HTTP traffic on all processed ports (not only on port 80)
--port additional TCP port to perform fragmentation on (and HTTP tricks with -w)
--ip-id handle additional IP ID (decimal, drop redirects and TCP RSTs with this ID).
This option can be supplied multiple times.
--dns-addr redirect UDP DNS requests to the supplied IP address (experimental)
--dns-port redirect UDP DNS requests to the supplied port (53 by default)
--dnsv6-addr redirect UDPv6 DNS requests to the supplied IPv6 address (experimental)
--dnsv6-port redirect UDPv6 DNS requests to the supplied port (53 by default)
--dns-verb print verbose DNS redirection messages
--blacklist perform circumvention tricks only to host names and subdomains from
supplied text file (HTTP Host/TLS SNI).
This option can be supplied multiple times.
--allow-no-sni perform circumvention if TLS SNI can't be detected with --blacklist enabled.
--frag-by-sni if SNI is detected in TLS packet, fragment the packet right before SNI value.
--set-ttl activate Fake Request Mode and send it with supplied TTL value.
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
--auto-ttl [a1-a2-m] activate Fake Request Mode, automatically detect TTL and decrease
it based on a distance. If the distance is shorter than a2, TTL is decreased
by a2. If it's longer, (a1; a2) scale is used with the distance as a weight.
If the resulting TTL is more than m(ax), set it to m.
Default (if set): --auto-ttl 1-4-10. Also sets --min-ttl 3.
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
--min-ttl minimum TTL distance (128/64 - TTL) for which to send Fake Request
in --set-ttl and --auto-ttl modes.
--wrong-chksum activate Fake Request Mode and send it with incorrect TCP checksum.
May not work in a VM or with some routers, but is safer than set-ttl.
--wrong-seq activate Fake Request Mode and send it with TCP SEQ/ACK in the past.
--native-frag fragment (split) the packets by sending them in smaller packets, without
shrinking the Window Size. Works faster (does not slow down the connection)
and better.
--reverse-frag fragment (split) the packets just as --native-frag, but send them in the
reversed order. Works with the websites which could not handle segmented
HTTPS TLS ClientHello (because they receive the TCP flow "combined").
--fake-from-hex Load fake packets for Fake Request Mode from HEX values (like 1234abcDEF).
This option can be supplied multiple times, in this case each fake packet
would be sent on every request in the command line argument order.
--fake-with-sni Generate fake packets for Fake Request Mode with given SNI domain name.
The packets mimic Mozilla Firefox 130 TLS ClientHello packet
(with random generated fake SessionID, key shares and ECH grease).
Can be supplied multiple times for multiple fake packets.
--fake-gen Generate random-filled fake packets for Fake Request Mode, value of them
(up to 30).
--fake-resend Send each fake packet value number of times.
Default: 1 (send each packet once).
--max-payload [value] packets with TCP payload data more than [value] won't be processed.
Use this option to reduce CPU usage by skipping huge amount of data
(like file transfers) in already established sessions.
May skip some huge HTTP requests from being processed.
Default (if set): --max-payload 1200.
LEGACY modesets:
-1 -p -r -s -f 2 -k 2 -n -e 2 (most compatible mode)
-2 -p -r -s -f 2 -k 2 -n -e 40 (better speed for HTTPS yet still compatible)
-3 -p -r -s -e 40 (better speed for HTTP and HTTPS)
-4 -p -r -s (best speed)
Modern modesets (more stable, more compatible, faster):
-5 -f 2 -e 2 --auto-ttl --reverse-frag --max-payload
-6 -f 2 -e 2 --wrong-seq --reverse-frag --max-payload
-7 -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload
-8 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload
-9 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q (this is the default)
Note: combination of --wrong-seq and --wrong-chksum generates two different fake packets.
ISP の DPI が回避できるかどうかを確認するには、まず、ブラウザで「セキュア DNS (DNS over HTTPS)」オプションを有効にして、プロバイダーが DNS 応答を汚染していないことを確認します。
次に、オプションを指定せずに、 goodbyedpi.exe
実行可能ファイルを実行します。うまくいけば、おめでとうございます!これをそのまま使用することも、お住まいの国でブロックされた Web サイトのリストが既知で利用可能な場合は、 --blacklist
オプションを使用するなどしてさらに構成することもできます。
プロバイダーが DNS リクエストを傍受する場合は、非標準ポート (Yandex DNS 77.88.8.8:1253
など) で実行されているパブリック DNS リゾルバーに--dns-addr
オプションを使用するか、3 番目のポートを使用して HTTPS/TLS 経由で DNS を構成することをお勧めします。パーティーアプリケーション。
.cmd スクリプトを確認し、好みやネットワークの状況に応じて変更します。
ほとんどのパッシブ DPI は、ブロックされた Web サイトに HTTP 経由でアクセスしようとすると HTTP 302 リダイレクトを送信し、HTTPS の場合は宛先 Web サイトよりも速く TCP リセットを送信します。ロシアのプロバイダーで見られるように、DPI によって送信されるパケットには、通常、 0x0000
または0x0001
に等しい IP 識別フィールドがあります。これらのパケットは、別の Web サイト (検閲ページ) にリダイレクトされる場合、GoodbyeDPI によってブロックされます。
アクティブ DPI は騙すのがさらに困難です。現在、ソフトウェアはアクティブ DPI を回避するために 7 つの方法を使用しています。
Host
ヘッダーをhoSt
に置き換えるHost
ヘッダーのヘッダー名と値の間のスペースを削除するこれらの方法は TCP および HTTP 標準と完全に互換性があるため、Web サイトを破壊することはありませんが、DPI データの分類を防ぎ、検閲を回避するには十分です。スペースを追加すると、一部の Web サイトが壊れる可能性がありますが、HTTP/1.1 仕様では許容されます (19.3 耐性のあるアプリケーションを参照)。
このプログラムは、Windows フィルタリング プラットフォームを使用してフィルタを設定し、パケットをユーザー空間にリダイレクトする WinDivert ドライバをロードします。コンソール ウィンドウが表示されている限り実行され、ウィンドウを閉じると終了します。
このプロジェクトは、 GNU Makeおよびmingw を使用してビルドできます。唯一の依存関係は WinDivert です。
x86 exe をビルドするには、次のコマンドを実行します。
make CPREFIX=i686-w64-mingw32- WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/x86
x86_64 の場合:
make CPREFIX=x86_64-w64-mingw32- BIT64=1 WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/amd64
service_install_russia_blacklist.cmd
、 service_install_russia_blacklist_dnsredir.cmd
、およびservice_remove.cmd
スクリプトの例を確認してください。
必要に応じて変更してください。
Advanced Stream Detect
GoodbyeDPI と互換性がないため、無効にします。@basil00、WinDivert に感謝します。それがこのプログラムの主要な部分です。
BlockCheck の貢献者全員に感謝します。このユーティリティなしでは DPI の動作を理解することは不可能です。