记一次WG操作错误事故【正常握手但是局域网转发失败】

time: 2024/3/22

今天在使用wireguard进行远程连接时,遇到一个情况。

症状

连接后可以正常握手,但是转发的局域网不通。比如说我的组网IP是50.1,想要转发的局域网IP是10.1,链接成功后无法进行局域网转发。

排查

1:在同一个网络下的另外一台设备,是可以正常运行的。将正常运行设备的配置转移到故障设备,进行连接发现局域网转发是正常。

2:怀疑配置有问题,重新生成配置文件后,重新连接现象一样,可以握手但是局域网无法转发。

3:排查目标转向路由,因为局域网流量肯定是从路由指定出去的。但是对比正常设备的路由没有没有差异。

此时排查陷入僵局,既然在客户端没有异常,那么问题是不是出现在对段方向。因为排查的心急火燎,一气之下重启了对端服务器,之后恢复正常。

结果

回想到之前操作配置时,我使用systemd重载配置,因为使用的是systemd来管理wg,所以在配置完文件后习惯使用systemd reload进行配置重载,这种方法是错误的。虽然wg可以用systemd进行管理,但是进行重载配置时并不会对路由进行操作,所以此时如果对端连接过来会正常握手,但是路由不会更新,如果配置了局域网转发,路由不会重新生成,依旧使用使用之前的路由,所以会造成正常握手但是局域网转发失败的现象。

建议

使用systemd管理wireguard很方便,但是重新载入配置时如果涉及转发新局域网流量,最好使用systemctl restart wg-quick@wg* 来操作。