IPFS 分享资源快速上手及其适用场景浅议
前言
本文是 IPFS 快速上手教程,旨在快速入门 IPFS 的基本操作。详细介绍了 IPFS(星际文件系统)的使用方法、优缺点及其在资源分享中的应用场景。文章首先讲解了 IPFS 的基本操作,包括文件的上传、固定、分享和下载。随后,介绍了 IPFS 本地文件管理和使用托管平台的方法。最后,文章对比了 IPFS 与传统网盘分享方案,提出了分场景使用不同级别分享方案的建议, 分析了 IPFS 作为最终手段,在应对恶意举报问题上的优势。
文件结构说明:
1、2、3 节主要讲解 IPFS 的基本使用方法;
4 节讲如何使用托管平台托管文件;
5 节讲使用 IPFS 轻量化做种;
6 、7 节讨论了 IPFS 安全性方面的问题。
更新:
2025/05/28 把本地做种部分进一步调整,将另一篇进阶教程文章的内容合并。
2025/05/19 IPFS 上手教程结构调整,把移动仓库调整到第一节,同时去除了 Chainsafe 相关内容,加入了 aleph 相关的内容
2024/11/03:4.4 节更新 IPNS 用法相关内容介绍,可以在无服务器的情况下创建类似于域名的网址用于可更新的分享,详见目录;同时修正了一些文章错漏。
文章目录
https://cangku.moe/archives/212530
https://www.south-plus.net/read.php?tid-2357385.html
<p style="text-align:center;"><span style="font-size:20px;"><strong>IPFS 下载快速入门,只想知道怎么下载看这个就可</strong></span></p>
<p style="text-align:center;">[iframe]https://www.youtube.com/watch?v=Xof9kek1orU[/iframe]</p>
<p style="text-align:center;">如果看不了油管视频,可以在 <a href="https://gateway.pinata.cloud/ipfs/bafybeietvf3b44xlecktxegyutdwtedse42qriv7tisc4c7nzhmloqdq6i?filename=1.mp4" rel="noreferrer noopener" target="_blank"><strong>备选线路1</strong></a> <a href="https://lensshare.4everland.link/ipfs/bafybeietvf3b44xlecktxegyutdwtedse42qriv7tisc4c7nzhmloqdq6i?filename=1.mp4" rel="noreferrer noopener" target="_blank"><strong>备选线路2</strong></a> <a href="https://gw.ipfs-lens.dev/ipfs/bafybeietvf3b44xlecktxegyutdwtedse42qriv7tisc4c7nzhmloqdq6i?filename=1.mp4" rel="noreferrer noopener" target="_blank"><strong>备选线路3</strong></a> 观看</p>
关于 IPFS 的几个要点:
- IPFS 上传和下载都不需要公网 IP,也不需要 VPS,但是注意如果挂了梯子【不要开启 TUN 模式】。
- IPFS 发布文件需要先固定(类比 BT 的做种),然后可以通过浏览器整合下载。
- IPFS 除了自己固定(做种),也可以选择托管平台托管,代为做种。
- IPFS 发布的文件大部分都可以直连下载。
先在这里下载 IPFS 客户端并安装:
https://docs.ipfs.tech/install/ipfs-desktop/#windows
以下是操作流程的详细说明。
如果上面的链接打不开,或者找不到,可以从下面的备用镜像链接下载()
以下是操作流程的详细说明。
1. 固定并分享文件
1.1 固定想要共享的文件
在 IPFS 中,每一个文件都有一个独一无二的标识符 CID ,CID 在 IPFS 中就对应具体文件,类似于 BT 的磁链,因此分享 CID 就等于分享文件,下载时只需要知道 CID 即可下载文件。
CID 的示例如下(有两种格式 v0 和 v1,分别以 Qm 和 ba 开头):
目前推荐使用后者。
在配置中的 Import 部分把 CidVersion 参数改为 1 ,然后保存并重启 IPFS 即可。
配置完毕后,就可以开始固定文件了
右键点击上传后的文件,设置固定
固定在本地节点
1.2 复制 CID 以发布文件
固定成功后再次点击右键,选择复制 CID ,就可以发布文件了。
可以采用分享链接的方式分享文件,由于默认的公共网关被墙了,在分享前需要修改 IPFS 的公共网关,可以修改为以下网关中的一个:
可用 IPFS 公共网关(随时更新)参考:
https://k51qzi5uqu5djx3hvne57dwcotpc8h76o2ygrxh05kck11j6wnhvse8jrfzf2w.ipns.dweb.link/
然后右键文件-分享链接即可
在下面的网址可以找到更多的可用公共网关
https://ipfs.github.io/public-gateway-checker/
在说明下载前,可以检测一下自己网络的可用性。
此网址可以检查自己的 IPFS 网络的可用性:
下面的 4 个检查得至少满足前 3 个,如果你有公网 IP 则会有第 4 个。
1.3 移动本地文件仓库
IPFS 安装以后,默认会在用户路径(C:\Users\你的用户名)下方创建一个名为 .ipfs
的文件夹,用来存放固定的文件,如果 C 盘空间不足,可以选择移动 IPFS 仓库的默认位置。右键任务栏 IPFS 程序的图标,然后选择 Move Repository Location 即可。
注意移动仓库以后,之前固定的文件会失效,需要重新根据 CID 固定文件(如果忘了 CID 就没办法了,最好先移动仓库再开始固定文件)
2. 根据 CID 下载文件
2.1 使用 IPFS 原生下载功能下载文件
下载文件和上传文件是类似的,首先需要导入文件
在弹出的窗口中输入 CID ,可以自行指定文件名
在下载前建议先设置固定,只要固定完成了,文件就一定可以保存到本地,以避免直接下载过程中出现错误。(固定一个来自 IPFS 路径的 CID 可能会需要一定时间,因为要从其他节点拉取文件)
固定完成后点击右键,选择下载
接下来会使用浏览器的下载功能进行文件下载,先固定后下载或者直接下载这 2 种下载方式,原理都类似于 BT 是 P2P 的,能否下载成功取决于是否有人在做种。
如果安装了 IDM、FDM 等下载软件,也可以使用这些软件接管下载,比如我用的是 FDM :
2.2 使用 IPFS 公共网关下载文件
除了类似于 BT 的 P2P 以外,IPFS 还可以采用公共网关创建分享链接的方式分享文件,公共网关本身也是一个 IPFS 节点,但拥有公网 IP ,连接速度较快,可以帮助其他节点下载。具体来说就是用它生成直链,让下载者用这个直链下载。
IPFS下载链接结构为 网关+CID
示意图如下:
使用这种方式分享的时候下载者不需要软件,用浏览器、IDM 等即可直连下载。
由于默认的公共网关被墙了,在分享前需要修改 IPFS 的公共网关,可以修改为以下网关中的一个:
可用 IPFS 公共网关
或者在这个网址查找更多网关:
https://k51qzi5uqu5djx3hvne57dwcotpc8h76o2ygrxh05kck11j6wnhvse8jrfzf2w.ipns.dweb.link/
也可以在这个由 sandbox 维护的网站中寻找更多可用的网关:
https://rentry.org/ipfsnodes
按照下图所示设置:
然后右键文件-分享链接即可
在下面的网址可以找到更多的可用公共网关
https://ipfs.github.io/public-gateway-checker/
2.3 使用 IPFS 本地网关下载文件
公共网关本身也是一个 IPFS 节点,经由公共网关访问文件或文件夹 CID 可以理解为由对方代理来连接到 IPFS 网络中的资源,由于这些网关有公网 IP ,速度也比普通的家宽更快,所以通常建议用公共网关访问并下载资源。
但是公共网关也可能面临被恶意举报导致封 CID 的情况,这种时候除了更换其他公共网关,也可以用自己 IPFS 节点的本地网关访问资源,这种访问类似于 BT 是纯 P2P 的,也就是说,即使这个 CID 在所有公共网关上都被屏蔽了,只要你自己不屏蔽这个 CID 就能访问。
在本地的 IPFS 启动后,在浏览器地址栏中输入 CID,后面加上 .ipfs.localhost:8080
,即可用 IPFS 的本地网关查看并下载文件,示例如下:
http://bafybeihon37a3qtxqynvphkt4ebe3hd42tdrfw4gstsadka5yijz3fjbfe.ipfs.localhost:8080
或者在 CID 前面加上路径形式的本地网关:
http://127.0.0.1:8080/ipfs/bafybeihon37a3qtxqynvphkt4ebe3hd42tdrfw4gstsadka5yijz3fjbfe/
(注意是 http 不是 https ,这里的 http 只用来连接本地的 IPFS 节点,相当于 IPFS 成了代理,所以不必担心安全性)
这个 CID 对应的是一个 html 文件,因此被浏览器渲染成了网页的样子,按 ctrl+s 可以把这个文件下载到本地查看,对于其他格式资源也是同理,这也就是为什么 IPFS 分享的东西能被浏览器或者 IDM 或者 FDM 等下载器直接下载的原因了。
此外,在安装 IPFS 客户端的情况下,在浏览器地址栏输入:
也会自动打开刚才的本地网关。
从上面这个例子可以看出,ipfs 某种意义上可以代替 http 来访问互联网中的内容,CID 就是内容的地址,IPFS 的这种特性称为“内容寻址”
.ipfs.localhost:8080
中最后 4 位数字为本地网关的端口号,通常为 8080
,但是有时候也可能变化,此时端口被占用就无法使用,常见原因比如酸奶网盘与 IPFS 客户端冲突等,如果发现本地网关无法使用,如下图所示:
此时需要查看本地节点的 .ipfs
仓库中的 config
文件,右键用记事本打开后,下图中箭头所指的四位数字就是你的本地网关端口号,使用这个端口号即可。
2.4 使用 FDM 批量下载 IPFS 链接
在安装此油猴脚本的情况下,可以使用 FDM 来批量下载。
FDM (Free Download Manager) 是一款完全免费的下载软件,不会存在破解版 IDM 可能的弹窗问题,这里使用 FDM 来说明如何批量下载已复制的下载链接。
首先在这里下载最新版的 FDM 并安装:
https://files2.freedownloadmanager.org/6/latest/fdm_x64_setup.exe
安装完成后,先复制链接,然后点击右上角的三根横线,然后选择从剪贴板粘贴链接,选择下载路径进行下载即可。
3. IPFS 其他细节操作
3.1 清理非固定文件
当 IPFS 的本地文件过多,可以选择任务栏图标中的 Run Garbage Collector 进行清理,这个操作会清理所有没有在文件选项卡中显示的文件释放磁盘空间。
3.2 开启 DHT 加速
2024-10-09 更新:实际测试,DHT 加速会显著增加 IPFS 的资源消耗,并且相比于其消耗的资源来说对效率的提升较为有限(氪佬随意),在使用 Crust 等托管平台而非自己做种时,不建议开启 DHT 加速。
在上传之前可以在配置选项卡中如下修改配置信息,开启 DHT 加速,DHT 加速可以提高连接节点数量,增加效率。
3.3 关于分享文件的可用性
IPFS 类似于磁链,也需要有人“做种”,需要有人固定文件(做种),并且在线,才可以下载。
可以在这个网址中检测 CID 是否可用:
4. 使用 IPFS 托管平台托管文件
由于 IPFS 类似磁链,属于去中心化的分享方式,假如没人开机做种,就会导致后续的下载者没有办法下载。这种时候可以使用托管平台托管文件,代为“做种”。用法类似于网盘,但是分享不通过分享系统,而是采用 CID 进行,因此没有审核、举报系统,不管文件保存在哪里,只要 CID 匹配就可以下载到文件。
IPFS 的托管平台有很多,和 IPFS 的网关不同,这些托管平台大多数都没有被墙可直连,比如支付加密货币把文件托管给矿工的 Crust 以及基于 Crust 开发的 酸奶网盘 、可以白嫖的 Chainsafe ,这里以后者 https://app.storage.chainsafe.io/ 为例说明(chainsafe 已经于 20250401 跑路),以及目前免费的 Aleph。
4.1 使用 aleph.im 进行托管
使用 aleph 可以实现类似于 BT 的做种后离线的方式托管给 IPFS 矿工,就目前而言(2025/05/19),效果比 Crust 更好
详见这 2 篇文章:
[技巧分享] [IPFS] 通过aleph.im网络存储固定ipfs文件
[技巧分享][IPFS] Aleph拉取教程入门版
南+
[技巧分享] [IPFS] 通过aleph.im网络存储固定ipfs文件
4.2 使用酸奶网盘托管文件到 Crust 平台
本节内容不是正经教程,而只是一个操作流程,你不需要纠结其中任何操作的含义,只需要按照流程操作即可。
想要了解具体教程可以看参考文章:
[技巧分享] IPFS分享资源快速上手及其适用场景浅议 [资源防炸链解决方案]
以下正式开始
打开 https://yoghourt.cloud/ 酸奶网盘的官网,下载最新版酸奶网盘并安装,或者在这里下载
当右下角显示 IPFS 连接成功,即可拖入上传文件
然后等待上传完毕
上传完毕后等待至副本数大于 0
然后打开 IPFS 分享助手:
https://k51qzi5uqu5dh1ts2qvcw3069src00zyjw0qmwdkb102k8q4ft8bztw75iwi25.eth.sucks/
- 在右下角的计算器中拖入那个文件,然后计算 CID 后点击【填写CID和文件名到主输入框】,
- 填写后点击【下载网关测速】,
- 测速完成后点击【生成下载链接】,即可得到能直接链接到资源的链接了,
- 再点击【复制下载链接】,即可复制链接并发布,下载的时候只需要打开这个链接,用浏览器或 IDM 就能下载。
如果某个链接不能用了,把链接中的 CID (即 baf...6cwe 这样的字符串) 复制后填入图中的位置,重复 2 3 4 步骤即可。
下面是最终得到的链接,可以直接在浏览器中打开使用:
这是刚才上传的图
4.3 使用托管平台搭配 IPNS 托管文件夹
接下来说明一些仅在使用托管平台时推荐的分享技巧。
我们可以使用 CrustFiles 或者 酸奶网盘 、Aleph 等把文件分别托管 (又称上链) 到 IPFS 网络中,然后通过本地 IPFS 客户端聚合文件以进行管理。
具体来说,先把文件上传到t托管平台进行托管,然后再把这些已经托管的文件的 CID 导入并聚合到本地 IPFS 的一个文件夹中(不必固定到本地,这样就不会占用本地空间),这样一来,本地做种只需要做种聚合文件夹即可,使得文件夹中的内容能被 IPFS 网络访问,内容则交由托管平台保存,不占用本地空间。
也因此,在使用托管的情况下 IPFS 的做种比 BT 更轻量,希望大家可以积极帮助他人做种,只需要把别人的文件夹 CID 导入但不固定在本地即可(注意不要改动文件路径中的文件名,否则会导致 CID 发生变化,想重命名进行管理的话,可以新建一个文件夹把东西整个丢进去),这样一来就可以帮助他人保持文件夹路径的可用性。并且由于内容托管在矿工那里,做种不消耗自己的流量,可以减少被运营商查水表的可能性。
由于 IPFS 内容寻址的特性,不同内容的 CID 都是不同的,假如你的内容需要频繁更新,每次都要改链接无疑很不方便。此时可以把聚合文件夹发布到 IPNS,把文件夹的 CID 与 IPNS 地址相关联。
和 CID 不同, IPNS 的地址是不变的,特别适合需要持续更新的内容,其内容需要使用你节点的私钥才能更改,可以当成自己的一个“域名”来使用。并且这个“域名”也是去中心化的,保存在 DHT (分布式哈希表)中,只要你的节点每天至少上一次线,就可以保证这个“域名”可用,和传统的 HTTP 域名不同, IPNS 即使关机也不会造成“域名”无法访问。(如果你有普通域名的的话,也可以把 CID 和域名关联起来,也能保证可用性)
下面是我用 IPNS 发布的 IPFS 分享助手软件,其中 k51...wi25 就是 IPNS “域名”,.eth.sucks 则是子域名形式的公共网关。
https://k51qzi5uqu5dh1ts2qvcw3069src00zyjw0qmwdkb102k8q4ft8bztw75iwi25.eth.sucks
上面是子域名形式的链接,路径形式的链接则应该如下:
https://eth.sucks/ipns/k51qzi5uqu5dh1ts2qvcw3069src00zyjw0qmwdkb102k8q4ft8bztw75iwi25
也可以用本地网关进行访问,子域名形式和路径形式的链接如下:
http://k51qzi5uqu5dh1ts2qvcw3069src00zyjw0qmwdkb102k8q4ft8bztw75iwi25.ipns.localhost:8080
http://127.0.0.1:8080/ipns/k51qzi5uqu5dh1ts2qvcw3069src00zyjw0qmwdkb102k8q4ft8bztw75iwi25
接下来我新生成一个名为 test 的 IPNS 密钥用来发布其他文件夹, IPNS 密钥的地址是固定的,这样每次更新内容后只需要把更新后的文件夹 CID 重新发布一次 IPNS 即可,不用更新链接。
点击发布,然后稍作等待:
复制上面的地址就可以发布了,由于 DHT 网络的广播需要时间,让 IPNS “域名”生效可能需要半个小时至一个小时左右,发布后稍作等待即可。
效果如下
https://cdn.ipfsscan.io/ipns/k51qzi5uqu5dk5cbbjykfthqkz6qh9r98zauauz2n6j843rv3e93fgbfh4abiu
也可以通过比如 4everland.org 这样的平台来免费托管 IPNS 地址,具体可以参考这篇文章的第 3 节
IPNS 可用公共网关参考:
https://k51qzi5uqu5djx3hvne57dwcotpc8h76o2ygrxh05kck11j6wnhvse8jrfzf2w.ipns.dweb.link/
4.4 使用 IPFS 分享助手辅助分享
IPFS 分享助手是本人开发的一个小程序,用来简化 IPFS 分享的流程,主要功能有:
CID 批量计算、文件批量导入、CID 批量拉取、CID 格式转换、分享链接批量生成、批量固定到 Crust 等分享相关的一站式功能:
- 本地文件的 CID 计算:拥有 CID 计算功能,拖入即可计算某个文件的 CID,支持 v0 和 v1 两种格式;
2. 寻找本地最佳网关:可以对 CID 进行网关测速,查找最合适的网关,支持多种常见网关,可自定义网关。
3. 分享链接生成:根据多个 CID 批量生成网关+CID+文件名格式的分享链接
4. 由 CID 从 IPFS 网络拉取文件:可以把被多副本固定在 IPFS 网络中(行话叫"上链")的文件批量拉取到本地- 把本地文件/文件夹添加到 IPFS:支持通过拖拽文件批量添加到本地的 IPFS 仓库
6. IPFS 节点管理:内置 IPFS 节点,无需额外安装,也可连接其他 IPFS 仓库的节点。
7. WebUI 文件管理:可通过 WebUI 查看已上传文件列表,删除文件等,以及其他 IPFS desktop 的原生功能。
8. Crust 平台固定:可以远程固定 CID 到 Crust 网络,通常用于固定聚合文件夹的 CID 来分享大体积资源。
高级计算器及 Crust Pinner
在高级计算器中,还增加了 Crust Pinner 功能,可以使用 Crust 平台提供的远程固定服务,具体可以看这个视频来了解
5. 把 IPFS 当作网盘来用:IPFS 文件管理
5.1 IPFS 能否像网盘那样“转存”?
IPFS 全称“星际文件系统”,既然是一个文件系统,自然是能够进行文件管理的,并且使用时的手感非常类似秒传链接。
具体来说,就是把 CID 导入到 IPFS 中但不固定到本地节点,这样就能在不占用本地空间的情况下使用图形化界面的 IPFS desktop 或者 IPFS WebUI 来进行文件管理了。
可以给大家看一下我的某个 IPFS 仓库,注意看左上角的显示大小和实际占用大小。
在这样的情况下,CID 也就可以类比百度网盘的秒传链接了,本地的 IPFS 节点则类比一个网盘客户端。而导入 CID 的过程自然就是“转存”了。不过这里的转存我加了双引号,是因为虽然很类似,但是 IPFS 节点导入 CID 和网盘转存还是有区别的。
IPFS 是一个去中心化的系统,由众多节点组成,就像下面这张图里一样,每个节点都是网络的一部分,彼此平等,不存在客户端和服务端的区别,或者说节点既是客户端也是服务端。
这一点熟悉 BT 的朋友应该能理解是什么意思,因为 IPFS 的底层大量地借鉴了 BT。
5.2 IPFS的默克尔树与虚空做种
不过 BT 并不能对一个你没有的文件做种,但是 IPFS 可以。
IPFS 为什么能做到呢?这里就必须提一下 IPFS 对于文件的处理方式了——默克尔树(Merkel Tree)(严格来说是 Merkel DAG ,不过这里为了不干扰理解就叫默克尔树了)
大家不要觉得这个词高大上,这个东西并不是什么很高深的东西,其实就是在 IPFS 中,文件会被拆成小块进行保存和传输,而这些小块由一个像树一样的结构被组织起来进行管理,因为是一个叫做默克尔的人申请的专利,所以叫做默克尔树。
这个结构中每个小块像叶子一样长在树上,所以也叫做“叶子节点”。
每个叶子都有自己的独特且唯一的身份牌,这样才能证明你位于树的哪个位置,对于 IPFS 而言,就是 CID(通过哈希值算得)。
IPFS 下载文件也就可以理解为是根据树的结构在整个 IPFS 网络中找对应小块,然后把它们组装起来的过程。
这些块具体由谁保存并不重要,只要 IPFS 网络中存在这个 CID 所对应的块,即使相隔很远,也能通过多次节点跳转找到。
一个 CID 只能对应一个独立的文件块,并不能表示这个树长什么样,这个树的结构其实被保存在你本地的 IPFS 节点的 DHT (分布式哈希表)中。
相比于保存整个文件,DHT 中只保存了每个 CID 所对应的树的关系,纯文本,因此非常的轻量。
下载的时候,照着树按图索骥,拿全所有的块即可组装出完整的文件。
而这个默克尔树也正是 IPFS 能做到 BT 做不到的“虚空做种”的理由,因为做种只需要给出 CID 对应的树结构,做种者实际上并不需要保存文件块本身,仅保存文件的 CID 和树结构,提供一个指路的效果即可,具体的文件块完全可以交给网络中的矿工保存。
5.3 批量“转存”文件到本地 IPFS 节点
对于已经存储在 IPFS 公网中的 CID,是可以被任意新加入的 IPFS 节点访问的,具体来说,按下图操作即可把一个 CID 连同其树结构,一起导入到本地 IPFS 节点中。
使用 IPFS 分享助手的情况下,点击右下角的 【WebUI】 按钮可以打开上述界面。
这种情况并没有导入数据,所以如果要进行下载,需要右键文件,然后点击【设置固定】,选择固定到【本地节点】才能保存文件数据到本地节点(也就是矿工所做的事情)。
不过,假如需要导入的 CID 很多,就很不方便了。
这时可以使用 IPFS 分享助手的批量导入功能。
首先在 Crust 或者酸奶网盘确认文件确实已经上链(如果没有上链,导入会卡住,因为要在 IPFS 网络中查找)
然后通过各种办法收集到这些要导入文件的 CID 以及文件名,可以通过油猴脚本在网页或 IPFS 文件夹页面中复制,如果有本地文件的话,也可以通过 IPFS 分享助手的 CID 计算器算出 CID 并填写到主输入框中,然后点击导入。
具体如下图所示:
然后点击【WebUI】可以进行确认
IPFS 程序有一个小问题,即使在配置中设置了默认启用 cidv1,新建文件夹时依然是 cidv0,这里有个权宜之计是先单独从 IPFS 路径导入一个 cidv1 格式的空文件夹,然后再把文件导入到里面。
cidv1 格式的空文件夹 CID 如下
注意文件名会影响文件夹 CID 的计算,需要注意保持文件夹下文件的文件名不变才能保证文件夹 CID 正确,文件夹自身的名字则无所谓,这点在进行文件管理时需要注意。
实在求稳的话,可以新建一个文件夹把所有内容原样丢进去,然后重命名最上层的文件夹进行文件管理。
5.4 IPFS轻量化做种:通过P2P网络辅助公共网关发现文件
导入完成后就可以开始做种了,由于文件保存在矿工那里,流量也是走的矿工的。
如此就可以实现轻量化的做种(本地只是提供一个指路的效果,做了一个结构意义上的种,可以叫做“结构种”,或者中二点叫“虚空种”也行)
这种做种方式尤其适合做种聚合大量文件的文件夹的 CID,由于聚合后文件夹的总大小往往很大(比如 200GB),这种大小的文件夹是很难单独上链被矿工保存的,此时把多个小文件聚合成大文件夹,然后做种这个文件夹的及其下面的文件的 CID ,就可以在不占用本地空间的情况下维持可用性。
并且,更多的 IPFS 节点数量也有助于 IPFS 公共网关更快地发现文件。
有些时候某个 CID 用某个公共网关找不到,但是用 IPFS 分享助手测速或者 IPFS-SCAN 测速以后,这个 CID 就能被该网关找到了。因此测速这个动作,可以理解为向各个公共网关广播询问有没有这个 CID,然后公共网关会就近查找,节点越多查找的速度就越快(有人称这种现象为“预热”)。
也就是说做种的人越多,公共网关就有更高的概率通过询问最近的做种者找到某个 CID,然后通过实际保存了文件块的矿工那里下载实际的文件块。作为查找中转的节点实际上不需要真的持有这些文件块,只要持有文件结构即可,等同于起了一个为公共网关指路效果。
注意前面提到过,CID 本身不能表示树结构,因此做种除了做文件夹自身的 CID,还需要连同整个文件夹的树结构一起做种,具体来说,做种后要确认文件夹下方的内容确实可以访问,保证树结构是建立起来了的。
如果是多级目录的话,文件夹需要保证点开能看见下方内容,文件的话能看见就行,不必打开;单层目录则只要能看见目录下的内容就可以了。(参考上一节最后一张图)
6. IPFS的安全性探讨
6.1 IPFS无法举报的原理:权责不明
小结一下,上文中所提到的, IPFS 在拆分、组装、存储、查找、传输、下载文件的特性,叫做“内容寻址”,这是 IPFS 区别于中心化网盘的最重要的点。
内容寻址使得 IPFS 网络中的内容不必保存在某个具体的位置,只要网络中有人保存了,就能从他那里下载(保存的人通常是矿工,当然也可以自己保存并做种,把文件固定在本地就可以了)。
这样的做法极大地提升了内容的安全性,这样一来举报者就没有办法向某个具体的网盘或者机构恶意举报,一次性封禁文件了。换言之 IPFS 通过主动割裂分享和存储之间的联系,从而达成了在内容托管上的权责不明。
权责不明就是安全分享的最佳实践方案(不能伤害一个无法选中的单位)。
并且做种时的流量是走的矿工的而不是分享者的,能减少 BT 做种那样因为流量异常被运营商查水表的概率。做种者所以需要做的仅仅只是“联结他人”而已,通过 P2P 的网络建立起一个能查找资源的网络,辅助各大公共网关下载文件。IPFS 在网络层有基本的 TLS 加密,不是裸奔,这可以说极大地降低了做种者的安全性方面的压力。
6.2 IPFS是如何防止吸血的?
此外为了防止 BT 中的吸血行为,IPFS 有一个 Bitswap 信用度,如果一个节点交换数据不积极,只下载不上传,那么其他节点给它数据的概率和速度都会降低,需要经常挂机和其他节点交换数据刷一些信用度,才能解决这个问题(信用度账本是节点双方的各执一份的,一方造假是没用的,账本冲突会导致信用度重置,重头再来)。
对于个人来说,信用度不见得很高,如果纯用 P2P 的方式通过本地网关下载(先固定再下载可以降低断连的概率),下载大文件有可能下到后面就被其他节点限速了。因此,假如想要快速下载,比较好的方式是使用 IPFS 网关来下载,目前网络上有很多可供使用的公共网关。
公共网关本身也是一个 IPFS 节点,经由公共网关访问文件或文件夹 CID 可以理解为由对方代理来连接到 IPFS 网络中的资源,由于这些网关有公网 IP ,速度也比普通的家宽更快。
但是公共网关不比百度这种大厂,大部分由个人提供(这些网关提供者通常也是矿工),承载能力有限,如果短时间大量的人挤着下,可能会导致出现问题。因此建议生成下载链接的时候分摊到多个网关上,以进行负载均衡。(当然,如果有能力还是建议用 P2P 下载,以减轻公共网关的压力,有条件也可以自己用服务器搭一个公共网关来自用)
目前 1.1.5 版本以后的 IPFS 分享助手已经内置了网关负载均衡功能,具体可以参考 IPFS 分享助手的文章。
6.3 公共网关的恶意举报问题、本地网关
但是公共网关也可能面临被恶意举报导致封 CID 的情况,这种时候除了更换其他公共网关,也可以用自己 IPFS 节点的本地网关访问资源,这种访问类似于 BT 是纯 P2P 的,也就是说,即使这个 CID 在所有公共网关上都被屏蔽了,只要你自己不屏蔽这个 CID 就能访问。
不过普通家宽没有公网 IP,直接下载的话速度会比公共网关慢,一般用来获取文件夹中的 CID 列表,然后自行找其他公共网关生成下载连接下载会更好一些。
具体操作如下:
然后可以通过纯 P2P 的本地网关打开文件夹,使用油猴脚本进行复制 CID、文件名等操作:
N+
[技巧分享] 把IPFS当作网盘来用-IPFS进阶教程
更多托管平台可以参考这篇文章:
[技巧分享] 盘点主流IPFS托管平台:功能、限制与推荐指数全面对比
7. IPFS 的优缺点及适用场景的个人浅见
7.1. 资源分享的安全级别排名
本人在 之前的文章[5] 中讨论过分享的几种安全级别,这里简要带过一下:
1. 多层加密压缩包:可以防止网盘扫描,但是无法防止在线解压(手机端可以解压包括 .7z 在内的所有格式)
2. 分卷压缩包及自解压压缩包:无法被在线解压,安全性高于前者。
3. 专有格式加密文件:如 Veracrypt 加密卷等,相比于通用的压缩文件,安全性更高一些。但无法应对举报造成的强制违规。
4. 隐写文件:无法被在线解压,并且违规可申诉,如果被举报到无法分享/下载,申诉即可。安全性高于前述所有。
5. BT、IPFS 等去中心化分享方案:没有审核系统,安全性最高。但缺点是做不到长时有效稳定。
总的来说,根据 【1. 能否加密】 【2. 能否在线解压】 【3. 能否被举报】,可以把分享方式大致划分出 3 个大的安全级别。
那么上述这么多级别,应该怎么选择呢?
在机器学习领域有一个定理叫做“没有免费午餐定理”(NFL),是说没有一种算法可以在所有问题上都表现最好。对于安全分享方案这个问题,也是类似的,即不可能存在能够同时兼顾所有场景的分享方案,我们总是需要根据特定场景选择最适合的方案。
对于压缩包方案安全级别问题,我在 之前的文章[5] 中已经讨论过,这里就不再赘述了,感兴趣可以参看我之前的文章,本文我想重点讨论一下 IPFS 方案的适用场景。
7.2. IPFS 分享方案的优缺点分析
个人认为,IPFS 分享相比于网盘分享,其最大优势在于无法被举报,虽然做不到网盘那样长时有效稳定,但是其去中心化分享的特点令其在应对倒卖者的举报上具有无与伦比的优势。相比于同属去中心化分享的磁链方案,IPFS 可以选择托管平台,也可以自己做种,在 托管平台[7] 选得比较靠谱的情况下,也可以做到类似于网盘那样的长期保存。
由于 IPFS 类似磁链的去中心化特点,分享的安全性有了很大的保障。即使托管平台被攻击或者跑路,只要网上还有人固定文件(做种),就仍有机会下载。并且相比于磁链完全靠用户做种,IPFS 可以选择托管也可以选择做种,具有更佳的灵活性,可以减轻分享者的负担。
不过 IPFS 作为去中心化的分享方案,也自然有其该有的缺点:首先靠谱的托管平台不好找,其次如果资源比较冷门没人长时间固定(做种),也会出现类似于磁链那样死种的情况。但是相比于磁链, IPFS 在保种这个问题上已经有很大程度的改进了,因为可以选择托管,做种也不需要公网 IP。
7.3 IPFS 分享方案与网盘分享方案的对比
分析完上述优缺点,我们可以设想一下其适用的最佳场景,在设想之前,我们需要先对比一下网盘分享的方案。
如果我们想进行长期有效稳定的资源分享,网盘一定是最佳选择,因为运营商代替用户保管文件,拿了钱自然要办事。为了更具体的分析,我们需要知道各大个人网盘的市场占比,限于成本问题,只查到了 2022 年的行业报告,虽然不是最新的,也应该能够反映一些问题,我们先看一下各家网盘的知名度:
根据# 2022年中国个人网盘市场研究报告(https://www.iimedia.cn/c400/84607.html)
图中的和彩云是现在的中国移动云盘。
我们可以看到,从数据角度,至少在 2022 年,百度网盘仍以绝对的优势占据了榜首。因此,尽管百度网盘一直被人诟病,但是依然是大部分人心目中“网盘”这个概念的体现,因此也是分享的首选(所谓“不是我非得用百度网盘,而是大家都在用百度网盘”)。
所以,就分享资源的长期有效稳定方面考虑,百度网盘必然是最优选择,但是相应地就存在审核机制。
我之前在 这个实验[6] 中讨论过,百度网盘的审核机制其实并没有想象中那样严格,对于不分享的显然违规的文件,百度网盘通常是不会管的;对于包含违规文件的分享压缩包,只要无法解密,百度网盘也是不会管的。总之,只要不能显式地定位到违规文件,百度网盘通常是不会管的。
这似乎和部分人的认知不符,百度明明就天天炸链,怎么能说不管呢?
根据 试验证据[7] 表明,炸链的真实原因是:
有这么一帮潜藏在各个资源站的特殊行业人群,这些人获取资源后非但不会感谢分享者,还会举报分享文件使之炸链,保证只有自己一个来源,然后再对此资源开价售卖。
这帮人就是资源倒卖者,俗称“倒狗”。
在百度网盘一家独大的情况下,倒卖者对于百度网盘审核机制的研究也最为深入(所谓盗墓的也一定是半个考古学家),他们充分利用了百度网盘的违规机制(即达到举报阈值自动一刀切),发明了批量转存+脚本举报的技术,即先转存想要使之违规的文件,然后调用举报脚本,自动化批量创建分享链接,以大量账号池组成的海量的举报逐个冲垮文件(类似于 DDoS 攻击),对于隐写文件,则可能会先修改其后缀以破坏其伪装。
倒卖者可以做到全程不下载任何文件,直接就能流水线式地在云端进行转存举报等一系列操作;倒卖者也不需要关注具体举报哪个文件,只需要源源不断地把转存后的文件放入举报池中即可,如此构建起一个简单易操作、成本又可控的举报工作流。只要每天开机运行一遍,就可以让所有举报池中的文件违规(隐写文件因为可申诉,时不时会复活,需要每天都举报)。
目前对于倒卖者的举报,网盘分享方案也确实没有太好的办法,之前试验的各种外网盘(Mega、PikPak、Gofile、ModsFire、MediaFire 等)也纷纷败下阵来。外网盘的封禁政策颇为严厉,一炸链就封号(尤以 Mega 为甚,会追踪 ip、cookies 及设备信息封禁新号),不像国内网盘一般只是禁止该文件分享。出于安全角度考虑,分享还是最好选择国内网盘。
7.4 IPFS 分享方案的适用场景:恶意举报
小结一下,网盘分享方案虽然在长时间维持资源有效性和可用性方面具有优势,但是在面对倒卖者时是无能为力的。但是与之相反,无法举报的 IPFS 方案在面对这个问题时就具有优势了。
如资源被倒卖者盯上,在资源发出的时候可以采用 IPFS + 网盘隐写文件的办法,可以在 IPFS 有效期间保证资源的可用性,当 IPFS 失效或者不稳定以后,通常也过了这个资源的热度,此时除了倒卖者(以及我这样的人)很少会有人关注。
俗话说只有千日做贼没有千日防贼,倒卖者也不可能无限制地累积举报池的文件,迟早有一天会移除失效已久的文件,此时若有人再要资源,只需要申诉隐写文件解除违规(采用尝试分享的方式申诉解封最快),再进行分享即可,不需要重新压缩上传。
提示反馈成功即申诉成功,文件就解除违规了,解除违规后不急着分享,先观察一天,看会不会再次违规。
一天后在文件详情中点一下申诉,如果提示“请勿申诉正常文件”,就证明文件已经被倒卖者移出了举报池,可以分享了;如果显示“申诉成功”则说明文件又违规了,还没有被倒卖者移出举报池。
资源生效以后不要在评论区说明,以免被倒卖者注意到。
(想要成功申诉需要注意隐写文件的伪装有效性问题,详情参考 隐写者软件的文章 )。
关于更具体的防炸策略,可以参考这篇文章:
防炸教程:如何安全分享资源?
绅士仓库:https://cangku.moe/archives/215860
南+:https://www.south-plus.net/read.php?tid-2437901.html
幻想次元:https://hxcy.top/541697.html
8. 总结
本文详细地总结了 IPFS 作为一种去中心化文件分享方案的特点和使用方法:
- IPFS 程序操作: 详细介绍了文件上传、固定、分享 CID 和下载的步骤,以及本地文件管理方法。
- IPFS 托管平台:以 Crust+酸奶网盘为例,说明了如何使用托管平台来保证文件的长期可用性。
- IPFS 优缺点分析:IPFS 的主要优势在于其去中心化特性,不怕举报,因此适合应对倒卖者问题;缺点是可能因缺乏固定节点而导致资源失效。
- IPFS 与网盘对比:相比传统网盘,IPFS 在应对恶意举报方面更有优势,但在长期稳定性上略逊一筹。
- 应用建议:文章提出了 IPFS 与网盘隐写文件结合使用的策略,以平衡安全性和长期可用性。
这里需要需要强调的是,大部分情况下,网盘+隐写已经足够安全,如果你的分享本身就属于比较安全的资源(普通音乐、普通影视之类),不大可能被倒卖者盯上,那么此时采用隐写甚至 IPFS 就是多余的,反而会增加不必要的负担。此时采用传统的压缩包方案甚至不压缩可能更好一些。
没有免费午餐定理除了告诉我们事物不存在唯一终极解以外,也告诉我们面对问题需要对症下药,过犹不及。
9. 致谢
本文中 IPFS 相关内容特别感谢 @yo @sandbox
10. 参考
[4] [[工具分享] 隐写者:把资源嵌入MP4文件的隐写工具 资源防炸链解决方案倡议&规避网盘审查技巧探讨
[5] [[技巧分享] 网盘资源分享的几种安全级别、审核与举报原理、分享建议 资源防炸链解决方案倡议
[6] [[技巧分享] 关于评论区地毯式炸链现象的一些测试及初步猜想 资源防炸链解决方案倡议
[7] [技巧分享] [IPFS] 无法被举报的文件分享神器CRUST IPFS操作指南 PART.I
[8] [技巧分享] [IPFS] 基于CRUST IPFS的防举报网盘
[9] [工具分享] IPFS分享助手:IPFS资源分享一站式解决方案 [资源防炸链解决方案]
[10] [技巧分享] 典型IPFS分享工作流与其区别于BT的一些思考 [资源安全分享解决方案]
[11] [技巧分享] 如何应对恶意举报 - 百度云篇 - 其一 [资源防炸链解决方案倡议]
[12] [技巧分享] 如何应对恶意举报 - 百度云篇 - 其二 [资源安全分享方案倡议]
[13] [工具分享] [油猴脚本] 自动抓取 IPFS CID-文件名-下载链接的辅助脚本 [技巧分享]
[14] [技巧分享] 把IPFS当作网盘来用-IPFS进阶教程 [资源安全分享解决方案]
[15] [技巧分享] 我都套娃10层压缩了怎么还炸?分卷了都炸?一文(也可能是几文)教你用IPFS傻瓜式防炸!
[16] [[技巧分享] [技巧分享] [IPFS] 通过aleph.im网络存储固定ipfs文件
[17] [技巧分享][IPFS] Aleph拉取教程入门版
【南+】
[N1] BT 代替品——IPFS 的简单使用教程