面向:想搭节点但卡在"没有公网 IP"这一步的人,以及配了公网 IP 却发现节点还是不可达的人。
结论先行:入站可达是奖励的前提,而"入站可达"这件事实在太容易被误判 ——
连客户端自己都得从外部探测才能确认。
一、为什么非要公网 IP
Pi 节点需要被其他节点和官方探测到,才能算"可达"。
官方的验证方式很直接:从外部探测你这个公网 IP 的 31400-31409 这一整段端口。 全通 = 可达,少一个 = 不完整。
这说明一件事:节点是被"从外面看"来评价的,不是自己说在跑就算数。
所以判断顺序永远是:
别人能不能连进来?(外部探测)
↓ 能
你的节点才算可达
↓
才谈得上奖励自己机器上 curl localhost 通,只证明本地服务活着,不证明别人能连进来。
二、一个容易踩的坑:你查到的公网 IP 可能是错的
这是本篇最重要的部分。
很多教程教你用某些方式查本机公网 IP,然后填进去测试。但在 NAT 环境下,本机读到的地址经常不是真实的公网出口。
Pi 客户端自己就踩过这个坑。它的代码里有两种获取 IP 的方式:
| 方式 | 从哪来 | 可靠性 | |---|---|---| | 本地网卡读取 | 直接问操作系统 | NAT/多层虚拟化下不可靠 | | 服务端回传 | 后端从你的请求头里解析出真实出口 IP | 这才是真的 |
客户端的做法很说明问题:它用服务端回传的 IP 来判断 NAT 类型(double-NAT / CNAT), 而不是用本地读到的。因为它知道本地那个值不靠谱。
对你的实际意义:
- 你要验证入站可达,必须用从外部看到的那个 IP
- 如果你用本地查到的内网地址去测,测通了也是假的
- 如果你的机器在多层 NAT 后面(云服务器套了 NAT、家里路由器又套一层),本地值基本没参考价值
最可靠的验证方式:从另一台完全独立的公网机器上,去探测你那台节点的公网 IP。 这跟官方的做法一致。
三、怎么正确验证入站可达
# 在另一台公网机器上执行,不是节点自己机器上
IP=你的节点公网IP
for p in $(seq 31400 31409); do
timeout 3 nc -zv "$IP" "$p" >/dev/null 2>&1 && echo "$p 通" || echo "$p 不通 ★"
done判定标准:10 个全通。
不通的时候,按这个顺序查(三层都要过):
- 路由器端口转发 —— 家用宽带最常见
- 主机防火墙 —— Windows 防火墙 / ufw / firewalld
- 云厂商安全组 —— 云服务器默认只放 22/80/443
任何一层拦了,从外面看就是"不通",而且你从节点内部完全看不出来。
四、没有公网 IP 怎么办
这是很多人卡住的地方。客观说几条路:
路 1:找运营商要公网 IP(家用宽带)
部分地区可以申请,但不保证。有些地区已经全面 NAT,要不到。
路 2:用云服务器
直接就有公网 IP,但要考虑带宽成本和流量费。跑节点持续占用带宽,费用要算清。
路 3:内网穿透 / 隧道
很多人在用,可行。但要注意两点:
- 隧道工具本身的稳定性 —— 抖一下入站可达性就断了
- 隧道的出口 IP 是否稳定 —— 频繁变化会影响可达性的持续认定
路 4:托管给别人跑
如果你只是想要节点的奖励,不想折腾这些,那就买托管服务。 我们做的就是这件事 —— 但这篇不是广告,上面三条路你自己评估,能解决就不用找任何人。
五、一个绕不开的硬约束(多节点必看)
如果你不是跑一台,而是想跑多台,这里有个现实:
一个公网 IP 只能让一台节点"可达"。
这不是配置问题,是 Pi 网络的认定方式 —— 它按公网 IP 认定节点。 所以你不可能在一个 IP 后面挂两台节点,都算"可达"。
这意味着多节点必须多公网 IP,而这笔成本是硬的:
- 家用宽带:通常只能要 1 个
- 云服务器:每个 IP 都是钱
- 隧道:要给每个节点分配独立出口
很多人算多节点的账时漏了这一条,以为一台强机器挂十个节点就行, 实际卡在出口 IP 上。
六、常见误区澄清
"我有公网 IP 了,节点就应该有奖励"
不一定。公网 IP 是必要条件,不是充分条件。还要: 端口 10 个全通、节点真的在同步、昨天在线率不为零。
"我的节点能连出去,说明网络没问题"
出站和入站是两件事。能连出去(访问别人的服务)不代表别人能连进来(被探测到)。 绝大多数"配置看起来对但不可达"的情况,都是这个区别没分清。
"我本地 ping 自己公网 IP 通了"
本机 ping 自己的公网 IP,流量可能根本没出路由器 —— 走的是本地回环。 这种测试结果没有任何意义。
七、排查清单
1. 从另一台公网机器测 31400-31409
├─ 10 个全通 → 可达性 OK,问题在别处
└─ 有不通 → 继续
2. 确认你测的 IP 是"外部看到的真实公网 IP"
├─ 用本地读到的值 → 可能测的是假地址,重新测
└─ 从外部确认 → 继续
3. 三层依次查
├─ 路由器端口转发配了吗?
├─ 主机防火墙放行了吗?
└─ 云安全组加规则了吗?
4. 多层 NAT 场景
└─ 云上套 NAT / 家里套路由 → 要逐层打通,或换隧道方案一句话总结:节点的"可达"是被外部评价的,不是自己声明。测的时候一定要站在外面看。
---
