【问题标题】:`ipfs swarm connect:` connect failure: dial attempt failed: context deadline exceeded`ipfs swarm connect:` 连接失败:拨号尝试失败:超出上下文截止日期
【发布时间】:2018-09-24 00:33:09
【问题描述】:

我正在使用IPFSversion 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.

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

[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",

【问题讨论】:

    标签: ipfs


    【解决方案1】:

    我相信您不必打开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
    

    【讨论】:

    • z.z.z.z 是否代表 IP 地址?在config 文件中,我找不到Announce 部分。我猜你把它放在Addresses 下。 @Utgarda
    • 是的,z.z.z.z。是 IP4 地址。我的 IPFS 版本是 0.4.17,而我在其生成的配置中立即有 Announce,它是空的,"Announce": [],。试着把它放在"Swarm":[...], 之后。顺便说一句,你的 IPFS 版本是什么?
    • 那么,您的连通性测试向您展示了什么?从您的 IPFS 主机和外部尝试 telnet。
    • yyyy 代表什么,在您的示例中是 4001 吗? telnet x.x.x.x yyyy 在我添加了 Announce 部分后返回 Trying x.x.x.x...。请注意,GatewayAPI 端口在我尝试连接的机器上已关闭。 @Utgarda
    • 知道了。这也有效:sudo lsof -n -i :4001 | grep LISTEN@Utgarda
    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    相关资源
    最近更新 更多