有着东亚地区之硅谷称号的粤海街道似乎从9月就受到特别关照,各类基于SS的翻墙服务受到严重干扰。即使是用搬瓦工高级机场justmysocks1出品的梯子,上Google查个网页也是磕磕绊绊。然而在十几公里外的家里用机场的梯子一切正常,于是萌生一个想法:用二级跳板,从粤海街道跳回家里,再从家里宽带出发翻墙。
目的
- 从办公室连回家中服务器
- 从家中服务器翻墙
情况前提
- 作为二级跳板的家中宽带没有固定IP(甚至是运营商NAT的内网IP),为了暴露给外网连接,需要一个公网转接的服务,因此需要一个VPS做内网穿透的中转服务器
- 家中服务器是一台老旧的笔记本电脑,跑了个Ubuntu,作为家庭信息中心
前期准备
- 硬件
- VPS一台,墙内外无所谓,但VPS的下行带宽标志着翻墙速度的上限。搬瓦工机场的电信直连速度往往高达10MB/s,如果用阿里云和腾讯云的廉价VPS仅1Mbps的基础带宽会严重成为速度瓶颈。个人使用的是搬瓦工已停产的电信直连VPS,500GB/m流量,1Gbps带宽。
- 作为二级跳板,找一台x86架构的电脑,装好ngrok的外网穿透工具,ss_local的本地SS客户端
- 一个SS服务器,个人用的是搬瓦工提供的机场梯子
- 软件
- 二级跳板
- ngrok
- ss_local
- VPS
- ngrokd
- 办公室电脑
- Chrome + SwitchyOmega
- 二级跳板
架构图
几点说明:
- ngrok的使用参见 内网穿透工具ngrok。如果家中拥有公网IP(比如打电话给电信要求公网IP),则可以通过再服务器上跑一个定期脚本
curl ifconfig.me
并开放到HTTP服务上,使得可以不使用ngrok这个效率低下的轮询转发方案。 - 由于我的VPS也在美帝LA,所以每次request数据都得往返两次太平洋,即使是电信直连机房,网络延迟依然高达600+ms。不过对于浏览网页和下载,倒也影响不大。
- 作为二级跳板的路由器记得开NAT映射端口,或者DMZ。
铺设简介
内网穿透
内网穿透是为了解决二级跳板从外部无法访问的难题。
ngrok是一种廉价而不稳定的方案,开源版本是1.x。如果追求稳定性,可以考虑国内的蒲公英(4M带宽) 或ngrok的商业版本。还有一些其他的提供商,搜“内网穿透”一大堆。总的来说,国内的便宜但是带宽太差,国外的贵但是一般不限带宽(当然出国带宽是个问题)。
最理想的情况,二级跳板不需要内网穿透,有独立公网IP。这样即使是浮动IP,找个窄带宽的内网穿透方案,搭个定时对外广播IP的HTTP服务就好,稳定又效率。
# crontab -e
# * * * * * /usr/bin/curl myip.ipip.net >> <www服务的绝对路径>/ip.txt
ss_local到socks5的转发
其实大多数ss客户端都已经提供了socks转发,比如
./shadowsocks-local-linux32-1.1.5 -s <server> -m aes-256-cfb -p <port> -k <password> -b 0.0.0.0 -l 1080 &
中的1080就是转发本地socks5端口。所以对于需要翻墙的PC机,只要处于ss_local的局域网中,访问ss_local所在ip的1080端口即可。
socks5到http的转发
由于上网往往使用的是http,所以需要把http的请求转发到socks上。
在Chrome中,用SwitchyOmega可以简单的设好。
其中代理服务器
填写二级跳板的IP(或内网穿透的中转服务器);代理端口
填写ss_local开放的socks端口(比如1080),如果是采用内网穿透方案,则填写1080映射到中转服务器的端口号。
小贴士
- 整个方案中的端口号变了很多次,按照转发顺序捋一捋就不会昏头;
- 对于socks流量里的ss流量是否有被查水表的风险(而且是这次查真实住址的水表...)未知,只能说未以盈利为目的,应该还不会打击太狠吧……
- 两跳之后依然偶尔有网络连接不稳定的情况存在,个人觉得是因为跳得太多了;
- 性能:用ngrok做中转的方案下,深圳电信,g-drive下载速度在700-800KB/s,延时600-700ms;
ss_local
端暂时没找到能很好支持gcm模式的工具,cfb模式总是有点虚。