与NNCP的异步通信:Tor,SSH和UUCP之间的交叉

2020-12-26 19:29:42

您是否曾经旅行,拍摄过大量照片和视频,但很生气地发现它使您可以访问的可怕wifi变得饱和了?也许您希望暂停上传,直到您到达其他位置为止,但是随后在Nextcloud / Syncthing / Dropbox上暂停同步也会暂停您不想暂停的其他同步。或者您在不在家时无法备份笔记本电脑时遇到麻烦,不会意外吞噬手机数据。

这里有很多背景。如果您想查看加密的洋葱路由式UUCP的外观,请跳到“ NNCP”部分!

有句老话:“当你只有一把锤子时,每个问题都像钉子。”我们有一个称为ssh的出色工具,它无处不在且易于理解,因此我们倾向于使用它。但是我们错过了异步处理的一些好处,而这些好处实际上是我们以前经常使用的。

当然,我们都习惯了生活中的一些异步服务。电子邮件是一个流行的示例:大多数邮件客户端都脱机工作,并且在邮件服务器可访问时将传输存储的邮件。邮件服务器本身也是如此。许多即时消息平台也是如此。

甚至某些备份系统也可以。例如,Bacula / Bareos将所有备份数据后台处理到连接到磁带机的系统上的磁盘上,然后再从那里备份到磁带本身上。他们这样做有几个原因,但主要是这样的事实:如果未以设计速度为磁带驱动器提供数据,则可能对磁带甚至驱动器造成物理损坏。它导致驱动器必须暂停,并向后搜索以重新定位以进行下一次写入。这会导致磁带在写头上过度移动,从而导致磁带过早损坏的情况,即所谓的“磁带擦”。

人们在通过网络(或Internet)同步发送数据时经常遇到以下问题:

Internet缓慢导致流程花费比计划更长的时间,从而导致意外结果或锁定问题

当然,在很多情况下必须进行同步通信。例如:

我怀疑,尽管它在Unix传统中很强大,但我们今天不进行更多异步处理的原因是缺乏执行此操作的现代工具。让我们探索更多。

我在所有支持ZFS的系统上运行ZFS:文件服务器,便携式计算机,工作站等。使用ZFS发送/接收进行备份是很自然的事,我也这样做。但是,当我旅行时,我的笔记本电脑永远都不会备份,因为备份是从备份系统中提取的。当然,有很多解决方法。例如VPN。但是然后我们遇到的情况是,即使我有可用的Internet连接,有时我也不想发送备份:也许我被拴在移动连接上,这样做会很昂贵,或者我正在使用Wifi酒店那是片状且缓慢的,我不想放弃任何微薄的带宽。

我还有另一个与备份有关的问题。我有一台远程服务器,直到最近它一直在使用极慢的磁盘。如果进行了重大更改,则备份将花费一天的大部分时间。当我尝试每小时备份一次时,这很烦人。因此,我当然必须实现锁定,但是那意味着那天其他机器也不会备份。

一次,我需要传输大约2TB的数据。我的家庭互联网连接速度非常慢,我计算可能需要几个月的时间。因此,我开始手动将部分数据复制到笔记本电脑上,每当我发现机场或咖啡厅的上网速度比家里快时,我便会从中删除这些数据。但是,这需要大量的工作。

而“大量的工作”也许就是为什么我们不做更多的事情。尚无出色的标准解决方案,因此在需要时全都是“自己动手”。因此,我们仅使用ssh,因为它更简单,通常“足够好”。但是,正如我在最近有关气隙备份的文章中所写的那样,有理由进行异步。

能够为机器排队数据并以任何可能的方式让它到达那里不是很好吗?也许找到了快速的Internet连接,或者通过Tor,或者通过复制到USB记忆棒,或者通过无线电广播?这将使其中许多情况变得容易得多。现在,有了现代安全性,有多种方法可以实现!

为此,我们在Linux上有一些工具:git-annex用于存储和迁移,syrep用于同步,NNCP用于文件传输和远程执行(可以与其他一些工具结合使用)。让我们深入了解NNCP。

如果您已经了解UUCP,可以将NNCP视为具有现代安全性和工具的UUCP进入了现代时代。

基本上,NNCP允许您将文件发送到远程系统,从远程系统请求文件,以及将数据通过管道传输到NNCP命令,以请求远程执行。因此,您可以说,将zfs发送到NNCP的管道传输到NNCP,NNCP将其发送到远程,再到zfs接收到它的管道。

NNCP具有可延迟的,可恢复的协议,该协议几乎可以在任何可靠的连接上运行:TCP,串行,Tor,各种无线电,您都可以命名。但这还不是全部;它也可以将其队列转储到USB记忆棒之类的东西上进行传输,甚至可以制作出可随意混合的tar样式的流。如果您想花哨的话,可以为数据包分配优先级,例如,出站电子邮件将始终在您还必须发送的1TB文件之前发送。您还可以对其进行配置,以使某些运营商可以处理某些数据优先级。您的手机只能处理最紧急的情况,但是USB记忆棒可以处理任何事情。

NNCP是源路由的;您可以说鲍勃到达爱丽丝的方式是通过卡尔,然后是贝蒂。 Bob可以生成一条将沿着该路由发送的消息,并在此过程的每一步都进行了完全加密和认证。 Carl除了下一跳以外,看不到邮件的内容或什至有关邮件的任何内容。

对于正在备份的笔记本电脑,在旅行时可以将其备份,照片,视频或其他内容排队。连接良好时,它们可以由命令触发,也可以自动触发。数据可以复制到USB并提供给朋友进行传输;由于加密,因此非常安全。或者也可以等到回到家后,安全地移出其他同步目录。 NNCP文档中有一个示例。

对于缓慢备份的服务器,这很容易解决;慢速备份只需排好队,并在准备就绪后进行传输和处理。这不会中断其他备份。

2TB传输问题如何? 这也使事情变得容易得多。 可以运行一条命令以将部分队列填充到USB记忆棒,然后将该USB记忆棒插入并在快速位置传输。 在慢速系统继续上传其余位时,根据需要重复操作。 如果您已经熟悉SSH中公钥的工作方式,那么NNCP也应该立即熟悉。 这是一个类似的概念(尽管可以说设置起来比较容易)。 我正在建立NNCP网络,一旦完成,将会有更多关于如何执行此操作的信息。 同时,该项目的文档也很好。