前提:网络知识,公网的VPS
拿我们公司来说,intranet和外边基本是防火墙隔离,上外网只能通过一系列的HTTP/
HTTPS代理(这些代理屏蔽了所有涉及到网络存储,隧道等相关网站),除了53,80,443
其他端口一律封闭 。原因很简单,目标太大,几百个B级的IP子网,不统一隔离很难说
会出现啥灾难。公司对每一个员工的上网做流量监控和统计是肯定的,因为上一点规模
的Service Router就带有DPI功能,只是有没有人看而已。
比较简单的方案就是SSH over HTTP,然后通过ssh tunnel做动态端口映射,在自己浏
览器上用openssh的socks5代理。这样所有被屏蔽的网站全都可以上了,并且被封的端
口和软件也都可以用(比如迅雷,qq,imessage等),但是缺点也有:这个ssh隧道基
本是一个不断的长连接,在性能上比较差。另外就是公司监控数据可以看出这是一个
SSH,如果是长期且大数据量的链接那很显然就是隧道。
所以我的方案是既不能让公司监控看出是SSH,又不能是长时间大数据量的单一链接:
1. 在VPS上搭建一个Socks5代理。(Dante就可以)
2. 用stunnel,把所有数据做TLS加密封装,并且把连接到socks5代理的数据在通过
http tunnel来连接到vps。(推荐stunnel 5,因为支持SNI)
这样基本就可以了,每一个http请求都生成一个单独的TLS session,从监控上来看就
是普通的上网数据。
进一步优化:虽然已经差不多了,但如果仔细观察DPI数据,会发现每天都有大量数据
用TLS连接到一个固定的IP地址(最好不要用自己的域名),有点可疑。我的方案是把
这些TLS数据流伪装成Google或者Apple等正常每天都有的数据。
介绍一下DPI对Google或者Apple的判别方法:能对TLS数据流进行判别的方法只有几个
:SNI(类似于http的http host),证书的common name以及organization name, 与证
书的issuer无关。所以通过openssl很容易可以做一个带有Apple Inc或者Google Inc的
证书,然后放到VPS上,用stunnel进行连接时交换。新版本的stunnel已经支持SNI功能
,可以直接在客户端/服务端的配置文件上手动加入SNI ,比如
itunes.apple.com。 这
样,所有通过自己代理上网的数据,公司的监控就会显示为Apple iTunes或者Google,
并且都是正常的符合Web Browsing模型的数据流。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/120342
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.