Wallpass

GFW 是如何工作的

1. 它是什么

GFW(Great Firewall)是人们对位于中国大陆网络与境外互联网之间的一系列过滤系统的通称。你可以把它想象成高速公路上的一道检查站:所有进出境的连接都要被检查,其中一部分会被拦下。理解它是怎么拦的,也就知道了一个可行的绕过方案必须做到什么。

2. 跟着一条连接走:防火墙每一步能看到什么

我们跟着一条到某网站的连接,一步一步看,并标出防火墙在每个阶段能观察到什么:

flowchart TD
    A[1. 查询 example.com 的 DNS] -->|可见:域名| B[2. 建立到服务器 IP:443 的 TCP 连接]
    B -->|可见:IP 和端口| C[3. TLS 握手 - SNI 携带域名]
    C -->|可见:SNI、证书、大小| D[4. 加密数据开始流动]
    D -->|可见:时间和流量大小,看不到内容| E[5. 连接关闭]

这里的关键是:防火墙根本不需要读你的数据,它只需要认出这条连接。

3. 阻断手段

1. IP 黑名单——拿着名单的保安。 已知 IP 地址或整个地址段被丢弃或不路由。它很粗糙:会阻断托管在这些地址上的所有东西。

2. DNS 污染——查号台报了个假号码。 防火墙针对被屏蔽域名的 DNS 查询返回假 IP。你的电脑连到一个死地址,网站看起来就像打不开。

3. TCP RST 注入——一封伪造的「查无此人,退回」。 为了掐断一条活跃连接,路径上的攻击者发送一个伪造的 TCP RST 包,让它看起来像是来自通信双方之一。两端都以为连接「已关闭」,于是放弃。

4. 基于 SNI 的过滤——看信封上的收件人名字。 TLS 握手时,域名会明文出现在 SNI 字段里。防火墙拿它跟黑名单比对,命中就注入重置包,连接在还没交换任何数据之前就断掉了。

5. 深度包检测——拆开没封口的信。 对未加密流量,防火墙直接读取负载,遇到包含被过滤关键词的请求就阻断。

flowchart TD
    subgraph normal[无干扰时]
        C1[你的电脑] -->|DNS 查询| D1[DNS 服务器]
        D1 -->|真实 IP| C1
        C1 -->|HTTPS,SNI:example.com| S1[目标网站]
    end

    subgraph blocked[防火墙介入时]
        C2[你的电脑] -->|DNS 查询| D2[DNS 服务器]
        D2 -.->|返回假 IP| C2
        C2 -->|HTTPS,SNI 被屏蔽| F[防火墙]
        F -.->|注入 TCP RST| C2
        F -->|连接被中断| S2[目标网站]
    end

4. 为什么光有加密还不够

HTTPS 藏住了信件的内容,但防火墙仍然能看到信封外面:目标 IP、SNI 里的域名、流量模式。阻断是「认出来」的问题,不是「读出来」的问题。所以仅仅「用了 HTTPS」并不能绕过什么——这条连接看起来仍然像一条连往被屏蔽服务的连接。

5. 一个可行的绕过方案必须做到

  1. 一台位于防火墙之外的服务器——被屏蔽的内容在那里获取,因为那里访问得到;
  2. 加密——内容无法被读取或进行关键词过滤;
  3. 看起来不像被屏蔽的流量——防火墙认不出这条连接,也就不会重置它。

第三点是最难的部分,也正是下一页要讲的内容。

下一节

代理与隧道的工作原理 — 把这些思路变成可用的方案。