很多初次部署WireGuard的用户都会遇到配置文件写完之后隧道始终无法建立的问题,排查半天找不到根源,绝大多数这类故障都不是网络链路的问题,而是Peer段的参数没有在客户端和服务端之间形成对应匹配的关系。本文就从实际部署的故障现象出发,从前置校验、分端配置到逐项排查,完整梳理WireGuard Peer配置:客户端与服务端如何配合的实操逻辑,帮用户避开常见的配置误区。
配置前的基础前提校验
很多新手会跳过前置检查步骤直接开始写配置文件,后续出问题之后很难定位故障根源,首先要确认服务端的WireGuard监听端口已经在本地防火墙、云服务商安全组层面完成放通,没有被上层网络策略拦截,同时两端的公网连通性正常,中间链路没有屏蔽WireGuard默认使用的UDP协议,要是链路层限制了UDP传输,后续参数配置再准确也没法完成隧道握手。
接下来要提前生成两端各自独立的公私钥对,注意服务端的私钥只能保存在服务端本地,客户端的私钥只能保存在对应客户端设备上,不能交叉混用,而Peer段需要填入的对端公钥属于可以公开传输的内容,不需要做额外加密分发,这一步很多用户搞反公私钥的对应关系,直接导致后续所有握手请求都被对端直接丢弃。
服务端Peer段的正确配置逻辑
服务端自身的Interface段要先设置好固定的监听端口、隧道内网的网关地址,之后添加的每一段Peer配置,都对应一个授权接入的独立客户端,这里的Peer参数首先要填入的是对应客户端的公钥,绝对不能填服务端自己的公钥,也不能多个客户端共用同一个Peer条目。
服务端Peer段的AllowedIPs参数,只需要填入给当前这个客户端分配的专属隧道内网IP即可,不要把整段大网段全部写入单条Peer的规则里,不然会出现后续多个客户端的路由规则互相冲突的问题,如果需要给客户端开放跨网络访问权限,还要提前确认服务端已经开启了系统层面的ip_forward转发功能,不然客户端拿到隧道地址之后也没法通过服务端转发访问其他内网资源。
客户端Peer段的对应匹配要求
客户端配置文件里的Interface段,要填入刚才服务端对应Peer段里给它分配的专属内网IP,这个地址不能和其他客户端的隧道地址重复,也不能和服务端的隧道网关地址冲突,否则会出现ARP或者路由层面的地址冲突,导致数据包收发异常。
客户端配置里通常只需要写一个Peer段,这里要填入的是服务端的公钥,同时Endpoint参数要填写服务端的公网IP加之前放通的WireGuard监听端口,如果服务端没有固定公网IP,也可以填入服务端绑定的动态域名地址,确保客户端可以正常定位到服务端的接入位置。
客户端Peer段的AllowedIPs参数是用来控制哪些流量走WireGuard隧道转发的,如果需要所有流量都走隧道就填写0.0.0.0/0,如果只需要访问服务端侧的指定内网资源,就只填入对应内网的网段地址即可,这里的配置不需要和服务端的AllowedIPs完全一致,只要两端的路由规则没有冲突就可以正常运行。
配置完成后的连通性排查步骤
两端配置都写完启动WireGuard服务之后,先在服务端执行wg show命令查看当前的Peer列表,找到对应客户端的配置条目,如果客户端主动发起连接之后,服务端的Peer条目中没有显示最新的握手时间,说明两端的公钥或者Endpoint配置出错,需要回头核对Peer段的公钥是否误填成了自身的私钥,或者端口号是否和服务端监听端口不一致。
如果已经显示有最新的握手时间,但是两端的隧道内网IP互相ping不通,首先检查两端Peer段的AllowedIPs是否覆盖了对端的隧道地址,比如服务端Peer段的AllowedIPs没有正确填写客户端的隧道IP,就会导致服务端收到客户端的ping包之后不知道如何回包,直接丢弃收到的数据包。
要是客户端可以正常ping通服务端的隧道地址,但是没法通过隧道访问服务端侧的其他网络资源,就要排查服务端的转发规则和防火墙的forward链策略,确认已经放通了WireGuard隧道接口和本地内网网卡之间的转发权限,没有被额外的防火墙规则拦截转发流量。
很多用户配置的时候喜欢直接复制粘贴之前的Peer配置模板,后续新增客户端的时候忘记修改对应公钥和地址参数,最后出现多个客户端共用同一个Peer条目的情况,导致地址冲突完全没法正常通信。每新增一个客户端都要单独生成新的公私钥对,在服务端新增独立的Peer段条目,才能保证WireGuard Peer配置:客户端与服务端如何配合的逻辑完全通顺,尽可能减少隐性的连通故障。

