从「自己人」一个开关说起
早年的比特币核心把特殊对等节点处理得很粗:加进 whitelist 或 whitebind 的连接就是「自己人」,享受免封禁、交易必转发的待遇,getpeerinfo 里一个 whitelisted 字段一锤定音。这种全有全无的设计越来越不够用:有人只想让自家区块浏览器查内存池,有人需要给合作节点免封禁但绝不想无条件转发它的交易。细粒度权限模型因此取代了旧开关——-whitelist 与 -whitebind 现在接受 <权限列表@目标> 的写法,多个权限用逗号分隔(本文按 master 分支源码核验,时间 2026 年 8 月,旧版本行为以对应发布说明为准)。不显式列权限时,两者给的默认套餐是 download、noban、mempool、relay。
旗标逐项读
按 net_permissions.h 的定义与注释:noban 表示该对端因不当行为永不被封禁或断开(同时蕴含 download 能力);download 允许它在初始区块下载期间请求区块头、并让你的节点在超出上传上限后仍继续向它下载区块;relay 表示即使节点运行在 blocksonly 模式也接受并转发它的交易,且不受交易通告跟踪限额约束;forcerelay 表示即使交易已在内存池里也照转(蕴含 relay),当年是为联盟节点快速同步设计的老功能——旧参数 -whitelistforcerelay 曾被发现自某个版本起早已失效而在 0.20 被移除,如今它以权限旗标的形式重新出现,当前源码里 -whitelistforcerelay 默认关、-whitelistrelay 默认开;mempool 允许对方用 BIP35 查询你的内存池内容;bloomfilter 允许它在你未开启公共布隆过滤器服务时照样请求过滤数据;addr 允许它绕过地址缓存的隐私限速索取和投递地址条目。源码注释还提醒一个蕴含关系:forcerelay 隐含 relay,权限不是自由拼装而是有依赖的。
怎么查、怎么配
配置示例:whitelist=mempool,download@192.168.1.20 只给内网分析节点查询与下载待遇。当前源码还给 -whitelist 补了 in 与 out 旗标,控制权限作用于入站连接还是手动出站,默认只作用入站。验证看 getpeerinfo 的 permissions 数组——22.0 起,旧的 whitelisted 与 banscore 字段已从输出中移除,判断「谁被特殊对待」以 permissions 为准,连接方式则由 connection_type 字段说明。
滥用清单与安全边界
第一条红线是 noban:它不是「加快速度」而是「解除警报器」,被你白名单的对端持续发送垃圾数据时,节点只能干瞪眼。给不可信 IP 配 noban 等于自废 misbehaving 防护。第二条:relay 加 blocksonly 的组合常被误解——blocksonly 让你只传区块不传交易,白名单的 relay 则是这条纪律上的授权门缝,门缝留给谁要想清楚。第三条:mempool 权限等于开放你的内存池快照,属于隐私敏感信息,默认只给本机与可信伙伴。第四条:历史版本迁移时逐项复核,别把老配置里的裸 -whitelist=IP 原样搬——那相当于领取默认套餐,未必是你想给的组合。
别和另一张白名单搞混
节点配置里有个名字极像的兄弟:rpcwhitelist(0.20 引入的 rpcwhitelist 与 rpcwhitelistdefault 参数)。那张表管的是「哪个 RPC 用户能调用哪些命令」,属于本地接口的最小权限控制;本文讲的 whitelist 权限管的是「哪个网络对端享有网络层特殊待遇」。两张表一个守 RPC 端口、一个守 P2P 端口,排障时先看错误来源在哪一层,别拿着 RPC 的权限表去调中继行为。
谁需要它
个人全节点通常一个白名单条目都不需要;值得动这套旗标的场景无非三类:自家节点集群互相同步、给监控或分析进程专用通道、与可信节点定向中继。每次动笔之前问一句:这项权限被对方滥用时,我损失的是什么?答案是「没有损失」才配进配置表。
风险提示:本文以核验时源码与发布说明为准,节点配置直接影响带宽与隐私,调整前先理解每项旗标的真实含义,本文不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。