这是一篇科普文,用通俗易懂的语言像大家解释一下,当今世界上通用的域名解析/内容审查/封锁原理。
很多过程被精简,例如SSL握手流程,仅供参考不要当真。
1. 最初我们的网络是明文传输的,当时也没有墙,网络访问类似:
用户输入网址
DNS解析域名并返回IP(如果没有设置DNS则使用ISP默认DNS)
浏览器带网址和请求访问服务器IP
浏览器返回内容
2. 后来各国官老爷们发现某些内容不能让人查看,于是设置了几道枷锁:
用户输入网址
【ISP检测网址并封锁】
DNS解析域名并返回IP(如果没有设置DNS则使用ISP默认DNS)
【国内DNS检测域名并返回错误IP】
浏览器带网址和请求访问指定IP
【ISP屏蔽IP】
浏览器返回内容
【ISP检测内容并封锁】
3. HTTPS (SSL) 开始普及后,传输内容被加密,无法检测和封锁:
用户输入网址
【ISP检测网址并封锁】
DNS解析域名并返回IP(如果没有设置DNS则使用ISP默认DNS)
【国内DNS检测域名并返回错误IP】
浏览器与指定IP服务器握手并获取TLS生成的证书(带域名)
浏览器带证书加密的网址和请求访问指定IP
【ISP屏蔽IP】
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
4. 官老爷们发现内容无法被审查,于是给SSL增加了证书封锁:
用户输入网址
【ISP检测网址并封锁】
DNS解析域名并返回IP(如果没有设置DNS则使用ISP默认DNS)
【国内DNS检测域名并返回错误IP】
浏览器与指定IP服务器握手并获取TLS生成的证书(带域名)
【ISP检测证书中的域名并阻断传输】
浏览器带证书加密的网址和请求访问指定IP
【ISP屏蔽IP】
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
5. 民间通过使用海外DNS(如8.8.8.8)解析域名解决DNS封锁:
用户输入网址
【ISP检测网址并封锁】
使用海外DNS解析域名并返回IP
[海外DNS不会检测域名]
浏览器与指定IP服务器握手并获取TLS生成的证书(带域名)
【ISP检测证书中的域名并阻断传输】
浏览器带证书加密的网址和请求访问指定IP
【ISP屏蔽IP】
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
6. 安全机构推出了 DNS OVER HTTPS (DOH) 来加密DNS解析过程:(新标准未普及)
用户输入网址
浏览器与DNS建立加密通讯
[ISP无法检测传输的网址]
使用海外DNS解析域名并返回IP
[海外DNS不会检测域名]
浏览器与指定IP服务器握手并获取TLS生成的证书(带域名)
【ISP检测证书中的域名并阻断传输】
浏览器带证书加密的网址和请求访问指定IP
【ISP屏蔽IP】
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
7. 后来人们发现使用动态IP可解决IP被屏蔽问题:
用户输入网址
浏览器与DNS建立加密通讯
[ISP无法检测传输的网址]
使用海外DNS解析域名并返回IP
[海外DNS不会检测域名]
浏览器与指定IP服务器握手并获取TLS生成的证书(带域名)
【ISP检测证书中的域名并阻断传输】
浏览器带证书加密的网址和请求访问指定IP
[ISP无法屏蔽不固定的IP]
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
8. 但是官老爷学会了追踪IP并屏蔽,比如用于Google:
用户输入网址
浏览器与DNS建立加密通讯
[ISP无法检测传输的网址]
使用海外DNS解析域名并返回IP
[海外DNS不会检测域名]
浏览器与指定IP服务器握手并获取TLS生成的证书(带域名)
【ISP检测证书中的域名并阻断传输】
浏览器带证书加密的网址和请求访问指定IP
【ISP追踪不固定IP见一个屏蔽一个】
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
9. 用户发现修改HOSTS并自行指派IP可解决问题,比如从Cloudflare任播网络中随意选择IP:
用户输入网址
用户修改HOSTS指派IP
[不走DNS不会检测网址]
浏览器与指定IP服务器握手并获取TLS生成的证书(带域名)
【ISP检测证书中的域名并阻断传输】
浏览器带证书加密的网址和请求访问指定IP
[ISP无法追踪用户指派的IP]
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
10. TLS生成的证书包含域名,ISP传输中可被检测和阻断,于是人们推出了 TLS1.3+ESNI (Encrypted SNI) 把证书中的域名也加密:(新标准未普及)
用户输入网址
用户修改HOSTS指派IP
[不走DNS不会检测网址]
浏览器与指定IP服务器握手并获取TLS1.3+ESNI生成的加密证书
[ISP无法检测证书中的域名]
浏览器带证书加密的网址和请求访问指定IP
[ISP无法追踪用户指派的IP]
浏览器返回证书加密的内容
[ISP无法检测证书加密的内容]
浏览器用证书解密内容
前面标注“新标准未普及”的会随着网络更新换代逐步解决,但有几个问题在当今局面是无解的。
国内DNS主动屏蔽:绝大部分脑残用户不知道使用海外DNS。
海外DNS遭遇封杀:海外DNS服务器IP未来可能被封,只能通过修改HOSTS来解决域名屏蔽。
HOSTS不会修改:绝大部分脑残用户不知道如何修改HOSTS。
HOSTS地址匮乏:网站无法向用户提供充足的自选IP地址。
不过目前已经有情色网站给出了折中的解决方案,那就是制作网址发布器。
原理是解析国内网页(比如某Lofter帖子),获取最新(未被封锁)的服务器IP。
然后网址发布器自动修改HOSTS,绑定域名和最新的服务器IP,这样用户就可以访问了。
首发于屌丝论坛:https://assbbs.com/post-update-20920.htm