LND 的 nat 开关:UPnP 与 NAT-PMP 都会试,探测不到网关就直接退出 图 1
LND 的 nat 开关:UPnP 与 NAT-PMP 都会试,探测不到网关就直接退出 · 图 1

闪电节点要接受开新通道,前提是对端连得进来。家庭与小型机房网络普遍藏在 NAT 后面,端口不对外开放,节点公告了自己的地址也等不到客。LND 为这个场景准备了一个总闸式开关:nat=true。名字朴素,行为却值得一说——它不是「打开 UPnP」这么单一,而是一条探测、映射、续更的自动流水线;同样重要的是它失败时的姿态:干脆退出。本文依据 LND v0.19.0-beta 的官方示例配置文档逐句拆解。

两种协议都会试

配置文档对 nat 的第一句说明就是:UPnP 或 NAT-PMP 支持二选一?不——“Both techniques will be tried”。两种都会尝试,哪种在路由设备上可用就用哪种。UPnP 是消费级路由器的老牌发现协议,NAT-PMP 是苹果系设备更熟悉的映射协议(macOS 与 AirPort 基带设备常支持后者)。两个都试的意义在于免除用户自查设备型号的负担:路由器家族太杂,声明一个总意图,让实现层去握手。

但文档紧接着强调第二个条件:require proper hardware support——需要真实的设备支持。没有支持,开关本身不会变出映射。

LND 的 nat 开关:UPnP 与 NAT-PMP 都会试,探测不到网关就直接退出 图 2
LND 的 nat 开关:UPnP 与 NAT-PMP 都会试,探测不到网关就直接退出 · 图 2

探测网关用平台内置二进制,探测不到就退出

LND 如何知道该向哪台设备请求映射?文档写明:它依赖的底层库使用各平台内置的不同二进制来取得路由器网关地址——不同操作系统下的探测手段各不相同(网关发现、路由表读取等)。因此存在探测失败的可能,而 LND 对失败的处理方式非常硬核:直接带错误退出(exit with an error),而不是静默回退成「继续跑但没人能连进来」。

对运维者,这是个值得事先知道的脾气:在一台网关不可识别的机器(比如已经处于多级路由之后、或探测工具被精简过的容器)上,nat=true 可能让节点根本起不来,而不是起来后功能降级。

映射成功之后:自动取回外部 IP,动态变更自动续更

拿到映射只是前半段。文档说明该选项会自动获取你的外部 IP 地址(even after it has changed in the case of dynamic IPs——动态 IP 变了也会重新获取),并用守护进程正在监听的端口向网络通告。这等于把「查自己的公网地址—比对变化—重发公告」三步人工流程全部自动化,节点的公告始终指向当下真实的可达入口。与之对照,手工路线要么用 externalip 写死(动态 IP 网络下很快过时),要么用 externalhosts 指向一个由外部脚本维护的地址清单(见 动态 IP 的闪电节点:externalhosts 的周期解析与通告链条)。nat=true 的代价是放弃对通告节奏的控制,换来的是零维护。

多一层 NAT 就失效

文档里最短也最容易被略过的一句:This does not support devices behind multiple NATs——不支持处在多重 NAT 之后的设备。光猫拨号加路由器级联、或上级运营商再做一层地址转换的环境里,对最内层网关做的映射到不了公网入口,nat=true 帮不上忙,只能回到运营商侧改桥接、上级设备做映射,或退而求其次走 Tor 隐藏服务对外接受连接。

与比特币核心侧的同名开关不是一回事

顺带划清一个易混点:Bitcoin Core 也有 -natpmp 与 -upnp 开关(Core 在 v30 移除了 UPnP 支持,只剩 NAT-PMP 一条腿),但它们服务的对象是 8333 端口的比特币全节点可达性;LND 的 nat 操作的是闪电监听端口(默认 9735)。两者各管各的映射,家庭环境里同时跑全节点与闪电节点时,两套开关最好分别核对(Core 侧的可达性自查可参考 家用比特币节点怎么对外开放:8333 端口、UPnP 与可达性自检)。

默认关着的理由

nat=true 默认是 false,这符合最小惊扰原则:自动改路由器端口映射表的行为,并非所有网络所有者都乐意节点自行其是——有人宁可手工转发,有人对 UPnP 的安全性有历史顾虑。配置文档把选择权留给运维者,同时用「探测不到就退出」划清底线:宁可不开,也不假装自己对外可达。

三句话带走:nat=true 是「两种映射协议都试、网关自动探测、外部 IP 自动续更」的全自动通告流水线;它在设备不支持或网关找不到时用退出而非降级表态;多一层 NAT 的环境不适用,此时回到手工清单或隐藏服务方案。风险提示:通道可达性与资金安全仍由节点自身运维负责,本文不构成收益或经营承诺。