如何不用代理直接访问外网!最新方法详细教程附带原理分析来了!
免责声明
本文章仅供用于学习研究使用请勿用于其余任意不合规不合法用途否则后果自负,与文章作者无关!!!
介绍
方案一已经更新
我们知道由于Great Firewall的影响很多网站比如google youtube discord是不能直接访问的而使用代理等工具一方面要花钱才能得到高速的访问另一方面存在不合规风险。那么有没有办法能够绕过这个“防火墙”的限制直接访问外网呢?本期教程我们将介绍最新的成果。
原理
首先我们要清楚阻断访问的原理,这里有dns污染,有sni阻断等等。
DNS污染
也就是说假如我们想访问google.com这个网站,那么我们会向某个dns服务器请求这个域名对应的ip地址,这个时候这个dns服务器有可能被篡改成一个假的dns服务器给你提供错误的ip地址,这就是DNS污染。怎么绕过呢?很简单,用8.8.8.8或者1.1.1.1作为DNS服务器,然后我们也可以使用加密的DNS,也就是DoH,这使得DNS是啥中间人是不知道的,也是利用非对称加密。
SNI阻断
除了DNS污染,还有一个叫做SNI阻断,什么意思呢,就是说我们访问一个https协议的网站比如google.com的时候假如我们已经从DNS服务器那里得到了正确的IP地址假设是9.9.9.9,那么我们就要向9.9.9.9发送请求,我们都知道HTTPS是加密协议,是利用RSA非对称加密来实现的,也就是说在数据传输过程中是数据内容是完全加密的没有对应的私钥谁也解不开,这就是TLS加密。但是问题是一个服务器上可能有好几个网站同时在运行,我们发送请求的时候就必须指明是哪一个网站,可惜HTTPS协议设置的时候留下了一个缺陷,就是指明是哪一个网站的参数并没有是加密,而是明文的,这个明文的参数就叫做SNI.所以防火墙能够检测到我们要请求网址然后直接阻断,这就叫做SNI阻断。怎么解决呢?我们发现现在由于HTTPS技术的进步,有很多服务器不再需要SNI来判断请求的是哪一个网站,而是先对TLS进行解密,而解密后就包含着请求的数据,里面的HOST参数就是请求的网站,所以我们可以在保留TLS不变的情况下把SNI改成一个安全的值甚至是任意值,这样的话防火墙就没有办法检测到你要访问哪一个网站了。
还有一种更新的技术叫做ECH,什么意思呢,就是我们把整个HTTPS请求全部加密,既包括TLS部分又包括SNI,然后还是用非对称加密,这样就不怕被拦截了,但是这是个新技术,需要网站的服务器配合,有很多网站并没有应用。实际上只要我们打开了DoH也就是加密DNS,那么ECH就自动打开了。
IP blackhole
防火墙还会针对IP地址进行屏蔽,虽然说一个网站可能部署在不同服务器上有不同的IP地址,但是DNS服务器解析域名返回的地址通常是固定的,也就是说只要屏蔽掉这个地址就没办法访问了,屏蔽的方式就是把所有向这个地址的请求指向一个不存在的“黑洞”吞噬掉。所以这时候我们也可以不用DNS服务器解析,而是自己找一些能用的IP地址替换,这就是之前说的改HOST。遗憾的是对于google这样的网站所有的IP都被屏蔽了,这时候又该怎么办了呢?没错,我们可以找中间人。互联网上有专门一些开放的服务器就是负责转接的,它们接受到我们发送的访问google.com的请求(SNI仍然是伪装的),然后解密TLS,再用这个服务器去访问HOST里面的网站,把返回的结果再返回给我们自己的电脑,这些服务器都是开放免费的。也就是说我们需要把原来向9.9.9.9发送的请求原封不动发送到这个服务器就能直接得到google的网页。但是和代理不同这里没有建立信道也没有进行额外协议的通信。
就这样,我们就可以完全访问外网没有任何限制而且没有建立任何额外的信道,具有合规性。
下面开始实践。我们有三种方案,分别针对屏蔽程度不同的网站。
方案一:DoH+ECH
最新更新需要注意我们要关闭浏览器设置中恶意软件阻止程序,否则会无法访问网页!!!
很简单,只需要打开浏览器的加密DNS,我们以EDGE为例(chrome类似),直接设置搜索DNS,里面有一个使用安全的DNS或者说是secure DNS
选择下面那个手动选择服务提供商,选择哪个cloudfare也就是1.1.1.1那个
这样就同时开启了DoH+ECH
然后关掉这个页面然后重启浏览器,必须要重启浏览器不然不行!然后怎么看是否开启成功?
访问这个网页https://tls-ech.dev/
如果成功会有下面这样的内容
现在我们就可以从尝试访问一些同时应用了ECH加密并且IP没有被屏蔽的网站
比如github.com v2ex.com discord.com greasyfork.org
但是对于google这样的网站仍然无法访问是因为IP blackhole的原因,对于一些被屏蔽的小网站无法访问的原因是因为服务器没有用上最新的ECH加密技术。本方法安全性最高操作简单但是只能解决一些仅仅被DNS污染和SNI阻断的网站。
方案二 针对浏览器的SNI伪装
这个方法就是把SNI改成一个其他值,同时不需要DNS服务器做解析了而是要找到对应的IP地址如果IP全被屏蔽就是要找一个中间服务器。这个有一个在线工具可以进行SNI伪装+找IP(默认都是不用中间服务器),https://bulianglin.com/archives/snibypass.html
这是针对浏览器的而不是全局的,所以对于chrome不需要改浏览器设置,对于EDGE需要先打开设置,系统和性能,里面把启动增强和允许后台运行关了
怎么改SNI?利用了浏览器的一个命令。所以说这个是针对某一个浏览器的而不是全局的。所以说你要用哪个浏览器上外网就在哪个浏览器运行这个网站,然后默认会出现下面的画面
把执行结果里面的内容复制然后关掉浏览器并且彻底结束掉浏览器进程,然后找到浏览器的安装目录(快捷方式右键点击打开文件位置)
按住shift同时单击右键选择打开命令提示符或者打开powershell
打开后先输入cmd岸回车然后输入chrome.exe然后空格然后把剪贴板内容粘贴到这里(粘贴可以右键单击窗口空白处里面有个编辑,点进去里面有个粘贴)
按回车打开浏览器访问googlw和youtube,如果能打开网页就证明成功了,但是现在我们只是正常访问google和youtube,还不能完全正常上外网,所以我们需要获取更多网站的IP和sni伪装(如果不成功请注意把其他代理关了而且一定在关浏览器时候彻底结束进程)
这里需要我们能够正常访问github,如何正确访问github请参见方案一。
然后再次正常打开浏览器(不用输上面命令了),访问https://bulianglin.com/archives/snibypass.html
然后点击抓取数据按钮,等一会看看上面的SNI伪装列表是否变多,如果没有请先确保你能够正常访问github。
等着SNI伪装列表加载完成后单击处理数据执行结果里面会出现一大堆命令
把执行结果里面的内容复制下来,然后还是彻底关闭浏览器清理进程,然后按照上面那样打开CMD然后输入chrome.exe空格然后把剪贴板内容粘贴按下回车这样打开一个新窗口在里面可以试一下telegram.org,如果能够正常打开那么就成功了。
接下来可以做一个bat脚本,就是把刚刚执行的命令(就是chrome.exe加上剪贴板那一串)复制下来,然后在原来目录新建一个start_browser.bat文件,文件里面粘贴上这个命令,保存之后给这个bat文件在桌面添加一个快捷方式,这样以后每次访问就直接双击bat文件就行不用输入命令了。
这个方法的优点是支持网站多速度快安全性高而且不需要额外任何工具仅仅依赖浏览器本身,但是缺点也很多。首先会发现没法看youtube视频但是youtube里面其他的东西都能加载出来,视频会转圈圈,这是因为youtube视频的视频源的域名对应的ip不遵从一个固定的格式也就是不能简单添加几个链接和通配符就行而是需要做统一的处理。另外你会发现tiktok x.com这些没法访问因为他们是反向屏蔽了大陆的ip,和防火墙无关。另外你会发现有些网站访问的明明是https但是却提示不安全,会不会被劫持了?答案是不会,因为我们伪装了SNI,所以说我们发送的SNI和证书的HOST不一致所以会说不安全,但是整个TLS加密仍然是没有改变的所以说数据仍然是加密的,不用担心安全性。
方案三:SNI伪装客户端
这里我们需要一个客户端了,实际上和方案二的原理一模一样但是由于浏览器自身有局限性,所以我们需要一个全局的客户端,只要开启这个客户端就可以全局访问外网了而不是局限于某一个浏览器。首先我们需要下载客户端https://github.com/SpaceTimee/Sheas-Cealer
当然还是需要github,下最新版本的,在右边有一个releases,点开然后下最新版本,zip的是绿色版,exe的是需要安装的版本,不要下scd的那个,
下载完成后解压(我用绿色版),以管理员身份运行这个exe(右键单击选择以管理员身份运行)
打开之后可能需要安装一些运行环境什么的按照指示来就行
接下来上面有一个浏览路径把路径替换成你常用浏览器的安装目录(就是之前方案二找的那个)
(实际上打开全局伪造除了github访问都不受影响)
然后点击更新上游规则,选择是就行,更新完之后点击编辑Nginx配置随便选一个编辑器打开
然后访问https://github.com/SpaceTimee/Cealing-Host/blob/main/nginx.conf
把里面代码复制下来
直接粘贴到编辑器保存然后关掉编辑器
然后长按启动全局伪造(我这里已经启动了),会出现安装根证书的提示点击确定正常安装就行。然后软件可能闪退,需要重新以管理员身份运行一次(如果全局伪造没开再次打开就行),然后单击启动伪造直接启动就行,会打开一个浏览器,这个浏览器里面就可以访问各种外网还能够看youtube视频。
这个方案是终极方案,可以访问各种外网但是前提是对方不能屏蔽大陆IP(比如说tiktok x.com chatgpt),否则是不行的因为仅仅是绕过了我们的防火墙,另外一方面有些网站没有收录进去,我们可以自己按照规则去找IP并且进行SNI伪造。
这个方案安全性不如方案二高因为安装了根证书确实可能影响HTTPS的安全性,但是一般是问题不大的。而且这个方案与方案二原理是一样的并没有额外使用什么代理。
就这样我们就能够正常访问外网了,最后以一张youtube视频截图收尾!完结散花!!
黄粱一梦,终是一空
本文来自博客园,作者:hicode002,转载请注明原文链接:https://www.cnblogs.com/hicode002/p/18773321
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 发布一个小功能,通过 markdown 图片语法嵌入B站视频
· 《HelloGitHub》第 111 期
· 谷歌新AI工具杀疯了?免费,但有点坑!Gemini CLI 抢先实测
· 使用GcExcel .NET将Excel导出为PDF
· MySQL 字符集、排序规则与查询关系详解