从去年开始,我们的工作项目逐步迁往 github 的私有仓库里。github 太好用了,自己搭建的 git 平台完全比不上。可是购买企业版本自己架服务器成本又太高(平均一个人一年要 250 刀),而我们项目并不多(只是人多)购买私有仓库绝对够用了,唯一的缺点就是 github 没有在国内开展业务,服务器都在境外,速度很慢。之前我们无论是电信还是联通线路,从 github 上 clone 项目的速度一直没有超过 200KB/s ,而我们租用的国际线路本身带宽又很低(因为单价太高,所以只做部分翻墙用)。而且连接还不太稳定,有一定的丢包率。考虑到我们办公室租有多条不同运营商的宽带,所以最近在考虑怎么把这些资源整合在一起使用。带宽的瓶颈显然是在墙上,所以只要提高过墙的带宽就可以了。我在linode 机器上做了测试,从 linode 美国机房 clone github 仓库的速度轻易可以达到 8MB/s 。一开始我的念头是自己写一个支持多条 TCP 连接协作的 tunnel 程序。后来转念一想,MPTCP 不就是干这个用的么?去年的时候玩过一阵 MPTCP,这次和我们爱折腾的 SA 同学们一起再试试。公司曾购买过一个备用翻墙的 linode vps ,不过是很早装的系统,内核不支持mptcp,所以需要先升级。要做的准备工作还包括添加办公室网关上的的路由规则,在内网一个 IP 可以看到所有的出口。所有准备工作完成后,我们测试了从办公室到 linode 机器的 TCP 连接,发现 MPTCP 已经起作用了。然后只需要把 github 的 IP tunnel 到 linode 上就好了(github 服务器并不支持 MPTCP )。做测试的话,可以直接用 ssh -L ,不过日后可以选用类似tcptunnel这样的更廉价的方案。我们办公室有 4 个对外出口,当我们用 MPTCP 在同一条 TCP 连接中同时使用上 4 条路径后。经过 linode 中转到 github 服务器的带宽果然极大的提升了。试了一下 clone skynet 的仓库,可以达到 500K ~ 1M /s 的速度。剩下的工作是修改内部 DNS 让 github 的 IP 指向 tunnel 的内部 IP 。当然,日后可以考虑用 openvpn ,就可以通过修改办公室的路由规则直接(不修改 dns )绕道 linode 连上 github 了。从办公室到 linode 这一段极大的利用了所有的出口路径。ps. 据说 openvpn 的协议被墙监控,所以 openvpn 方案还需要实测才看得出效果。