前几天讨论的挺火的,估计全国要推广了,随便写点自己的想法
技术有限,欢迎指正和补充
和墙相反,个人认为这个问题的关键在于让 web 服务无法被探测到。目前国内内部的流量还不至于有加密就阻断。 那么问题就可以转化为以下两点
第一点不说了,第二点拓展一下。不管怎么 DPI,服务最终是要在审核人员的设备上复现的,否则无论再怎么怀疑没有理由封宽带。要阻止这一过程就会很艰辛了。要实现这一点也可以分成两部分:要么完全不泄露域名,要么即便拿到域名也无法访问服务。
frp 肯定是最简单的方法,但是太无聊了。
HTTP 明文就不说了。
双向证书可以确保不可复现,即便拿到域名也无法访问服务。但非浏览器的支持就比较糟糕了。配合 TLS 1.3 和还在草案的 eSNI 确实可以实现完全不留痕迹。这种情况下使用 DDNS 应当问题不大,因为外界确实看不到是否有使用这个域名进行通讯,拿到也访问不了。
如果不想用双向证书,那就只能把域名藏好。这种情况下用 DNS 风险就很大了,否则发现域名指向家宽,审核人员 doublecheck 发现是通的,完美复现。保险起见还是写个 crontab 脚本自己更新地址吧。
TLS 1.2 握手时的 SNI 和证书都是明文的,肯定是不能用了,分分钟被 DPI。 TLS 1.3 的证书是加密的。 Encrypted SNI 可以防止 SNI 泄露,但现在还是草案,CF 和 FF 的实现并不是普世的,随时都会 drop。不过只编译一份自己用问题不大,等过几年实装普及吧。
确保域名藏好之后就可以套一个 sni proxy 使用域名通信了,发现 sni 不对就扔掉。这也是不直接使用 IP 通讯的原因:运营商可以扫端口,发现有 TLS 应用在监听是可以伪装成客户端建立连接的。
TCP Port Knocking 我个人是持保留态度的,因为要设计一个防 replay attack 的 mechanism 很花时间,如果是基于 TLS 的话还是会遇到上面的问题。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.