`ipfs swarm connect:` 连接失败:拨号尝试失败:超过上下文截止日期

`ipfs swarm connect:` connect failure: dial attempt failed: context deadline exceeded

我正在使用 IPFS version 0.4.4.

我的目标是连接两个对等点,以防止 IPFS 对等点在从共享对等点读取 IPFS 哈希时停止。为了实现它,我使用 ipfs swarm connect 将 peer-A 连接到 peer-B,其中 peer-B 可以访问 peer-A 上的 ipfs-file。

我的问题是:

ipfs swarm connect /ip4/x.x.x.x/tcp/4003/ipfs/QmXXXXXXXXXXXXXXXXXXX

当我尝试将我的笔记本电脑连接到另一个 IPFS 对等点时,我遇到以下错误:

connect failure: dial attempt failed: context deadline exceeded.

但是当我在所有端口都打开的 Amazon AWS 上尝试时,它工作正常,因此群连接成功结束。

[Q] 为了使 ipfs swarm connect 工作应该 API 和网关端口应该打开?还是我应该做点别的?

例如:无论如何应该打开端口 5001 和 8080?

.ipfs/config 文件:

"API": "/ip4/127.0.0.1/tcp/5001",
"Gateway": "/ip4/127.0.0.1/tcp/8080",

我相信您不必打开 APIGateway 端口即可连接到您的对等点。相反,只需尝试从外部检查您的连接:

telnet x.x.x.x yyyy 

#Trying x.x.x.x...
#Connected to x.x.x.x.
#Escape character is '^]'.
#/multistream/1.0.0

您可以在 IPFS 配置的 Addresses 部分看到端口,在我的例子中是 4001:

  "Addresses": {
    "Swarm": [
      "/ip4/0.0.0.0/tcp/4001",
      "/ip6/::/tcp/4001"
    ],

但是由于主机在NAT后面,IPFS守护进程无法检测到它可以访问的实际IP,所以我不得不把它放在Announce部分,比如

"Announce": ["/ip4/z.z.z.z/tcp/4001"],

找到正确的 IP 和端口后,我可以连接了:

ipfs swarm connect /ip4/z.z.z.z/tcp/4001/ipfs/QmXXX_my_peer_id_XXX
#connect QmXXX_my_peer_id_XXX success