L站被墙了?一文搞懂DNS污染、SNI阻断(上篇)

:globe_with_meridians: 网络封锁与突破技术完全指南

写在前面:这是一份关于DNS污染、SNI阻断及其突破方案的深度技术笔记。内容基于对Gemini AI的提问整理而成,用生动的比喻帮助理解复杂的网络技术原理。


:bookmark_tabs: 目录


第1章 前言:从L站被墙说起

最近L站被墙了,我当时就好奇被墙的原理是啥呢,后来问AI后才懂了一点,整理了一下做个笔记,给大家分享一下。

被墙就是不让访问了,国内无法直连了。从技术层面来说,被墙主要通过两种手段实现:DNS 干扰SNI 阻断

:light_bulb: 术语说明

  • DNS 干扰是一个广义概念,包括多种干扰DNS正常工作的方法(如DNS污染、DNS劫持、DNS丢包等)
  • **DNS 污染(DNS Poisoning)**是DNS干扰的一种具体实现方式,也是GFW(防火长城)主要使用的技术手段
  • 本笔记重点讲解DNS 污染的原理,因为这是最常见的被墙方式

在深入了解这两种技术之前,我们需要先掌握一些基础知识。


第2章 基础知识

2.1 DNS:互联网的地址簿

首先我们要有个基本的常识:我们访问的网站那些 baidu.com域名,但实际上我们访问的是IP地址。但是IP地址太难记住了(比如 142.250.185.46),所以才有了域名。

DNS的作用:当我们在浏览器输入域名时,需要DNS服务把它解析成IP地址。

:light_bulb: 简单比喻:DNS就像是互联网的"地址簿"或"地图"。你想去"朋友的论坛"(域名),你查了一下地图(DNS服务器),地图告诉你,这家店在"XX路100号"(IP地址)。然后你就可以出发了。

2.2 SNI:HTTPS时代的"门牌号"

现在很多网站都使用 https:// 开头(即 HTTPS),意思是你的访问是"加密"的,很安全。

但这里有个问题:一个"商场"(一台服务器,一个IP地址)里可能开了很多家店(很多个网站)

当你到达"XX路100号"(IP地址)这个商场门口时,商场的保安(服务器)需要知道你到底想去哪家店(A网站、B网站还是"朋友的论坛"),这样他才能把你转接到正确的商店。

你告诉保安你要去哪家店的这张"便条",就叫做 SNI (Server Name Indication,服务器名称指示)

:warning: 关键问题:为了让保安(服务器)能看懂,这张写着"我要去’朋友的论坛’"的 SNI 便条是明文的,没有加密!

这就好比你在商场入口大厅里,必须大声喊出你要去的商店名字。


第3章 被墙的技术原理

3.1 DNS污染:破坏你的地图

你对 DNS 的理解很对,它就像是互联网的"地址簿"或"地图"。

正常情况

你想去"朋友的论坛"(域名),你查了一下地图(DNS服务器),地图告诉你,这家店在"XX路100号"(IP地址)。然后你就可以出发了。

DNS 干扰(DNS Poisoning/Spoofing)

这时候,有人在你的地图上做了手脚。

方式一(投毒/污染):你去查地图,一个"干扰者"抢先告诉你一个假的地址。比如,他告诉你"朋友的论坛"在"一个不存在的荒地"(一个错误的、无法访问的IP地址),或者干脆把你指到"警察局"(某个被封锁的IP)。

方式二(干扰):你去查地图,干扰者就在旁边大喊大叫,让你根本听不清地图(DNS服务器)给你的正确答案。

结果:无论哪种方式,你都拿不到正确的"IP地址",导致你的浏览器"找不到服务器",你自然就访问不了这个网站了。

3.2 SNI阻断:在商场门口拦住你

这个稍微复杂一点,但也很容易理解。

SNI 阻断(SNI Blocking)的工作原理

“SNI 阻断"就是指,防火墙(可以理解为商场门口一个更高级别的"检查员”)一直在竖着耳朵听。

  • 正常情况:你喊:“我要去A商店!” 检查员看A商店是合规的,就放你进去了。
  • SNI 阻断:你喊:“我要去’朋友的论坛’!” 检查员的黑名单上正好有"朋友的论坛"。他一听到这个名字,根本不关心你后续要干嘛(即使你后续的通信是加密的),他立刻切断你的连接(RESET),把你赶出商场。

结果:你的浏览器会显示"连接被重置"或"无法访问此网站"。

3.3 双重防御体系:护城河与主城墙

为什么要同时使用DNS污染和SNI阻断这两种手段呢?这是一个精心设计的分层防御体系

DNS 污染 = “护城河”

  • 特点:成本极低,覆盖面极广。
  • 目标:拦截 90% 的普通用户
  • 工作方式
    • DNS 查询(问路)的请求包非常小,特征明显(UDP 协议,53 端口)。"防火墙"处理这些请求非常省力
    • 它不需要关心你后续干嘛,只要一听到有人"问路"(DNS 请求),它就给个假地址。
  • 比喻
    • "护城河"挖起来很便宜。
    • 它能轻松挡住所有"不会游泳、没造船"的普通进攻者(普通用户)。
    • 90% 的人一看到"护城河"就放弃了(访问网站失败)。

SNI 阻断 = “主城墙”

  • 特点:成本极高,精准打击。
  • 目标:拦截那 10% 绕过了"护城河"的技术用户
  • 工作方式
    • "防火墙"必须实时监控在它那里经过的每一个 https 连接(TLS 握手包),并从里面揪出那个明文的 SNI 字段。
    • 这个计算量是极其恐怖的,需要非常昂贵的硬件设备才能支撑。
  • 比喻
    • 总有一些"进攻者"(比如你)比较聪明,自己造了船(比如用了 hosts 文件或 DoH/DoT)渡过了"护城河"
    • 这时,"防火墙"就必须启用它的**“主城墙”**(SNI 阻断)。
    • 当这个"造船"的进攻者到达城门下(服务器 IP),开始喊"我是来找’朋友论坛’的!"(SNI),城墙上的弓箭手(阻断器)就会立刻把他射杀(RST 重置连接)。

第4章 深度解析:污染是如何发生的

4.1 为什么我的域名配置会被污染?

如果你之前在websocket那节课买过域名的话,你可能会好奇:我之前在阿里云买过域名,我记得配置的时候就只需要把域名和IP地址绑定就没了,我自己都配置好了,别人又没我账号他怎么使用我的域名跟IP地址绑定污染的呢?

答案:这个问题不在于你"源头"的配置被改了,而在于普通用户查询你这个配置的过程被污染了。

你的阿里云配置(源头)

  • :你是"发件人"。
  • 你的阿里云 DNS 配置:你填写的"官方快递单"。
    • 上面清清楚楚地写着:
    • 收件人:我的论坛 (域名)
    • 地址:A 小区 1 栋 1 号 (你的真实 IP 地址)
  • 事实:这张"快递单"的原件在你手里(在阿里云的服务器上),没人能改动它。你是对的。

普通用户的访问(查询过程)

  • 用户:一个"访客",他想去 我的论坛
  • 用户的 DNS 请求:访客需要先知道"地址",所以他会去"公共查询点"(比如他当地的电信/移动 DNS 服务器,或者 8.8.8.8)问路。

4.2 DNS污染的两种实现方式

现在,“防火墙”(干扰者)登场了。它有两个时机可以"污染":

方式一:污染"公共查询点"(DNS 缓存投毒)

这是最大规模的。

  1. “公共查询点”(比如某省的电信 DNS)收到第一个访客的请求,它也不知道地址,所以它会去查询你的"官方快递单"(访问阿里云的权威 DNS)。
  2. 关键时刻:就在"查询点"发出这个请求的瞬间,"防火墙"也在监听
  3. “防火墙"会抢答!它会伪装成"阿里云”,抢在真正的阿里云回复之前,给"公共查询点"一个假的答案
  4. "防火墙"说:“我的论坛Z 小区 99 栋 9 号(一个错误的、被封锁的 IP)!”
  5. "公共查询点"很傻很天真,它收到了这个最快到达的假答案,就信以为真了。
  6. 结果(投毒):"公共查询点"把这个错误地址Z 小区 99 号)"缓存"了下来。在接下来的一天里,所有来这个"查询点"问路的用户(可能几万、几十万人),全都被告知了 Z 小区 99 号 这个假地址。

:light_bulb: 关键理解:你的"官方快递单"(阿里云配置)还是 A 小区 1 号,它没变。但是公共查询点(缓存 DNS)被骗了,它告诉所有人的都是错的。

方式二:污染"访客"本人(DNS 欺骗)

这个更直接。

  1. "访客"去问路(发出 DNS 请求)。
  2. "防火墙"就在访客家门口(网络出口)守着。
  3. 它一听到"访客"在问 我的论坛 在哪。
  4. 立刻(同样是抢答)冒充 DNS 服务器,直接告诉"访客":“在 Z 小区 99 号!”
  5. 结果:访客的电脑收到了这个假答案,就直接导航去 Z 小区 99 号 了,访问自然失败。

DNS 污染的本质是:攻击者(防火墙)在你"官方地址"的传播途径中,通过"抢答"和"伪造回复",把"假地址"欺骗性地告诉了"访客"或"公共查询点"。


第5章 延伸思考:关于GFW

5.1 防火墙的两种类型

看我上面的手段你可能会好奇,这个DNS和SNI的手段都是这个防火墙干的,你可能会想这个防火墙部署用来保护的怎么还干扰我访问网站,那这个防火墙在个人手上还得了,这不是违法的吗?

其实我们之前理解的防火墙,我们称之为**“防御型防火墙”。而我之前提到的"干扰者",我们称之为"网关型/过滤型防火墙"**。

你理解的防火墙(防御型)

  • 目标:保护你(你的电脑或服务器)。
  • 类比:你家(服务器)门口的**“保安”**。
  • 工作:它的职责是**“对内负责”。它只关心一件事:防止外面**的坏人(黑客、病毒)进来攻击你家。
  • 例子:你在云服务器上配置的安全组、fail2ban、Windows 自带的防火墙。它们会阻止来自恶意 IP 的 SSH 攻击或关闭不必要的端口。
  • 方向:主要是**“防进来”(Inbound)**。

我们讨论的"干扰者"(网关型)

  • 目标:管控整个网络(一个公司、一个地区、一个国家)的所有人。
  • 类比:整个城市(网络)出入口的**“海关"或"检查站”**。
  • 工作:它的职责是**“对外负责”**。它不关心你家(个人服务器)会不会被攻击,它只关心你(和你城里的所有人)要去哪里在看什么
  • 例子:这就是我们之前讨论的,能实施 DNS 干扰和 SNI 阻断的那个大型"防火墙"。
  • 方向:主要是**“管出去”(Outbound)"管进来"(Inbound)**。

并且这种"网关防火墙"(我们常说的"海关")绝对不是个人能掌控的,它是一种**基础设施(Infrastructure)**级别的部署。它部署在国家或大型地区网络的总出入口,是耗资巨大、技术门槛极高的系统工程。

5.2 GFW的合法性问题

你觉得它"违法",是因为你站在一个"受干扰"的用户角度,觉得自己的网络访问被"随意"破坏了。

但从"部署者"的角度,它并不是"随意"在污染,它是在**“执法”**。

我们再用一次"海关"的比喻,这次我们聚焦在"部署"这个行为上:

  1. 制定法律:一个国家通过了法律,规定:“任何包含 X 内容的出版物(比如书籍、音像)禁止入境。”
  2. 部署工具(执法):为了执行这条法律,国家(海关)在所有机场、港口(边境)部署了 X 光机和检查员(这就是"部署工具")。他们的任务就是检查所有入境包裹,一旦发现 X 内容,就将其拦截。
  3. 这违法吗?:在这个国家内部,海关"部署" X 光机和检查员来"干扰"这些违禁品的入境,这不仅不违法,这恰恰是法律要求他们做的,是 100% 的合法执法行为。

现在我们把这个比喻换成网络:

  1. 制定法律:某个国家或地区制定了法律:“本国公民不允许访问包含 Y 内容的网站(比如你那个论坛)。”
  2. 部署工具(执法):为了执行这条法律,该国家的网络管理部门在"互联网出入口"(边境)部署了"网关防火墙"(这就是"部署工具")。它的任务就是检查所有"出境"的数据包(通过 DNS 查询、SNI 字段),一旦发现目的地是 Y 网站,就"污染"或"阻断"它。
  3. 这违法吗?:在这个国家内部,管理部门"部署"防火墙来"干扰"对 Y 网站的访问,这同样不违法,这是在执行该国的国内法

在我们中国这个干扰者是 GFW,全称是 Great Firewall,中文一般翻译为"防火长城"。


第6章 突破方案

那有什么方法可以解决这个问题呢?下面介绍三种主要的突破方案。

6.1 方案一:修改hosts文件

hosts 是什么?它和 DNS 是什么关系?

简单来说:hosts 文件是你电脑上的一个"私密地址本",而 DNS 是公共的"电信黄页"。

工作原理

当你访问一个网站(比如 friends.forum.com)时,你的电脑需要知道它的 IP 地址。它会按以下顺序查找:

第一步:先查"私密地址本"(hosts 文件)

你的电脑会先打开自己系统里的 hosts 文件,看看里面有没有你"手动"为 friends.forum.com 指定的 IP 地址。

  • 如果找到了(比如你写了 1.2.3.4 friends.forum.com),它会立即使用这个 IP 地址 (1.2.3.4),并且不再去问外面的 DNS
  • 如果没找到,它才会进入第二步。

第二步:再查"公共黄页"(DNS 服务器)

电脑会向互联网上的 DNS 服务器(比如你路由器设置的 8.8.8.8)发起请求:“你好,请问 friends.forum.com 的 IP 是多少?” 然后 DNS 服务器会回答它。

这和"DNS 干扰"有什么关系?

关系非常大!hosts 文件正是绕过 DNS 干扰最常用的手段。

  • DNS 干扰:公共的"黄页"(DNS)被污染了,它给你的 A 网站的地址是 的。
  • 解决方法:你通过其他渠道(比如论坛主私下告诉你)得知了 A 网站的 真实 IP 地址(比如 1.2.3.4)。
  • 操作:你手动在自己的 hosts 文件(私密地址本)里加一行:1.2.3.4 friends.forum.com
  • 结果:你的电脑在访问时,优先看 hosts 文件,直接就拿到了正确的 IP (1.2.3.4),根本不给 DNS 干扰"发挥作用"的机会。

:light_bulb: 总结hosts 文件是一个优先级高于 DNS 的本地 IP 映射表。

方案一的局限性

  • :white_check_mark: 优点:简单直接,100%绕过DNS污染
  • :cross_mark: 缺点:无法绕过SNI阻断(如果目标网站被SNI阻断,hosts文件无效)
  • :cross_mark: 缺点:需要手动获取真实IP地址
  • :cross_mark: 缺点:IP地址变更时需要手动更新

6.2 方案二:使用DoH加密DNS

DoH(DNS over HTTPS)正是为了"DNS 污染"(护城河)而诞生的一个"重型武器"。

为什么需要DoH?

还记得我们说"DNS 污染"为什么会成功吗?

  1. 你发出的 DNS 查询请求是明文的(就像一张明信片)。
  2. GFW(海关)能看懂这张明信片,知道你要查询 friends.forum.com
  3. GFW 抢答,给你一个假的 IP 地址。

DoH 就是来解决这个问题的。

DoH (DNS over HTTPS) 是什么?

它的全称是"通过 HTTPS 传输的 DNS"。

它的原理非常聪明:

DoH 把你的"DNS 查询请求"(明信片),放进了一个"加密的保险箱"(HTTPS)里,然后伪装成一次普通的网页访问(比如访问银行)发送出去。

DoH 是怎么工作的?

我们再用"海关"(GFW)的比喻:

1. 传统 DNS(你被污染的过程)

  • :(发出一张明信片,上面写着:“friends.forum.com 的 IP 是啥?”)
  • GFW(海关):(一把抢过明信片)“我看到了!你要去’朋友的论坛’!给,它的地址是 Z 小区 99 号(假 IP)。”
  • 结果:你被 DNS 污染了。

2. DoH(你绕过污染的过程)

  • 你(的浏览器):(拿出一个加密的保险箱,把"friends.forum.com 的 IP 是啥?"这张纸条放进去锁好。)
  • 你(的浏览器):(把保险箱打包,贴上快递单,收件人是"Cloudflare 的 DNS 服务器 1.1.1.1",并伪装成一次普通的 https 访问。)
  • GFW(海关):(看到你寄出一个加密的 https 包裹)
  • GFW(海关):“这是要去哪?”
  • 你(的浏览器):“去 1.1.1.1 这个 IP。”
  • GFW(海关):(检查)“1.1.1.1 是个干净的 IP(Cloudflare 的服务器)。里面是啥?”
  • 你(的浏览器):“是 https 加密内容,你看不懂的。”
  • GFW(海关):“哦,又是一个普通的加密访问。放行!
  • 结果:你的 DNS 查询请求,安全地、加密地到达了 1.1.1.11.1.1.1 给了你真实的 IP 地址,GFW 全程被蒙在鼓里。

DoH 的局限性:它只是"护城河"的船

现在你一定能想通这个关键点了:

DoH 只能帮你绕过"护城河"(DNS 污染)。

它帮你拿到了真实的 IP 地址(A 小区 1 号)。

但是,它解决不了"主城墙"(SNI 阻断)的问题。

当你拿着 DoH 给你的真实 IP 去访问网站时,你依然要经过"主城墙"(GFW),并且在"握手"时喊出那个明文的 SNI:“我要去’朋友的论坛’!”

"主城墙"上的 GFW 还是会听到,然后照样阻断你

方案二总结

  • DoH 的作用加密 DNS 查询,让你 100% 拿到"真实"的 IP 地址,彻底免疫"DNS 污染"(护城河)。
  • DoH 的局限:它不能加密 SNI。所以它无法帮你绕过"SNI 阻断"(主城墙)。

:light_bulb: 形象比喻:DoH 就像是你造了一艘非常坚固的船,让你100%能渡过"护城河",但你上岸后,还是会撞上"主城墙"。

所以,DoH 只是一个"反审查"工具链中的一环,它并不能独立完成"翻越" GFW 的全部工作。


6.3 方案三:Clash+代理服务器

前面两种方案都有局限性:

  • hosts文件:只解决了 DNS 污染,并且赌 GFW 还没有(或忘了)用 SNI 阻断那个新 IP。
  • DoH:同样只解决了 DNS 污染。

但当 GFW 把所有 IP 都封锁并进行 SNI 阻断时,那个配置文件就失效了。

这时,“代理”(Proxy),这个 Clash 的核心功能,就登场了。

实际使用方式:机场订阅(最简单)

:light_bulb: 重要提示:现在使用Clash+代理已经非常简单了,不需要自己租服务器

实际上,大多数人使用Clash的方式是:

  1. 购买"机场"服务 - 所谓"机场"就是提供代理服务器的商家
  2. 获取订阅链接 - 机场会给你一个订阅链接(URL)
  3. 导入Clash - 在Clash中导入这个订阅链接,一键完成配置
  4. 开始使用 - 选择节点,开启代理,就能访问了

:warning: 注意:选择机场时要注意安全性和隐私保护,避免使用来路不明的服务。

高级玩法:自建服务器(可选)

当然,如果你是技术玩家,也可以选择自己租用海外服务器搭建代理:

  • 优点:完全掌控,隐私性最高,独享带宽
  • 缺点:需要技术能力,有成本(服务器租金),需要维护

但对于大多数普通用户来说,使用机场订阅已经完全够用了


代理的作用:一个"安全"的海外代购

“代理"的字面意思就是"中介”。在网络世界里,代理(Proxy Server) 就是一个**“中转服务器”**。

它之所以能绕过 GFW,是因为它完美地"伪装"了你的两个关键信息

  1. 真正要去的地址(IP 地址)。
  2. 真正要去干嘛(SNI 字段)。

我们还用"海关"(GFW)的比喻。

1. 没有代理(直连)的情况

  • :“(对海关 GFW 喊)你好,我要去’朋友的论坛’(SNI),它的地址是 1.2.3.4(IP)!”
  • GFW:“(查黑名单)‘朋友的论坛’?不许去!1.2.3.4?这个地址也封了!”
  • 结果:连接被阻断。

2. 使用 Clash + 代理的情况

Clash 会帮你执行一个极其精密的"伪装"计划。这里的"代理"就是你在其他国家(比如日本、美国)租用的一台"中转服务器",这个"中转服务器"的 IP 是干净的、没有被 GFW 封锁的

第一步:Clash 在你本地"打包"

  • :“(对 Clash 说)我要去’朋友的论坛’。”
  • Clash:“收到。GFW 认识’朋友的论坛’,你不能直接去。”
  • Clash 的操作
    1. Clash 把你的请求(“我要去’朋友的论坛’”)**放进一个"加密的保险箱"**里。
    2. GFW 不知道怎么打开这个保险箱,也看不懂保险箱上写的(加密)内容。
    3. Clash 在保险箱外面贴上一张"快递单",这张快递单写着:
    • 收件人:你在海外的那个"中转服务器"(比如,5.6.7.8 这个日本 IP)。

第二步:你"过海关"(GFW)

  • 你(Clash):“(对海关 GFW 说)你好,我只是要去日本 5.6.7.8 这个地址,送一个加密的包裹。”
  • GFW:"(查黑名单)
    • 检查目标地址5.6.7.8(日本 IP)?嗯,是个普通的服务器,不在黑名单上。—— 放行!
    • 检查 SNI(内容):包裹是啥?(GFW 试图查看 SNI)…哦,是看不懂的加密内容(Clash 使用的 VLESS/VMESS/SS 等协议伪装得很好),不知道你要干嘛。—— 放行!"
  • 结果:GFW 完全不知道你这个包裹里面藏着的是"要去’朋友的论坛’"的请求。它只以为你是在和日本的 5.6.7.8 进行正常的、加密的通信。

第三步:代理"海外代购"

  • “中转服务器”(代理):在日本收到了你的"加密保险箱"。
  • 代理的操作:它打开保险箱,看到了你真正的请求:“我要去’朋友的论坛’”。
  • 重点:因为这个"中转服务器"在日本,它不受 GFW 管辖
  • 代理:它在日本直接访问了"朋友的论坛"(1.2.3.4),并成功拿到了网站数据。

第四步:数据返回

  • 代理:把拿到的网站数据,再次放进"加密保险箱",然后寄回给你。
  • GFW:看到一个从日本 5.6.7.8 寄回来的加密包裹。
  • GFW:“哦,是刚才那个包裹的回信。正常通信。—— 放行!

代理工作原理总结

我们用一个表格对比一下 GFW 看到的情况:

GFW 看到的内容 1. 直接连接 (失败) 2. 使用代理 (成功)
目标 IP 1.2.3.4 (朋友的论坛, 在黑名单) 5.6.7.8 (中转服务器, 不在黑名单)
目标内容 (SNI) friends.forum.com (明文, 在黑名单) [一堆加密的乱码] (无法识别, 放行)
GFW 的决定 阻断! 放行!

所以,代理的作用就是:

Clash 和代理(中转服务器)联手,把你真正的"意图"(friends.forum.com)藏在一个加密的"保险箱"里,然后贴上一个 GFW 允许的"假地址"(5.6.7.8),从而骗过 GFW。

方案三总结

使用机场订阅的方式

  • :white_check_mark: 优点:同时绕过DNS污染和SNI阻断,最彻底的解决方案
  • :white_check_mark: 优点:可以访问任何被封锁的网站
  • :white_check_mark: 优点:配置简单,导入订阅即可使用
  • :white_check_mark: 优点:有免费机场可选(如白嫖机场)
  • :cross_mark: 缺点:免费机场可能不稳定,付费机场有成本
  • :cross_mark: 缺点:需要信任机场服务商(隐私问题)
  • :cross_mark: 缺点:可能存在法律风险

自建服务器的方式

  • :white_check_mark: 优点:完全掌控,隐私性最高
  • :white_check_mark: 优点:独享带宽,速度稳定
  • :cross_mark: 缺点:需要技术能力
  • :cross_mark: 缺点:需要租用服务器(有成本)
  • :cross_mark: 缺点:需要自己维护


【未完待续】

:open_book: 下篇预告:第8章将深入讲解VPN vs 代理的本质区别、Clash的三种工作模式(系统代理、TUN、TAP),以及如何用计算机网络分层模型理解这些技术。敬请期待!

看完了,对于之前看到别人说的一些关于DNS拦截啥的有了直观理解,通俗易懂,适合我这种之前啥也不懂的人 :heart_eyes:

1 个赞