如何获取IPFS网关的multiaddress以优化节点peering配置?
问题背景
我想优化IPFS节点的peering效果,尝试通过curl https://ipfs.io/api/v0/id获取ipfs.io网关的multiaddress,却遇到301跳转,且该接口在Kubo v0.28.0版本后已被移除;另外遇到像hardbin.com这类禁用/api路径的网关,不知道该如何获取其multiaddress。
解决方案
一、获取ipfs.io这类公共网关的Multiaddress
由于/api/v0/id接口已被移除,可通过以下两种方式获取:
DNS链接查询法
直接执行IPFS内置的DNS查询命令,获取网关节点的完整multiaddress列表:ipfs dns -r ipfs.io或者先查询Peer ID,再构造multiaddress:
ipfs dns ipfs.io得到Peer ID后,结合网关地址构造如
/dns/ipfs.io/tcp/4001/p2p/<PeerID>或/dns/ipfs.io/tcp/443/wss/p2p/<PeerID>的multiaddress。手动构造(已知Peer ID)
ipfs.io的固定Peer ID为QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa,可直接使用以下multiaddress:- TCP端口4001:
/dns/ipfs.io/tcp/4001/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa - WebSocket端口443:
/dns/ipfs.io/tcp/443/wss/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa
- TCP端口4001:
添加到Peering配置
- 临时连接:执行以下命令直接连接节点
ipfs swarm connect /dns/ipfs.io/tcp/443/wss/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa - 永久配置:编辑IPFS配置文件(默认路径
~/.ipfs/config),找到Peering.Peers数组,添加如下内容:
保存后重启IPFS节点即可生效。{ "ID": "QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa", "Addrs": [ "/dns/ipfs.io/tcp/4001/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa", "/dns/ipfs.io/tcp/443/wss/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa" ] }
二、处理hardbin.com这类禁用/api路径的网关
如果网关关闭了API接口,可尝试以下方法:
查看网关公开信息
部分网关会在官方页面、帮助文档或站点底部公布自身节点的Peer ID和multiaddress,直接访问网关页面查找相关信息。DHT网络逆向查询
- 先找到一个由hardbin.com托管的文件CID(例如从网关访问的任意文件路径中提取)
- 执行命令查询提供该CID的节点,从中筛选hardbin.com的节点:
ipfs dht findprovs <目标CID>
使用社区维护的Peer列表
一些IPFS社区会维护公共Peer列表,其中可能包含这类网关的节点信息,直接从中获取对应的multiaddress后添加到节点配置。
内容的提问来源于stack exchange,提问作者Paymahn Moghadasian

