`ipfs swarm connect:`connect failure:拨号尝试失败:超出了上下文截止时间

alp*_*per 7 ipfs

我正在使用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-peer时,我面临以下错误:

connect failure: dial attempt failed: context deadline exceeded.

但是当我尝试所有端口都打开的亚马逊AWS时,它可以工作,因此群集连接成功结束.

[问]为了使ipfs swarm connect工作API和网关端口应该打开?或者我应该做别的什么?

例如:端口5001和8080无论什么都打开?

.ipfs/config 文件:

"API": "/ip4/127.0.0.1/tcp/5001",
"Gateway": "/ip4/127.0.0.1/tcp/8080",
Run Code Online (Sandbox Code Playgroud)

Utg*_*rda 1

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

telnet x.x.x.x yyyy 

#Trying x.x.x.x...
#Connected to x.x.x.x.
#Escape character is '^]'.
#/multistream/1.0.0
Run Code Online (Sandbox Code Playgroud)

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

  "Addresses": {
    "Swarm": [
      "/ip4/0.0.0.0/tcp/4001",
      "/ip6/::/tcp/4001"
    ],
Run Code Online (Sandbox Code Playgroud)

但由于主机位于 NAT 之后,IPFS 守护程序无法检测到可以访问它的实际 IP,因此我必须将其放入Announce部分,例如

"Announce": ["/ip4/z.z.z.z/tcp/4001"],
Run Code Online (Sandbox Code Playgroud)

找到正确的 IP 和端口后,我能够连接:

ipfs swarm connect /ip4/z.z.z.z/tcp/4001/ipfs/QmXXX_my_peer_id_XXX
#connect QmXXX_my_peer_id_XXX success
Run Code Online (Sandbox Code Playgroud)