使用 IPFS 进行内网穿透
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 打洞直连,或通过中继节点转发
不错不错,学到了。回头也去测试下,感谢大佬!