路由器肯不肯开门:natpmp 端口映射与入站连接的完整链路 图 1
路由器肯不肯开门:natpmp 端口映射与入站连接的完整链路 · 图 1

一、“入站连接为零”是怎么发生的

新搭的节点跑了一阵,网络信息接口显示连接数里几乎全是自己主动连出去的,入站邻居长期为零。这不是概率问题,多数是路径问题:家用网络的机器藏在路由器后面,外面的人想连进来,得先跨过网络地址转换这道门——路由器默认不认识外部发往比特币端口的包,直接丢弃。节点软件为这类环境准备了一条自动化通路:用网关设备支持的端口映射协议,请路由器把外部端口开到自己机器上。参数名是 -natpmp,参数说明写得很简洁:使用 PCP 或 NAT-PMP 来映射监听端口,默认开启。

两个协议名字值得展开一句。PCP 是较新的端口控制协议,NAT-PMP 是它的家用路由器前辈,实现里先试 PCP、遇到版本不支持再落回 NAT-PMP,对用户来说是同一个开关管两件事。它们只负责”让路由器的门开一条缝”,不提供任何加密或匿名属性。

路由器肯不肯开门:natpmp 端口映射与入站连接的完整链路 图 2
路由器肯不肯开门:natpmp 端口映射与入站连接的完整链路 · 图 2

二、自动逻辑里的连锁规则

这个开关最有意思的地方是它和别的参数有一组联动,全部写在初始化逻辑里,值得逐条弄清。设置了代理时,端口映射被自动关闭,同时地址宣告也被关掉,日志会记一笔”参数交互”——道理是流量既然要走代理出去,在本机路由器上开门既无意义也伤隐私。关闭监听时,端口映射同样自动作废,因为根本没有端口值得开。手动指定了自己的公网地址,自动宣告就自动停火,以免两套来源互相打架。

这些规则解释了为什么有人”明明开了映射却没生效”:配置里挂了代理,映射已经被静默降级,除非手动覆盖。排障时第一眼看这几条交互日志,比翻网络设置快得多。

三、映射成功之后还差一步:让别人知道

门开了,还需要把门牌号广播出去。节点默认会尝试发现自己的公网地址并宣告给邻居,这份宣告是入站连接的主要来源——邻居从地址消息里学到”这个地址可以连”,才会向你发起连接。宣告链路任何一环断掉,都会造成”端口通了但没人来”的局面:路由器映射失败、公网地址判断错误(比如把路由器内网地址当成了自己)、或者运营商根本没给你可路由的公网地址。最后一类尤其常见,双层网络地址转换的家庭宽带无论怎么配映射都收不到入站,此时可达性上限就是”只出不进”,这不是配置错误,是线路性质。

四、用节点自己的眼睛验证

Bitcoin Core 会主动做可达性探测:它借助邻居帮忙测试”从外面连你这个地址能不能成功”,结果汇总在网络信息接口的可达性字段里,每个网络族各一个结论——可达、不可达或受限。看这个字段比读路由器后台更可信,因为它测的是真实公网路径。连续观察几天更稳妥:网关设备千差万别,映射协议在部分设备上时灵时不灵,单次结论参考价值有限。

自助检查的正确顺序由此清晰:先看监听是否开着,再看参数交互日志有没有静默降级,再看路由器后台映射表有没有节点申请的条目,最后以可达性字段收尾。四步都过而连接数仍低,才轮到查防火墙规则与运营商线路。

五、开关两侧的世界

坚持不映射也完全可行。只做主动出站、不监听入站的节点,隐私足迹更小,代价是对等拓扑里少了一份”被人依赖”的贡献,且出站邻居池的多样性略差。社区里两种选择都被接受,关键是知道自己站在哪一侧。

如果决定映射,再补一条安全常识:自动映射开的是比特币节点自己的监听端口,不等于给整台机器开门,但若同一路由器上还有其他服务共用规则,值得逐项核对映射条目。映射条目随租期过期是正常现象,节点会周期性续期;若路由器固件对续期支持粗糙,重启路由器后记得回来复查可达性字段。把端口映射理解为”节点向家庭网络租的一扇侧门”——租金是每几小时续一次的租约,收益是入站连接,失约的代价只是退回纯出站模式,资金与账本始终不受影响。