使用 IPFS 进行内网穿透

4 条回复
40 次浏览

https://github.com/ipfs/kubo/blob/master/docs/p2p-tunnels.md

1. 启用实验性功能

复制
ipfs config --json Experimental.Libp2pStreamMounting true

2. 服务器端配置(暴露服务的机器)

假设服务器运行 SSH 服务(端口 22),执行:

复制
# 注册 P2P 监听器
ipfs p2p listen /x/test123 /ip4/127.0.0.1/tcp/22

# 查看服务器 PeerID
ipfs id -f "<id>\n"

/x/test123:协议名称(自定义标识符,/x/ 前缀是必需的)
/ip4/127.0.0.1/tcp/22:本地服务地址

3. 客户端连接(访问服务的机器)

复制
# 创建本地端口转发隧道
ipfs p2p forward /x/test123 /ip4/127.0.0.1/tcp/2222 /p2p/$SERVER_ID

# 通过隧道连接 SSH
ssh [email protected] -p 2222

/x/ssh:必须与服务器端协议名称一致
/ip4/127.0.0.1/tcp/2222:本地监听端口
/p2p/$SERVER_ID:目标服务器的 PeerID (12D3KooWD....)

4. 管理隧道

复制
# 查看所有活动隧道
ipfs p2p ls

# 关闭特定隧道
ipfs p2p close -p /x/test123

# 关闭所有隧道
ipfs p2p close --all

SSH 远程转发示例对比

SSH 远程转发命令:

复制
ssh -R 2222:localhost:22 user@remote-server

Kubo 等效操作:

复制
# 服务器端(被访问方)
ipfs p2p listen /x/ssh /ip4/127.0.0.1/tcp/22

# 客户端(访问方)
ipfs p2p forward /x/ssh /ip4/127.0.0.1/tcp/2222 /p2p/$SERVER_ID

IPFS 内网穿透优点

无需公网 IP 即可建立连接
自动通过 DHT 发现对等节点
支持 NAT 打洞直连,或通过中继节点转发

不错不错,学到了。回头也去测试下,感谢大佬!

发表一个评论

R保持