IPv6 地址里全是冒号,而同时带端口的端点字段还需要一种标记地址结束位置的方式。弄错了,客户端要么拒绝解析配置,要么悄悄连到错误的对象上。正确写法并不通用:它取决于该字段放的是地址加端口、纯地址,还是主机名。请按顺序走完这份操作手册,因为一旦开始读客户端输出,语法修复和连通性修复看起来完全不同。

输入地址前先确认字段类型

例如,在 WireGuard Endpoint 字段里,带端口的 IPv6 字面量要在地址外加上方括号,例如 [2001:db8::10]:51820。该示例中的文档前缀并非公网服务器,方括号属于语法的一部分,而不是地址的一部分。

其他格式有自己的规则。URI 可以用方括号承载 IPv6 字面量,但 VPN 配置不一定是 URI。把地址和端口分成两个输入框的客户端,可能希望一个框里只有字面量、另一个框里只填数字,此时加方括号和在合并字段里省略方括号一样是错的。

端口与地址同处一个字段时加方括号

要记住的规则很简单:同一字符串后面还有端口时,方括号才出现。字段里没有端口、地址单独出现时,不加方括号。

把某个协议的完整端点字符串复制到每个客户端,是这类错误的常见来源。OpenVPN、IPsec 配置文件和应用程序界面各自记录自己的语法,对其中一个正确的字符串,可能被另一个拒绝或误解。请阅读客户端自身对你正在编辑的字段的文档,并把文档前缀或示例地址留在注释里,免得有人把它当作真实主机发出去。手册给出两种写法时,选与眼前字段类型相符的那种。

分开地址字段和端口字段

客户端给出两个输入框时,地址放一个、端口放另一个。把合并写法粘进地址框,会产生解析错误;更糟的情况,是解析到意料之外的对象。

值看起来正确时,检查末尾空格和不可见字符。复制来的地址常带不换行空格或零宽字符,客户端解析不了,屏幕上又看不出来。错误莫名其妙时,重新键入该值而不是粘贴。

谨慎处理区域标识符

链路本地字面量可能需要绑定到接口的区域标识符,写法是百分号加接口名。这种形式在拥有该接口的主机上有效,并不能替代一台真正可达的远端端点。

解析成功之后,作用域和路由仍然重要。客户端接受的带区域地址,可能从本机根本没有路径;而经由互联网访问的远端端点,本就不该依赖本地区域。要在写区域之前决定数据包从哪个接口发出,而不是在握手失败之后。

先验证解析,再验证连通性

把两类失败明确分开。地址格式错误会产生解析错误或立即拒绝;而格式正确却拒绝认证、或从不回应的端点,是另一个问题,有另一套解法。

在受支持的修正之后,确认隧道完成协商、目标应用可用。仅凭握手不能证明路径,对端点做 ping 也不能证明隧道。运维方提供主机名时,请保留受支持的名字及其身份校验,不要换成别处找来的数字地址。

在变更记录里写下确切的字段、你用的值以及客户端的回应。否则下一位编辑配置的人还会重做一遍方括号实验,而答案其实已经在你的工单里了。

相关文章