关于IP暴露相关问题
lotus项目中,一般情况下只有lotus会与外界进行通信(开启了market功能的miner也会通信),lotus和外界的通信是通过 p2p 方式进行的,有加密处理。
- lotus 内关于对外连接的代码在 lotus/cli/net.go 和 lotus/node/modules/lp2p/ 下
- p2p的实现在:github.com/libp2p 下,相关内容非常多
先对几个常用指令进行解释:
lotus net peers:查看内存中的连接体的信息
lotus net connect addr:连接给定的地址,创建p2p连接
lotus net listen:查看本地的监听信息,即监听地址
lotus net id:查看本地的peer id
lotus net findpeer peer-id:查找给定的 peer id,判断能否连接,给出连接过程的网络连接信息
lotus net scores: 给出本地lotus进行p2p连接对象的本地评分
lotus net reachability:给出本地lotus是否可被其他节点连接
lotus net bandwidth:查看p2p网络占用的流量
lotus net block:暂未使用
默认的配置下,lotus是Private的,除非在 config.toml 下配置 Libp2p:AnnounceAddresses。
至于IP暴露问题,结论是:会暴露IP,但属于被动发现,也就是无法主动发现。从两个角度来看都会:
- 从三方 lotus net peers 获取的 peer 中如果出现了目标节点的连接,那么是可以看到ip地址
- 从系统层面可以直接查找跟 lotus 的连接,只是无法知道是否为目标节点
上述第二点,作为执法者,可以设计 ip 检测池,如果在多个lotus相关连接中多次出现一个ip,那么就可能被打击。
lotus 启动时会创建 p2p 连接,暂时还没找到初始连接的peer,无论是什么p2p方案,在启动的时候都需要连接指定的peer,然后启动本地的DHT网络,创建一个本地的路由。
出于保险,最初定义的启动多个lotus,通过proxy进行选择是可行方案。公网上的数据传输还是要加密。