返回博客

2026年10月28日

为什么节点客户端不该要求公网 IP

要求客户开公网 IP、改防火墙,是节点接入路上最大的一道坎。这篇文章讲清楚两种连接模型的区别,以及我们为什么选外连。

做节点托管的人都遇到过这个场景:客户机器装好了,卡在"连不上"。查半天发现是防火墙没放行,或者根本没申请公网 IP。这一卡可能就是两三天。

两种连接模型

入连(inbound)。 服务端主动连节点。要求节点有一个服务端能访问到的地址——公网 IP,或者至少是双方可达的网络路径。节点侧要开放端口、配置防火墙、处理 NAT 穿透。

外连(outbound)。 节点主动连服务端。节点只需要能上网,其他什么都不用配。连接建立后,服务端通过这条已有连接把指令发过去。

两者的差别在于"谁发起连接"。防火墙默认允许出站、禁止入站——这不是巧合,是个安全默认值。

入连模型的三个隐性成本

公网 IP 是稀缺资源。 很多机房按个收费,IPv4 更是紧张。给每台节点配一个公网 IP,成本直接上去了。

暴露面变大。 节点在公网上开着端口,就必然被扫。哪怕有认证,端口扫描、暴力破解、协议漏洞的尝试都会持续不断。运维要多一批活。

配置容易出错。 防火墙规则、NAT 映射、安全组——每一层都可能配错。配错了表面看是"连不上",实际是七八个可能的原因,排查成本高。

外连模型怎么做

节点启动后主动向服务端注册,建立一条长连接。服务端把指令(采集、远程操作)顺着这条连接推下去,节点执行后把结果回传。

节点本地不需要监听任何对外端口。远程桌面这类需要双向数据流的功能,也复用同一条连接——客户端把本地服务的数据封装后通过 WS 转发,服务端解出来。

这套模型的实际效果

  • 节点只需要能访问外网,不需要公网 IP。
  • 不需要改防火墙,不需要申请资源。
  • 节点侧没有对外监听的端口,扫描器扫不到东西。
  • 接入时间从"等机房开权限"缩短到"装完就能用"。

有没有代价

有。长连接需要维护:网络抖动会断,得重连;服务端要扛住所有节点的连接数;连接断了要能迅速发现。

重连用的是指数退避——断开后等 1 秒、2 秒、4 秒、8 秒……直到封顶。这样网络恢复时不会一瞬间把所有节点同时压上来。服务端侧对连接做心跳检测,超时就标记离线并生成事件。

连接数方面,一万个节点的长连接对现代服务端不算大事,真正麻烦的是"断线风暴"和"重连雪崩",这靠退避和分批解决。

一个判断标准

如果你的节点接入方案要求客户做以下任何一件事——申请公网 IP、开放入站端口、配置端口映射、调整安全组——那它选的是入连模型。入连不是不能用,但它把成本转移给了客户,而客户通常不具备处理这些的能力。

外连模型的成本在服务端,这部分由我们承担更合理。

—— Pi Admin X 团队