你的 VPN 预留需要哪种标识符?
只有当预留指明了分配器所读取的标识符时,预留才会生效。配置之前,请在硬件地址、隧道身份和对端密钥之间做出选择。
有三个条件决定预留该使用哪种标识符:哪个系统分配地址、该系统是否能看到第 2 层帧,以及它把什么用作客户端密钥。执行 DHCP 的家庭路由器、桥接 VPN 和路由型隧道对这三个问题的回答各不相同。选择标识符比试图冻结适配器上报的每一个 MAC 地址更持久,因为分配器真正读取的正是标识符。
从分配器出发倒推;客户端一侧的标识符就是该系统所接受的任何东西。
先问分配器
DHCP 服务器从地址池中分配,并用它认识的标识符来匹配预留;具体是硬件地址、客户端标识符字符串还是 DUID,取决于协议版本。VPN 服务器从自己的地址池中分配,并按配置模型所暴露的内容来匹配,通常是经过认证的 Common Name。桥接网络可以把同样的问题交给已经在为局域网服务的 DHCP 服务器。每一种都是不同的查找,在其中一种里有效的预留,对另一种并不可见。
在配置任何东西之前,先确认服务器实际看到的是什么。指明了错误标识符的预留会静默失败:客户端只是拿到一个地址池地址,而错误看起来像客户端问题。
MAC 地址仍有意义的地方
在物理以太网或 Wi-Fi 链路上,硬件地址标识该网段上的一个接口。隐私功能会轮换它,虚拟适配器会创建新的地址,笔记本电脑在 Wi-Fi 和扩展坞上可能呈现不同的值。路由型 TUN 隧道承载 IP 包,不会把原始无线身份传达到远端 DHCP 服务器,所以这条路径上基于 MAC 的预留没有可匹配的东西。TAP 则不同:它承载以太网帧,可以加入一个第 2 层标识符仍然重要的桥接域。
即便在那里,相关的地址也是该域上使用的地址,而不自动是物理上联链路的地址。
隧道地址和对端密钥各有各的空间
路由型 OpenVPN 部署通过自己的模型分配地址:按认证名称加锁的每客户端配置,或者一个显式地址池。修改局域网路由器的 DHCP 预留并不会创建那种分配,添加隧道预留也不会影响局域网。WireGuard 走得更远,因为对端是靠公钥和允许的地址来识别的,而不是任何硬件标识符。在那里,通用的以太网预留替代不了对端配置。
维护一份把四类对象分开的清单:设备凭据、虚拟适配器、分配器的标识符和已分配的地址。一台物理机器可以拥有多个适配器、地址和会话。
稳定的地址不是身份
可预测的地址在运维上很方便,但它不是认证凭据。依赖地址的访问规则,在地址被重新分配、共享或伪造的那一刻就不再是身份检查。如果某条规则依赖地址,就把重新分配和吊销与身份的所有者协调好,而把真正的认证判断放在别处。这样便利就不会成为哪台设备连过的唯一证据。
把分配器、标识符和已分配的地址记录在一起。当其中一个变化时,另外两个就是你要核对的。
如果两个系统都声称要为同一个子网分配地址,在给其中任何一个添加预留之前,先决定谁拥有它。