二叉树树

二叉树树

瞎几吧写

GFWを回避する方法について考えてみましょう

まず、GFW がどのように私たちのトラフィックをブロックしているかを理解する必要があります#

  1. IP ブラックホール:現在解決策はありませんが、一部のサービスに対してのみブラックホールが存在します。例えば、Google 系(Google、Twitter、YouTube など)

  2. DNS 汚染:ドメイン名に対して偽の IP を返します。hosts ファイルを使用してドメイン名に対応する IP を強制的に指定するか、暗号化された DNS(DoH、DNS 署名など)を使用します。

  3. HTTP ハイジャック:トラフィックが暗号化されていないため、GFW は天然の中間者として直接改ざんできます(例:404 ページへのリダイレクト、詐欺防止ページへのハイジャックなど)。HTTPS 接続を使用して回避できますが、SNI ブロックに遭遇する可能性があります。

  4. SNI ブロック:クライアントとサーバーが暗号化接続を確立する前に、クライアントは Client Hello メッセージを送信します。このメッセージは平文であり、一般的に server_name を含んでいます。GFW は、どのウェブサイトにアクセスしようとしているかを知ることができ、ホワイトリストにない(例:discord.com)ドメイン名をブロックします。 server_name は実際には拡張機能であり、必須ではないため、送信しないことで SNI ブロックを回避できます。

では、GFW が異なるウェブサイトに対してどのようにブロックしているかを分析してみましょう#

WireShark を使用してパケットキャプチャを行います。

  • まず、 www.baidu.com にアクセスしてみます。これは GFW によってブロックされていないドメイン名です。

    1. まず ping を試みます。
      155abd629670af43c48b68824b90aba0

    2. IP を取得します: 2408:873d:22:18ac:0:ff:b021:1393

    3. Hosts を使用して強制的にバインドします。
      a1532f85e221403375344c2a034e7bfd

    4. WireShark を使用してパケットキャプチャを行うと、クライアントが送信した Client HelloServer Name フィールドが明確に表示され、正常に Server Hello を受信し、通信が開始されることがわかります。
      8d2eec3abef49409365766415e3365cc

    5. ブラウザを確認すると、ウェブサイトに正常にアクセスできます。
      d6da3eb267cb026f16370892b3400e9f

  • 次に、 discord.com にアクセスしてみましょう。

    1. まず ping を試みますが、ドメイン名と解決された IP の両方が通じないことがわかります。
      04c88ce3c3aea71a2d3fc08b9619fe1a

    2. この時、 itdog.cn を使用して v4 ping を試み、解決されたドメイン名に対して順次 ping を行います。

    e39a5118c8d8ac103c0e0b4da277606d

    1. 最初の IP が通じることがわかります。
      13f3161256f183d2805b77e280da844d

    2. Hosts を強制的にバインドし、パケットキャプチャを試みます。
      236093ea6b7765ac71c93e1b74013066

db6cb203779bdc8be2588f7ae4392328

  1. 強制 Hosts バインド後、クライアントが Client Hello を送信すると、GFW が Server Name フィールドを検出し、クライアントに RST メッセージを送信します。これはクライアント接続のリセットを要求するもので、クライアント側では ERR_CONNECTION_RESET というメッセージが表示され、接続がリセットされたことを示します。ユーザーはウェブページにアクセスできません。
    33046ac4392695d19c95793292047221

続いて、空の Server Name メッセージを送信してみます#

286e177cbbe83736210b93cbf196618c

547c0ac01d6fcccd673a93290787c19e

成功しました。WireShark では Server Name フィールドが見つかりませんでした。

秘策、tcpioneer#

これは TCP パケットを魔改造することで GFW が検出できないようにし、WireShark でも Client Hello メッセージをキャプチャできませんが、接続を確立することができ、サーバーが Server Hello を送信します。
ceaa1431591e5251dfc5000b903e76fa

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。