【转载】详解Proton
以下内容为转载且已翻译为中文,转载仅用于传递更多信息之目的,不代表本人立场---
Proton-PN 在一些网络严格受限的地方依然可以正常工作,这是因为其采用了一套巧妙的机制。整个流程可以分为两部分:
1. 确保客户端可以正常访问 API 端点
2. 确保客户端可以连接到 -PN 服务器
一、API 端点的访问策略
为了让客户端能够正常工作,Proton-PN 首先需要解决如何访问 API 端点的问题。流程如下:
1. 尝试通过 HTTPS 直接访问 API 端点
- 客户端首先以 HTTPS 协议访问默认的 API 端点,尝试解析一个特定的 DNS 记录用于获取备用API端点地址。
- 如果访问 成功,客户端会直接与主 API 端点通信,不再进行其他操作。并放弃上一步查询到的结果。
- 如果访问 失败,则执行下一步。
2. 调用内置的 DoH 服务
- 如果直接访问失败,客户端会切换到内置的两个 DoH(DNS over HTTPS)服务:Quad9 和 Google。
- 通过 DoH 查询特定的 DNS 记录,以获取备用 API 服务器地址。
- 使用获取到的 IP 地址直接访问:
- 如果 成功,客户端会与备用 API 端点继续通信。
- 如果 失败且错误非连接超时,放弃连接。
- 如果 失败且错误为超时,进入下一步。
- 如果 DoH 服务都无法连接,则直接进入下一步
3. 启动临时 -PN 模块
- 如果通过内置的 DoH 服务依然无法获取备用地址,客户端会启动一下设备上的 -PN 模块。
- 临时 扶墙 模块尝试连接到 Proton 的已知服务器,建立通信后再次请求 API 端点。
- 请求完成后关闭 -PN,客户端切换到备用 API 地址继续通信。
- 如果以上方法仍然失败,客户端会继续轮询备用 API 地址,直到成功为止。
二、-PN 服务器的连接策略
当客户端成功访问 API 后,接下来的目标是连接到 Proton-PN 的服务器。
为此,Proton-PN 使用了名为 Stealth 协议 的技术,这是一种经过精心设计的混淆协议。
1. Stealth 协议的技术核心
- Stealth 协议的本质是 混淆后的 WireGuard over TLS 隧道。
- 在 WireGuard 的基础上增加了一层 TLS 加密。
- 外层的 TLS 层可以模仿标准 HTTPS 流量:
- 使用 OpenSSL 库来实现TLS连接。
- 通过 JA3 指纹的伪造,使客户端发出的流量伪装成常见的的 HTTPS 应用。
- 服务端也保持相同的伪装技术(也使用openssl库实现TLS连接和JA3S指纹的伪造),使流量难以被检测和追踪。
2. 连接流程
- 客户端随机选择一个或者由用户指定一个已存在的 -PN 服务器。
- 使用 Stealth 协议发起连接,混淆流量以避开网络审查。
- 如果当前服务器连接失败,客户端会自动尝试其他服务器,直到成功为止。
在这两种技术的确保下,终于实现了较高的可靠性。
页:
[1]