数字游民系列001 - 如何利用树莓派加速网络

起因

开始远程工作一个月了,远程工作的好处是可以自由移动办公场地,刚好也赶上快过年了,得以顺利错峰回到老家准备过年。 至于我是如何开始远程工作的,我回头专门写一篇。

总之,回家之后发现的第一个痛点是老家的网络在办公的时候很慢,更具体的说,是访问Google比较慢.

到底有多慢呢?我使用traceroute对比了一下。

traceroute01

traceroute02

(上图是在市里,下图是在老家)

总结一下测试结果。

Location Hops Delay
我家(电信宽带) 17 <187ms
老家(移动宽带) 20 <513ms

可以看出来,网络变差了很多。从我自己的体验上也是这样,访问网站变慢了,开视频会议的时候等待时间变久了,连测试功能时API的相应时间也肉眼可见的变长了。

强忍着恶劣的网络工作几天之后,发现工作效率很低,工作时长也变长了,终于是忍不了了,决定解决一下这个问题。

解决思路

既然在我家的访问速度并不慢,是不是可以让流量先回我家,这样问题不就解决了。

刚好在回老家前, 我在家里的树莓派上部署了frp客户端,加上阿里云VPS上的frp服务端,可以实现内网穿透。有了内网穿透,我就可以从老家连回树莓派了。

而且由于树莓派上已经搭建好了代理服务,我其实只需要能连上树莓派上的代理,就能解决问题。但由于家里的宽带并没有公网IP,并不能直接连接,所以还是需要阿里云VPS来作为跳板。

解决思路如下,流量先经过阿里云VPS回树莓派,再从树莓派出去。黑色箭头是去程流量(outbound traffic),绿色是回程流量(inbound traffic)。

layout

于是,下一步我要解决的问题是,如何将树莓派的代理服务映射到本地。

SSH Port Forwardings(SSH 端口转发)

SSH端口转发的原理基于SSH的加密通信和端口转发功能。一般分为三种类型:

  1. 本地端口转发(Local Port Forwarding):将本地主机的某个端口转发到远程主机上的另一个主机和端口。当本地主机上的应用程序尝试连接本地端口时,SSH客户端将数据通过加密通道发送到远程主机,然后由远程主机转发到指定的目标主机和端口。这种类型的端口转发通常用于跳板访问内部网络或绕过防火墙访问受限资源。

    ssh -L 8080:SOME_IP:80 user@VPS_IP
    

    本地端口8080将被转发到外部服务器的80端口。当你在本地浏览器中访问 http://localhost:8080 时,SSH客户端将会将流量转发到公司内的SSH服务器,然后由SSH服务器转发到外部服务器,最终你可以看到外部服务器的网页。

  2. 远程端口转发(Remote Port Forwarding):是将远程主机上的某个端口转发到本地主机或其他机器上的另一个主机和端口。当远程主机上的应用程序尝试连接转发的端口时,数据将通过SSH加密通道发送到本地主机,然后由本地主机转发到指定的目标主机和端口。这种类型的端口转发通常用于内部网络向外部网络提供服务。

    ssh -R 2222:localhost:22 user@VPS_IP
    

    远程SSH服务器的2222端口将被转发到本地主机的22端口。这意味着,外部机器可以通过连接到外部SSH服务器的2222端口来访问本地主机上的SSH服务。

  3. 动态端口转发(Dynamic Port Forwarding):允许用户在本地主机上创建一个SOCKS代理服务器,通过该代理服务器转发所有TCP连接。当本地主机上的应用程序配置为使用该代理服务器时,所有的网络流量都将通过SSH加密通道发送到远程主机,然后由远程主机转发到目标主机和端口。这种类型的端口转发通常用于在不受信任的网络上安全地浏览互联网。

    ssh -D 1080 user@VPS_IP
    

    在本地主机上启动一个SOCKS代理服务器,监听本地的1080端口

利用SSH端口转发的功能,可以实现流量转发的效果。

第一步,在树莓派上转发本地代理1080端口到阿里云主机的1081端口。

ssh -R 1081:localhost:1080 user@VPS_IP

第二步,在本机转发1080端口到阿里云主机的1081端口

ssh -L 1080:localhost:1081 user@VPS_IP

第三步,配置代理走localhost:1080,完成!

按照上诉步骤配置后,即可实现让流量先回到树莓派再到Google。实现流量转发后,访问Google的速度比之前快多了,基本可以达到之前在家里的访问速度。

存在的问题

虽然实现流量转发后,访问Google的速度已经快多了,并且以后不管去哪里办公,只要我还能连回到树莓派,都可以获得不错的办公体验。

但在特定场景下还是存在一些问题。比如下载文件时,只能跑不到500KB,而之前是可以跑到接近4MB的。我原本以为这是SSH协议实现的限制,后来发现其实是我买的阿里云VPS出口带宽只有3MB。所以在使用跳板机做端口转发的场景下,跳板机的出口带宽会成为网速瓶颈

能够直连的场景还是尽量直连吧。

总结

  1. 移动宽带出境比电信宽带慢的多,不仅路由路径变长,延迟也会增加。
  2. 使用国内的VPS做跳板机 + SSH,可以轻松实现端口流量转发的功能。
  3. 使用端口转发,跳板机的出口带宽会成为流量瓶颈。