冲浪小本本儿(一)

没等来ECH[1],等来了goodbyedpi,八月革命一声炮响,给我们送来了反审查工具

2024.7月roskomnadzor(俄罗斯联邦通信、信息技术和大众传媒监督局) 降低 YouTube 播放速度[2]
2024.8月俄罗斯全面封禁YouTube,网页版和客户端均无法访问。[3]
截至目前,俄罗斯陆续封禁了telegram discord signal messenger[4\5\6] google 以及wireguard 等翻墙协议也有不同程度的干扰,在查阅资料时,俺第一次认识了一个词捏----TSPU,俄罗斯的去中心化审查系统[7],与GFW对标的存在,多亏了他,俄友也马上要过上跟俺们一样的冲浪好日子咧

让俺注意到上述事情是因为俺以前关注的一个项目goodbyedpi突然更新并冲上github热门趋势,这也是desync类工具[8],俺很稀饭这类直连工具,首先是因为方便,代理、vpn类工具永远需要一个外部服务器转发数据,有许多人也许不具备这个条件,而代理会有钓鱼节点、机场本身或漏洞或审查或送中等问题。
其次因为自由访问互联网本就是公民的权力,本就应该直连[9][10]
此外,《国际联网暂行规定》第六条规定:“计算机信息网络直接进行国际联网,必须使用邮电部国家公用电信网提供的国际出入口信道。任何单位和个人不得自行建立或者使用其他信道进行国际联网。” goodbyedpi本地代理使用的都是“公用电信网提供的国际出入口信道”,从国外服务器到国内用户电脑上goodbyedpi程序的流量,使用的是正常流量通道,其间未对流量进行任何额外加密,而goodbyedpi获取到数据包之后发生的整个发包改动过程完全在国内,不再适用国际互联网相关之规定。
最后这类工具能否助力各种代理协议,让被墙的节点复活,这个有待研究。
而混淆翻墙流量隐写和多态两类方法中,隐写的模仿一直致力于将流量变化成一种常规访问的https流量,直连直接达成了这个梦寐以求的目的[13]
目前,这个工具在俄罗斯很多人使用,具有时效性

项目地址:GitHub - ValdikSS/GoodbyeDPI: GoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows)
项目上有作者自己开的反审查社区地址: GoodbyeDPI - NTC
俺发现原来还有另两款byedpi和zapret-master 后续会再写,这本儿先写goodbyedpi的使用教程

傻瓜版:
俄友其实已经有写一份,机翻一下也看得懂捏
https://dtf.ru/howto/2878180-kak-oboiti-blokirovku-youtube-s-pomoshyu-goodbyedpi-maksimalno-prostoe-rukovodstvo-dlya-chainikov

聪明瓜版:
聪明的你是否已经发现不论是按 2_any_country.cmd 1_russia_blacklist.cmd 都没有反应?哈哈,忘了傻瓜版吧
我们进入x86_64文件夹找到goodbyedpi.exe 。 不是双击,而是按住Shift键并右键点击空白处,选择“在此处打开PowerShell窗口”,输入 .\goodbyedpi.exe -h (当然熟手可以用cmd打开,helpyourself)
LEGACY modesets:
-1 -p -r -s -f 2 -k 2 -n -e 2 (most compatible mode)
-2 -p -r -s -f 2 -k 2 -n -e 40 (better speed for HTTPS yet still compatible)
-3 -p -r -s -e 40 (better speed for HTTP and HTTPS)
-4 -p -r -s (best speed)
Modern modesets (more stable, more compatible, faster):
-5 -f 2 -e 2 --auto-ttl --reverse-frag --max-payload
-6 -f 2 -e 2 --wrong-seq --reverse-frag --max-payload
-7 -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload
-8 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload
-9 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q (this is the default)

Note: combination of --wrong-seq and --wrong-chksum generates two different fake packets.

一共有9种模式,其中第九种为默认模式,即在不输入任何参数的情况下,自动使用命令 .\goodbyedpi.exe -9
在我们逐一尝试这些模式之前,需要先进行一项重要的操作:清理dns污染[12]。请记住,在直接连接任何网站之前,处理DNS问题是首要任务。
实际上,只要处理了DNS并获得正确的IP地址,就能解锁许多网站。然而,清理DNS污染本身是一项复杂的工作,值得单独撰写一篇文章。在这里,俺将提供一些简易的处理方法,以便让这篇文章保持简洁。有关更详细的内容,请参阅俺后续的文章。[12]

简易处理dns污染
方法1:使用浏览器自带的DoH解析域名的IP
这是最简单但也是最具挑战性的方法。您可以通过浏览器的设置启用DoH(DNS over HTTPS):
打开浏览器设置。
选择“隐私和安全”。
找到“安全性”选项。
启用“使用安全DNS”,并选择一个DoH提供商。
这个方法的难点在于,四大DoH服务提供商常年在被墙与未被墙之间摇摆。一旦某个DoH服务被封锁,您将无法使用。例如,Google的DoH服务(https://dns.google/dns-query{?dns})如果其域名dns.google被SNI阻断,那么该DoH服务也将无法使用。关于这一点,俺将在处理dns篇再写。

如果您需要寻找其他的DoH服务,国内的DoH返回的结果与通过UDP 53裸跑的结果没有区别,都是受到污染的结果,而使用udp 53裸跑还少了一次TLS解包,速度更快。国外无过滤、无日志记录且未被封锁的DoH服务相对难找。

要确认DoH是否正常工作,您可以在启用DoH后,访问一个被DNS污染但没有SNI阻断的域名,例如whoer.net
如果能够成功访问,说明DoH工作正常。但请注意,DNS污染和SNI阻断的名单是动态变化的,因此该域名的有效性并不持久。关于如何拉这两份清单,俺将在后续文章中进行说明。

方法2:修改hosts文件

您可以通过在线DNS解析网站来查找域名的IP地址,这些网站非常非常多。推荐使用www.nslookup.io,这个网站可以查询A和AAAA记录,并且支持HTTPS记录类型。关于这一点,俺将在后续的关于ECH文章中进一步探讨。

输入域名whoer.net,获得IP地址172.67.70.188后,您需要在hosts文件(C:\Windows\System32\drivers\etc)中添加以下内容:
172.67.70.188 whoer.net
保存后,您可以在浏览器中查看是否能够连接。

需要注意的是,hosts文件不能使用通配符匹配域名,因此这种方法相对繁琐。每个域名都需要手动添加解析,例如对于twitch.tv您需要逐一添加assets.twitch.tvgqls.twitch.tv、www.twitch.tv等。

处理完DNS污染后,您可以继续使用goodbyedpi。在尝试了1到9种模式后,俺发现模式5是可用的,开启后可以访问部分SNI阻断的域名,例如duckduckgo.comwww.startpage.comf-droid.orgpixiv.netsteamcommunity.comdiscord.comwww.facebook.com和www.wikipedia.org,但仍然有部分网站无法访问。

聪明瓜tl;dr版: 解决dns污染,使用模式5 .\goodbyedpi.exe -5

教师爷版:
翻译下帮助文档

用法:goodbyedpi.exe [选项…]
-p 阻止被动 DPI
-q 阻止 QUIC/HTTP3
-r 将 Host 替换为 hoSt
-s 移除 Host 头与其值之间的空格
-a 在方法和请求 URI 之间添加额外空格(启用 -s,可能会导致网站无法正常工作)
-m 混合 Host 头的大小写(例如 test.comtEsT.cOm
-f <值> 设置 HTTP 分片为值
-k <值> 启用 HTTP 持久(保持活动)分片并将其设置为值
-n 启用 -k 时不等待第一个段的 ACK
-e <值> 设置 HTTPS 分片为值
-w 尝试在所有处理的端口上查找和解析 HTTP 流量(不仅限于端口 80)
–port <值> 额外的 TCP 端口以执行分片和使用 -w 的 HTTP 技巧
–ip-id <值> 处理额外的 IP ID(十进制,丢弃具有此 ID 的重定向和 TCP RST)
–dns-addr <值> 将 UDPv4 DNS 请求重定向到提供的 IPv4 地址(实验性)
–dns-port <值> 将 UDPv4 DNS 请求重定向到提供的端口(默认 53)
–dnsv6-addr <值> 将 UDPv6 DNS 请求重定向到提供的 IPv6 地址(实验性)
–dnsv6-port <值> 将 UDPv6 DNS 请求重定向到提供的端口(默认 53)
–dns-verb 打印详细的 DNS 重定向消息
–blacklist 仅对来自提供文本文件的主机名和子域名执行规避技巧(HTTP Host/TLS SNI)。
此选项可以多次提供。
–allow-no-sni 如果启用 --blacklist 时无法检测到 TLS SNI,则执行规避。
–frag-by-sni 如果在 TLS 数据包中检测到 SNI,则在 SNI 值之前分片数据包。
–set-ttl <值> 激活假请求模式并以提供的 TTL 值发送。
危险!可能会以意想不到的方式破坏网站。请谨慎使用(或 --blacklist)。
–auto-ttl [a1-a2-m] 激活假请求模式,自动检测 TTL 并根据距离减少
如果距离小于 a2,则 TTL 减少 a2。如果距离更长,则使用 (a1; a2) 比例,
以距离作为权重。如果结果 TTL 大于 m(ax),则将其设置为 m。
默认(如果设置):–auto-ttl 1-4-10。也设置 --min-ttl 3。
危险!可能会以意想不到的方式破坏网站。请谨慎使用(或 --blacklist)。
–min-ttl <值> 发送假请求的最小 TTL 距离(128/64 - TTL)。
–wrong-chksum 激活假请求模式并以不正确的 TCP 校验和发送。
可能在虚拟机或某些路由器上不起作用,但比 set-ttl 更安全。
可以与 --set-ttl 结合使用。
–wrong-seq 激活假请求模式并以过去的 TCP SEQ/ACK 发送。
–native-frag 通过发送更小的数据包来分片(拆分)数据包,而不缩小窗口大小。
工作更快(不会减慢连接)且效果更好。
–reverse-frag 以与 --native-frag 相同的方式分片(拆分)数据包,但以相反的顺序发送。
适用于无法处理分段 HTTPS TLS ClientHello 的网站(因为它们接收到的 TCP 流“合并”)。
–max-payload [值] TCP 负载数据超过 [值] 的数据包将不会被处理。
使用此选项可以通过跳过大量数据(如文件传输)来减少 CPU 使用率
在已经建立的会话中。可能会跳过某些巨大的 HTTP 请求。
默认(如果设置):–max-payload 1200。

遗留模式集:
-1 -p -r -s -f 2 -k 2 -n -e 2(最兼容模式)
-2 -p -r -s -f 2 -k 2 -n -e 40(更好的 HTTPS 速度但仍兼容)
-3 -p -r -s -e 40(更好的 HTTP 和 HTTPS 速度)
-4 -p -r -s(最佳速度)
现代模式集(更稳定,更兼容,更快):
-5 -f 2 -e 2 --auto-ttl --reverse-frag --max-payload
-6 -f 2 -e 2 --wrong-seq --reverse-frag --max-payload
-7 -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload
-8 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload
-9 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q(这是默认值)

注意:–wrong-seq 和 --wrong-chksum 的组合会生成两个不同的假数据包。

俺将挑选一些俺认为重要的参数进行讲解:
-e 设置 HTTPS 的分片值,这个数值可以从2到100都可以设置,
它实际影响是从上往下数第5个包的长度,关于整个tcp握手部分太长,俺给自己挖的坑又多,暂时不延申

–auto-ttl 与 --set-ttl ,–set-ttl 可以从 1开始递增1往上加,大概在1-7之间可以连接到国内网站,8-12之间可以连接到国外网站是合适的值,但这时候就连接不到国内的网站了,设置这个参数最好配合黑名单模式使用,12往上就开始连接不到任何网站了。而auto-ttl会自动设置相对合适的值来适配,不至于出现国内站访问不到的情况,适合白名单模式使用,如果不想手动调配,请设置–auto-ttl
–native-frag 和 --reverse-frag 可以来回切换
–max-payload 加上

最终俺们得到了这样一组可用的参数
goodbyedpi.exe -f 2 -e 10 --set-ttl 10 --reverse-frag --max-payload

黑名单模式
在设置了set-ttl 这组参数情况下,推荐再加入 --blacklist …\russia-youtube.txt 这就是黑名单模式,即兜底规则为直连,嗅探sni(有些工具是通过嗅探dns查询的域名来触发,这些工具在浏览器开doh情况下就无法使用)并只捕获黑名单russia-youtube.txt 内的域名进行发包修改。否则,在 TTL 设置为 10 的情况下,国内网站将无法连接。
命令示例:
goodbyedpi.exe -f 2 -e 10 --set-ttl 10 --reverse-frag --max-payload --blacklist …\russia-youtube.txt
请将 russia-youtube.txt 复制到 goodbyedpi.exe 同一文件夹下,并在文本文件中添加被 SNI 阻断的域名。那么,这些域名该如何获取呢?
可以通过以下方法手动添加:打开开发者工具(F12),点击“网络”选项,查看哪些请求显示为红色。只需记录域名部分,例如 xxx.xxx.com,而无需添加/后面路径部分。关于一个网站下连接不到的域名怎么找及分场景使用,到反代部分还会再写


白名单模式
如果使用以下命令:
goodbyedpi.exe -f 2 -e 10 --auto-ttl --reverse-frag --max-payload
在白名单模式下,工具将捕获所有通过网卡的数据包并进行修改。这种模式适合懒人使用,但能够连接的 SNI 阻断网站较少且速度较慢。由于需要检测并设置 TTL 值,因此可能需要等待一段时间。

如果您不考虑访问国内网站,可以使用以下命令:
goodbyedpi.exe -f 2 -e 10 --set-ttl 10 --reverse-frag --max-payload
俺喜欢在这种模式下调试 ,这样不用去blacklist里一个一个加域名

您还可以添加 --wrong-seq 或 --wrong-chksum,以及 --frag-by-sni 等选项,单项或多项组合进行调试。同时,别忘了 -e 也可以设置不同的数值。
经过俺的测试,不同的网站实际上适配不同的参数。合理的参数设置可以使得 YouTube、Google 等重点封锁的网站几乎都能连接,甚至 Telegram 客户端也可以直连。请自行探索适合您需求的参数组合。

另外这个工具发出的包的sni固定为www.w3.org ,这也符合俺当时study反代时,发现修改sni必须要mitm

这个就要到反代部分再写了捏。


最后参数问题也可以去作者的论坛参考下别人的,也许不同运营商适配的参数也不同。
这个工具能让大家在找不到节点应急或成为主力的工具

教程结束,下一期讲zapret-master 和byedpi,还是冲浪小本本儿系列没想好

[1] 冲浪小本本儿(二)---- 在(一)之前,什么是ECH,如何检测、使用等等
[2] https://www.reuters.com/technology/google-blame-slower-youtube-speeds-russia-says-senior-lawmaker-2024-07-26/
[3] x.com
[4]Telegram блокируется мобильными операторами - Russia - NTC
[5]Сегодня перестал открываться Discord без впн - Russia - NTC
[6]Перестал работать мессенджер Signal - Russia - NTC
[7] TSPU: Russia’s Decentralized Censorship System
[8]冲浪小本本儿 (三) — 什么是desync类工具,还有哪些直连类型工具;什么是正代反代,如何完成反代;steam++这类工具是怎么完成不连接第三方服务器直连的;简易反代制作;当你直连一个网站时外部能看到什么
[8-1] 什么是tun模式,为什么clash的tun模式叫tun模式,而不叫tunnel
[9] 冲浪小本本儿 (四) — 当你通过proxy翻墙时,会在日志里、服务器上留下什么,通过代理连接有哪些风险
[10] 冲浪小本本儿 (五) — 被墙的网站有哪些分级,一些简单的dns污染名单,sni阻断名单,直连有哪些风险
[11] 冲浪小本本儿 (六) — 如何对网站方隐藏自身,什么是浏览器指纹,怎么改变;分析怎么逃过宏迪追杀
[12] 冲浪小本本儿 (七) — 如何处理dns污染;低延迟但被污染的dns、高延迟但正确的dns怎么选?域名分流;doh本身被封了怎么办
[13] 中国的防火长城是如何检测和封锁完全加密流量的

文章很喜欢, 但从简单安全角度来说Tor浏览器更好一些, 这么一大篇(甚至是几大篇?)文章让自认为有些技术力的我都感觉太长要慢慢看, 直连虽然能避免钓鱼代理, 但并不能避免墙外服务提供商送中.
Tor浏览器本身被设计为高度保护隐私和匿名, 不仅仅是可以免费翻墙.
诚然有些网站对Tor浏览器不友好, 但那些对Tor浏览器不友好的网站本身目的就是为了某种方式某种程度去追踪用户, 至少也是不注重用户安全使用了不安全设计导致出现兼容问题.
说白了如果某网站对Tor浏览器不友好就意味着他们已经准备好如有必要就把你送中, 从避免被送中的角度来说对Tor浏览器不友好的都不应该用.

1 个赞

网站方对用户的安全问题应该不属于本文讨论范围。本系列文章的重点是探讨如何访问被GFW拦截的网站,如Twitch、Twitter、Reddit等。
访问钓鱼网站获得用户信息的问题确实需要用户自己提高警惕,不轻易登录或依赖浏览器的安全性。

这里需要强调注意"不依赖浏览器的安全性", 不等于"不重视浏览器的安全性", 相反浏览器的安全性本身需要极度的重视, 这就是Tor浏览器出现和存在的原因.
反面例子: 关于1月8日至1月15日下线情况的说明 - 站务 — 2047论坛
2047的时任站长thphd因为不重视浏览器的安全性, 结果随便用浏览器导致自己被捕(传闻说他用的是chrome).

1 个赞

等不及楼主写的可以临时看一下Desync相关介绍: Desync - 维基教科书,自由的教学读本

1 个赞

浏览器插件,还有设置里,有防止这个的措施,更好的,禁用js,用户层面讲,你是管理员更容易被针对,tor问题是流量特征太明显,国内我不觉得更安全,你真的觉得自己有被针对的风险的话,就多加些保护措施吧,翻墙看黄不怎么发言的无所谓

1 个赞

Tor Browser is the only serious and actively developed browser designed and
recommended for anonymity.

不要妄想自己的浏览器加固能比的过Tor Browser背后有专业社区盯着随时给源代码打安全补丁在源代码层面进行加固和修复漏洞, 作为普通个人就算有相关知识也没那个时间精力, 更不用说大部分人只是更改一下设置选项或配置文件(不涉及源代码层面的加固和漏洞修复)就更加无法与Tor Browser相比.
参考资料:

Tor官网对此的相关介绍我给了简体中文, 繁体中文, 英文, 三个不同语言版本的链接, 目的是让不会英文的也能看懂, 但同时感觉翻译的有些蹩脚反而可能会造成理解困难, 所以同时提供了简体中文版本和繁体中文版本, 希望能增加理解成功的概率, 也提供了英文版本方便有能力的人更准确理解英文原文意思.
流量特征明显的问题不必盲目恐慌, 绝大多数情况下不是安全问题, 发现Tor和发现你用Tor干了什么是两回事.
如果你真的担心流量特征的问题, 可以尝试加密前置代理并开启OBFS4, 不过此方法可靠性值得怀疑: Hide Tor use from the Internet Service Provider
如果你认为被发现使用Tor是一件绝对危险的事情, 可以尝试Mullvad Browser, 是去掉Tor的Tor浏览器, 具备Tor浏览器的安全加固: Mullvad Browser | Tor Project | Support

1 个赞

根据StatCounter的数据 https://gs.statcounter.com ,2024年,Chrome在全球浏览器市场中占据了67%的份额,单从市场份额来讲,Chrome不安全显然是不合适的。除了Firefox之外,大多数浏览器都是基于Chromium的"套壳"浏览器,因此,在Chrome上可能出现的问题在其他Chromium套壳浏览器上也同样可能发生。
当然我同意“极客”们对浏览器安全性保持关注的说法,特别是 csdn被挂马了 我的文章还引用了csdn的地址,我去修改提醒下

意思是在说"单从市场份额来讲,说Chrome不安全显然是不合适的。"?
安全性和市场份额是两回事, 就像Tor浏览器安全性远胜其它浏览器却市场份额不高.
Chrome本身也是不利于隐私保护的浏览器: 弃用 Chrome 改用 Firefox 的几点理由——关于 Chrome 69 隐私丑闻的随想 @ 编程随想的博客
Chrome本身不安全不是技术原因(谷歌技术还是很高的), 而是谷歌本身的人品问题, 根本就没真打算确保用户隐私.

安全性和市场份额是没有直接关系,我指的就是chrome技术方面讲没问题,我总不能像那些浏览器官网主页一样,广告屏蔽、隐私保护、加密。。。一项一项列出来比对吧,所以笼统地用充分市场竞争下优势产品更有竞争力的观点来给chrome安全性做并不充分的举证

人品问题,其实还有更好的词来表达这个说法,但是我一时想不到,毕竟公司又不是人,公司哪来的人品。
市面上主流浏览器就那么几个,没能力自己写一个浏览器用,那就只能从几坨不那么臭的大粪里挑一个(民主不也是如此),我想表达的是浏览器隐私性 chrome> 国产浏览器 , Maxthon 网络浏览器会收集敏感信息并将其发送到中国的服务器
Maxthon - Wikipediahttps://www.securityweek.com/maxthon-browser-sends-sensitive-data-china/

用国产浏览器发“习近平是傻逼”被国安知道了,与用chrome发 “拜登、特朗普是傻逼”被FBI知道了,前者真的会被判“寻衅滋事罪”,后者FBI也不会跨洋来抓。

当然这个例子事实上依然不够对标,前者在中国社会的主流叙事里叫做“说了不该说的话”会触发多数人跳脚反应,后者即便身处美国社会去做也无人在意

从无政府主义者角度去考虑,没有任何政府值得信任,我支持任何形式的安全性推进,但面对不同层次安全性威胁,只能推荐抵御更接近的、急迫的、在眼面前的

谷歌浏览器虽然比国产浏览器更可信一些, 但还是不如Tor浏览器, .
所以能一步到位用Tor浏览器就别用Chrome这种, 当然国产浏览器就更不能用了.

问题是技术方面没问题但信誉不行还是不敢用, 这道理跟不敢用国产一样, 并不是因为技术方面不敢用, 虽然谷歌可信程度明显高于国产.

1 个赞