package
0.0.0-20221107053822-20cac23e0f41
Repository: https://github.com/jc0803kevin/go-study.git
Documentation: pkg.go.dev

# README

通过指定的中继,让在nat后面的两个节点进行通信

参考 https://github.com/zfunnily/hole-punching-go-libp2p https://zfunnily.github.io/2021/10/gop2pthree/

/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2

先实现中继服务 监听一条协议RelayProtocolRequest,当有一个节点上来,需要记录,当有两个节点时,返回两个节点的信息给对方节点。 有一个公网IP

节点需要的组件:

创建host 监听RelayMsg协议 和RelayProtocolResponse协议 连接中继服务 n.ConnectRelay() 节点发送RelayProtocolRequest协议给中继服务,服务会返回RelayProtocolResponse协议给节点 其他节点的peerID 通过中继服务连接其他节点n.ConnectNode() , 并且往其他节点发送RelayMsg协议, n.CmdRelay

第一步,双方节点先连接中继节点 第二步,其中一节点h1通过中继服务h2获取到另一方的节点h3地址(这个例子直接就能通过内存获取到对方的地址) 第三步,h1连接h3,并通过h3监听的协议"/cats"新建数据流,用于收发数据。

运行

编译

kevin@DESKTOP-SMS02PU:/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2$ go build -o chat chat.go
go: downloading github.com/libp2p/go-libp2p v0.22.0
go: downloading github.com/ipfs/go-cid v0.2.0
go: downloading github.com/multiformats/go-multicodec v0.5.0
go: downloading github.com/libp2p/go-yamux/v3 v3.1.2
go: downloading github.com/klauspost/compress v1.15.1
go: downloading github.com/lucas-clemente/quic-go v0.28.1
go: downloading github.com/prometheus/client_golang v1.12.1
go: downloading go.uber.org/zap v1.22.0
go: downloading github.com/multiformats/go-base32 v0.0.4
go: downloading github.com/klauspost/cpuid/v2 v2.1.0
go: downloading golang.org/x/net v0.0.0-20220812174116-3211cb980234
go: downloading github.com/marten-seemann/qtls-go1-17 v0.1.2
kevin@DESKTOP-SMS02PU:/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2$ cd server/
kevin@DESKTOP-SMS02PU:/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2/server$
kevin@DESKTOP-SMS02PU:/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2/server$ go build -o relay_server relay-server.go
kevin@DESKTOP-SMS02PU:/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2/server$ ll
total 29704
drwxrwxrwx 1 kevin kevin      512 Oct 13 11:09 ./
drwxrwxrwx 1 kevin kevin      512 Oct 13 11:09 ../
-rwxrwxrwx 1 kevin kevin     3900 Oct 13 10:46 relay-server.go*
-rwxrwxrwx 1 kevin kevin 30411642 Oct 13 11:09 relay_server*
kevin@DESKTOP-SMS02PU:/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2/server$

启动中继节点

ubuntu@VM-16-15-ubuntu:~/libp2p$ ./relay_server -sp 5001
2022/10/13 11:15:45 Run './chat -relay /ip4/10.0.16.15/tcp/5001/p2p/12D3KooWRgBS7MboAKshjGAXu3kBdtBS3xHQEM16ZFrLNPUf2WDe' on another console.
2022/10/13 11:15:45 You can replace 192.168.0.100 with public IP as well.
2022/10/13 11:15:45 Waiting for incoming connection
2022/10/13 11:15:45 
2022/10/13 11:17:31 a new Stream relay req, remotePeerID: 12D3KooWDef74MKwHZci27aWUHJfE1BnEYrMYyWoBFGqM4dqszXp; 
remoteAddr: /ip4/10.0.16.15/tcp/44048, localAddr: /ip4/10.0.16.15/tcp/5001
2022/10/13 11:18:00 a new Stream relay req, remotePeerID: 12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW; 
remoteAddr: /ip4/116.228.34.130/tcp/57980, localAddr: /ip4/10.0.16.15/tcp/5001
2022/10/13 11:18:00 start send peer:  12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW
2022/10/13 11:18:00 start send peer:  12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW

在中继所在服务器内网 启动一个节点

ubuntu@VM-16-15-ubuntu:~/libp2p$ ./chat -relay /ip4/10.0.16.15/tcp/5001/p2p/12D3KooWRgBS7MboAKshjGAXu3kBdtBS3xHQEM16ZFrLNPUf2WDe
2022/10/13 11:17:31 Connect relay success Next Login...
2022/10/13 11:17:31 12D3KooWDef74MKwHZci27aWUHJfE1BnEYrMYyWoBFGqM4dqszXp login to relay
2022/10/13 11:17:31 Im  12D3KooWDef74MKwHZci27aWUHJfE1BnEYrMYyWoBFGqM4dqszXp


2022/10/13 11:18:00 a new Stream Relay rsp,addrs.len 2, peerInfo : 12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW=/ip4/116.228.34.130/tcp/57980
12D3KooWDef74MKwHZci27aWUHJfE1BnEYrMYyWoBFGqM4dqszXp=/ip4/10.0.16.15/tcp/44048

2022/10/13 11:18:00 start ConnectNodeByRelay.... 12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW /ip4/116.228.34.130/tcp/57980
2022/10/13 11:18:00 receive onFirstP2PMsg:  Hello Im 12D3KooWDef74MKwHZci27aWUHJfE1BnEYrMYyWoBFGqM4dqszXp
2022/10/13 11:18:00 NewStream err
2022/10/13 11:18:00 protocol not supported
2022/10/13 11:18:05 Cmdp2p start ....
2022/10/13 11:18:05 opening p2p chat stream
2022/10/13 11:18:05 [INFO] p2p chat connected!
> > > > Hello this is  msgkkk
> I am romote
> 

在本机启动一个 节点

kevin@DESKTOP-SMS02PU:/mnt/e/workspace/gowork/src/github.com/jc0803kevin/go-study/libp2p/relay/relay-demo2$ ./chat -relay /ip4/110.42.187.187/tcp/5001/p2p/12D3KooWRgBS7MboAKshjGAXu3kBdtBS3xHQEM16ZFrLNPUf2WDe
2022/10/13 11:18:01 Connect relay success Next Login...
2022/10/13 11:18:01 12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW login to relay
2022/10/13 11:18:01 Im  12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW
2022/10/13 11:18:01 a new Stream Relay rsp,addrs.len 2, peerInfo : 12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW=/ip4/116.228.34.130/tcp/57980
12D3KooWDef74MKwHZci27aWUHJfE1BnEYrMYyWoBFGqM4dqszXp=/ip4/10.0.16.15/tcp/44048

2022/10/13 11:18:01 start ConnectNodeByRelay.... 12D3KooWDef74MKwHZci27aWUHJfE1BnEYrMYyWoBFGqM4dqszXp /ip4/10.0.16.15/tcp/44048
2022/10/13 11:18:01 receive onFirstP2PMsg:  Hello Im 12D3KooWNJpkYPmiYvUrGCS4Tdj3gyuYFBDtrjPuezqGi6tmpfSW
2022/10/13 11:18:01 NewStream err
2022/10/13 11:18:01 protocol not supported
2022/10/13 11:18:06 Cmdp2p start ....
2022/10/13 11:18:06 opening p2p chat stream
2022/10/13 11:18:06 [INFO] p2p chat connected!
> Hello this is  msg
> > kkk
> I am romote
>

  • 完整中继地址:

/ip4/192.168.23.146/tcp/54965/p2p/12D3KooWRVdVz2pAmgtVHR5NQz7wtLPfpFBu4gQ5iteyozsNbEct/p2p-circuit/p2p/12D3KooWLssNkgYsYnutWM6Ms7c9kZgNqkMo6Xn3wSK7SuYiU7Rg

12D3KooWRVdVz2pAmgtVHR5NQz7wtLPfpFBu4gQ5iteyozsNbEct 中继服务peer id /ip4/192.168.23.146/tcp/54965 需要达到节点host 12D3KooWLssNkgYsYnutWM6Ms7c9kZgNqkMo6Xn3wSK7SuYiU7Rg 需要到达的节点 peer id

# Packages

relay-server.

# Functions

No description provided by the author
No description provided by the author
No description provided by the author

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
No description provided by the author