如何解决 Resilio Sync 无法正常同步的问题

Resilio Sync(原名 BitTorrent Sync,本文简称 BTSync)是一款很好用的分布式文件传输工具,但是,其数据传输方式本身虽然是去中心化的“分布式”,可在寻找节点时,却完全依赖中心化的 Tracker 服务器来追踪可用的节点,这便成了它的阿喀琉斯之踵,也是各位小伙伴无法正常使用的原因。

对技术不感兴趣的小作伴,可以通过这样一个比喻来了解一下 BTSync 是为何不能正常工作的。

想象有一栋公寓(互联网),里面住着彼此互不相识的人,每一个住户的房间号会被不定期更换(ISP 动态分配 IP 地址)。某一时刻,房间号是 001(电脑 IP 地址)的住户 Y,想要和住户 X(某人的电脑)交换文件,虽然 Y 不知道 X 的房间号(某人的 IP 地址)是什么,却知道楼管 Z(BTSync 的 Tracker 服务器)实时记录着这栋公寓的所有房间号及其对应的住户。这时 Y 就可以通过楼管 Z 得知 X 的房间号是 009(通过 Tracker 服务器获取到某人的 IP 地址),并顺利地和 X 完成文件交换(完成分布式传输)。但不幸某一天 Z 被人劫持了(Tracker 服务器被屏蔽了),此时住户 Y 的房间号是 016(电脑 IP 地址更换了),当他想要再次和 X(某人电脑也已更换了 IP 地址)交换文件,就无法实现了。

网络上流传的一些解决方法,诸如修改 Hosts、使用网络代理、使用第三方修改版客户端,其目的都是要解决无法访问 Tracker 服务器(把楼长 Z 找回来)。后来甚至还出现了仿照 BTSync 的原理自行做实现的类似软件。但是说到底,这类方法都是中心化的,并不是书伴想要的,当初选择 BTSync 分享文件的时候也以为它真的是去中心化,所以对后来发生的事很失望,也一直在找可行方案。

通过查找资料发现,BTSync 的早期版本,如 1.4.111,除了使用 Tracker,还提供了以 DHT 的方式发现节点,而这个 DHT 才是去中心化的真正精髓之所在,只可惜在后来的版本 BTSync 将其移除掉,变成了完全依赖 Tracker 服务的“伪”去中心化软件。所以有网友打趣说 1.4.111 的 BTSync 是最后的坚守。

对 DHT 这一技术概念感兴趣的小伙伴可以自行搜索了解。对技术不感兴趣的小伙伴可以继续接着上面那个比喻往下看。某个时刻,住户 C、D、E、F、X 互相之间都交换过文件,彼此之间知道对方的房间号,这就形成了封闭的 DHT 网络。由于它们的房间号更换频率不同,即便任意一个人更换了房间号,也是能够轻松找到彼此。当然,如果其中一员很长时间没有和其他人交换文件,那就可能和其他人失联,再也进入不了这个网络了。这也是 DHT 网络唯一的缺陷。

想要连入现有的 DHT 网络就必须先进入这个网络,那对于已经失联的你该怎么办呢?那就需要通过某种方法,先联系到某一节点,然后这一节点再把它所知道的其它节点告诉你,其它节点再把其它节点知道的节点告诉你……这样你就重新回到 DHT 网络中了。谨记,想要避免落单需要持续在线。

知道了 DHT 网络是解决问题的关键,也知道了需要通过某种方法进入这个封闭的 DHT 网络,那到底用什么方法呢?你可以通过更改 Hosts 或使用网络代理,先连上 Tracker 服务器获取一些节点,但是这类方法有些麻烦,这里推荐小伙伴们使用 BTSync 的“预定义主机”功能,通过指定某个节点的 IP 和端口加入 DHT 网络。但是要想某个节点的 IP 可用,这个节点就必须有一个外网 IP,现在很多 ISP 并不会给用户分配独立的外网 IP,这又该怎么办?解决方法就是使用虚拟网络。比如 ZeroTier 就能满足这一需求,简单说,它可以为你的联网设备分配一个独立的虚拟 IP 地址,就可以和其它联网设备的虚拟 IP 地址通信了。

这样一个完整的解决方案就出来了。那下面就来介绍此方案的具体操作步骤:

1、安装 ZeroTier 虚拟网络

ZeroTier 下载:WindowsmacOSLinux、NAS etc…

首先下载并安装 ZeroTier,启动后,点击状态栏上的 ZeroTier 图标,在弹出的菜单中点击“Join Network…”,填入下面这个 ID,加入书伴文件分享使用的虚拟网络:

17d709436c2e5dc2

2、安装 1.4.111 版本的 BTSync

然后下载并安装 1.4.111 版本的 BTSync,然后输入书伴分享的密钥添加同步。鼠标悬浮到这条同步,点击出现在右边的“”按钮,在弹出的菜单中点击“偏好设定…”,仅勾选“搜索 DHT 网络”和“使用预定义主机”,其它的全部取消勾选。最后在预定义主机中增加如下所示的 IP 和端口:

172.23.156.207:57842

这样你的 BTSync 就可以加入现有的 DHT 网络了。如果你的同步仍然没有节点,可能是虚拟网络没有连通。请打开命令提示符(或终端),使用以下这行命令,测试一下是否能够连通预定义主机:

ping 172.23.156.207

如果 ping 命令显示无法连通这个 IP,请尝试打开 ZeroTier 菜单,点击 Show Network…(或 Network Details…),把 Allow Global IPAllow Managed IPAllow Default Route 三项都勾选上,然后再尝试运行上面的 ping 命令,如果能够连通,你的 BTSync 就可以正常同步了。

以上就是一个较为可行的的解决方案,真正去中心化,不依赖任何中心主机。唯一的弱点就是万一 ZeroTier 被干扰了,就需要更换其它可行的寻址方案了,不过目前还能用,待水来时再找土掩吧。

另外,欢迎各位能让自己的 BTSync 长期在线的小伙伴贡献你的 ZeroTier 虚拟网络 IP 和 BTSync 端口,可以让后来的小伙伴通过更多的 IP 进入 DHT 网络,加入人人为我我为人人的共享网络。

有帮助,[ 捐助本站 ] 或分享给小伙伴:

发表评论

标注为 * 的是必填项。您填写的邮箱地址将会被保密。如果是在本站首次留言,审核后才能显示。
若提问,请务必描述清楚该问题的前因后果,提供尽可能多的对分析该问题有帮助的线索。

小伙伴们发表了 38 条评论

  1. 不行啊,方法都试过,网络适配器里多出个,显示无internet访问,按你勾选的方法测试IP请求一直超时,还有没最新的方法???

    • 安装 ZeroTier 加入网络后,网络状态是怎样的?不要理会网络适配器,只看 ZeroTier 中那个网络的状态。

  2. 其实只要设置好ZeroTier以后,就不需要专门安装1.4版的软件了。Resilio可以在局域网内设置好预定义主机以后直接同步,自己试了一下似乎是没问题的。