可搜索,可注册,可登录,致敬逗比大佬!尽在救援版逗比根据地 dbgjd.com
投稿文章 | 广告合作 | Telegram 群组 / 公告频道 / 使用教程

以尽可能快的速度传输文件——Resilio Sync 的一点使用笔记

News ssj2_da1m0z1995 162℃ 0评论

其实需求很简单:

  • 在国内传输文件
  • 文件比较大(> 10G)
  • 不依靠商业网盘(Google Drive ,百度云)之类的中转,也不想(通过服务器转存的方式)中转
  • 尽可能逼近物理带宽极限

折腾了两天,终于有一点进展了,遂决定记下来,分享给和有着同样需求的朋友们。

Direct

可能有人会说,同步文件不是很容易嘛,直接 rsync 就好了,的确,如果大家都有公网 IP ,且互相信任 SSH 的话,一个 rsync 再加上 --progress -avz 之类的参数是非常舒服的,尤其适合海外高带宽 VPS/物理服务器之间传输一些很大的东西,但是在本文的应用场景中,不是这样。

其次对于一方有公网 IP 的话,我们可以在有公网 IP 的一方开一个服务器(在大陆的话不能监听 80,443 等常用端口,因为这些端口已经被 ISP 给封掉了),如果数据不重要的话直接 php -S 0.0.0.0:8888 这样就可以直接让对方来访问并且下载了(ISP 想劫持的爱咋咋地),严谨一点的话可以用 certbot 弄个证书,这样可以稍微安全一点,这种方案我们需要考虑的问题是 DDNS 和公网 IP,前者配置比较麻烦,后者… 有的时候弄不到。

Syncthing

在尝试的过程中试过这一个开源产品,幸运的是,它可以在国内正常使用,不幸的是,它的速度(至少在我的网络环境下)非常慢,由于双方都没有公网 IP,只能依赖官方提供的(其实也是志愿者提供的) Relay 进行中继,分到过新加坡的中继服务器,速度非常慢,大约 40 K/s 上下。

Resilio Sync + Private Peer

所以此时我们就需要一个比较好的方案可以兼顾不同的网络环境(是否具有公网 IP),本文介绍的方案是自建 「Relay」 的 Resilio Sync 方案。

名词约定:所有运行了 Resilio Sync 并且填入了 Key(即参与同步)的机器被称为 Peer,如果是自己的 VPS(即不需要文件,只是作为中继的 Peer)我们称为 Relay。

对于 Resilio Sync 网上已经有了很多的教程,且现在配置文件地址似乎已经可以直接访问(即在大陆可以直接使用),对于桌面端用户可以直接下载最新版使用:Resilio: Download File Sync Software for Windows, Mac, Linux

具体的使用方法网上已经有了非常详细的介绍,这里不再累述,在本地添加好目录之后就需要将 Key 给被传输方了,这里我之前想错的地方在于,以为大陆内对于任何资源都会有合适的 Peer 帮助中继(其实没有),这样如果只有自己和对方机器拥有 Key 的话,Resilio Sync 会尝试打洞,但是在个人测试环境下(双方都没有公网 IP),这种方法是无效的,所以我们需要几个 Peer 作为 Relay,既然没有志愿者来作为 Relay ,我们就自己找机器作为自己的 Relay,此时找一台 VPS 安装 Resilio Sync 后添加自己的 Key 并开始运行即可。

在这种情况下,若自己没有公网 IP,则每一次同步文件的时候会同时传输到一些有公网 IP 的 Peer(也就是自己部署了 Sync 并且填入了 Key 的 VPS) 上,然后这些 Peer 再将文件传输到目标接受方,当然并不需要等文件全部传完,这个是实时的。

若有公网 IP 的话,在条件允许的情况下会尝试和接受方直接传输数据,接受方如果希望优先接受来自传输源的数据的话,可以指定 「Predefined Host」 并填写来源 IP。

以尽可能快的速度传输文件——Resilio Sync 的一点使用笔记

上图传输状态中前 2 台是 VPS,最后一台主机是我的电脑(也就是文件的原始位置,此时通过一些手段已经获取了公网 IP),可以看到拥有了公网 IP 之后的传输速度是远大于前两台的(因为大陆直连了)。

但是这样的中间服务器节点是否是 Relay 呢?答案是否定的,在官方的论坛中有这样一个回答:

It’s not currently possible to run your own relay/tracker servers for Sync as such – this will likely be a feature that’s implemented in the 「business grade」/」enterprise」 edition of Sync.

You can, however, use the pre-defined hosts options within Sync to list the IPs of your known devices to allow connection without needing to go via Sync’s relay/tracker servers. However, this assumes that direct connections can be established between the IPs you list. If direct connections cannot be established, Sync will fallback to using its relay/tracker to establish connections.

所以这个方案的弊端在于,每一次同步的时候都需要同步参与方都有足够的存储空间(因为每一个 Peer 都会存储完整的文件),且对于双方的文件交换(例如对方取文件后是否删除)来说管理起来还是有一定的难度,但是国内的国情导致了公网 IP 地址并不非常易得(需要打电话给 ISP 申请),且国内没有高速的官方 Relay,只有使用自建 Peer 的方式来给自己的传输加速,希望不久的将来 IPv6 普及率上升之后这个问题可以得到很根本的解决,因为那个时候传输文件真的就直逼带宽瓶颈了。

转载请注明:逗比根据地 » 以尽可能快的速度传输文件——Resilio Sync 的一点使用笔记

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址