萝卜大侠 发表于 2022-6-8 16:24:07

为什么在路由器上使用wireguard时需要配置PersistentKeepalive参数

最近遇到几个客户反馈wireguard的使用问题,有一个配置如下(敏感内容使用*号替代)
PrivateKey = ****************
Address = *******************
MTU = 1420
DNS = *******************


PresharedKey = *******************
PublicKey = *******************
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = *******************
PersistentKeepalive = 0
以上配置在windows环境下可以正常使用,但是将配置文件上传到路由器后无法正确建立连接,非常奇怪。
后续经测试发现,如果将PersistentKeepalive参数设置为非零值即可正确建立连接。

PersistentKeepalive参数的作用究竟是什么?官网解释如下

简单来说,PersistentKeepalive是为了保证nat映射的有效性,在路由器中,如果nat映射失效,来自WAN口的数据将会被防火墙拒绝,从而导致wireguard无法正确建立连接,windows上不存在nat映射表,所以即使PersistentKeepalive设置为0 也可以正常建立连接。
路由器的nat映射表失效时间一般是30S,因此PersistentKeepalive一般设置为25,如果你的路由器nat映射表失效时间是10S,那么你需要根据实际情况调整PersistentKeepalive的值。

了解了问题原因,解决起来就简单了,解决方法有二
1. 在路由器上使用wireguard时,根据nat映射表失效时间强制添加PersistentKeepalive参数
2. 在路由器WAN侧防火墙上打开wireguard的监听端口,特别注意,是客户端的监听端口,不是服务端,客户端的监听端一般是随机,可以使用wg命令查看,如图:

将上图的端口在防火墙配置中打开后也可稳定建立连接





AAZZ 发表于 2022-6-8 16:29:41

路由器上设置往往比电脑设置多一点要求。这个wireguard开始设计的时候就没有考虑路由器。

parabear 发表于 2023-1-12 00:22:44

本帖最后由 parabear 于 2023-1-12 01:17 编辑

学习了!这个太好了,一直用wireguard差不多两个月了,最近突然连不上了,4个wg设置都不行,大概是什么情况?会不会被墙了?下面的是一个wg配置的log。谢谢

Wed Jan 11 12:14:08 2023 daemon.notice netifd: Interface 'wgclient' is now downWed Jan 11 12:14:08 2023 user.notice mwan3: Execute ifdown event on interface wgclient (unknown)Wed Jan 11 12:14:08 2023 user.notice firewall: Reloading firewall due to ifdown of wgclient ()Wed Jan 11 12:14:44 2023 daemon.notice netifd: Interface 'wgclient' is setting up nowWed Jan 11 12:14:49 2023 user.notice wireguard-debug: USER=root ifname=wgclient ACTION=REKEY-TIMEOUT SHLVL=1 HOME=/ HOTPLUG_TYPE=wireguard LOGNAME=root DEVICENAME= TERM=linux SUBSYSTEM=wireguard PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/Wed Jan 11 12:14:50 2023 user.notice wgclient-up: env value:SHLVL=2 PWD=/Wed Jan 11 12:14:55 2023 user.notice wireguard-debug: USER=root ifname=wgclient ACTION=REKEY-TIMEOUT SHLVL=1 HOME=/ HOTPLUG_TYPE=wireguard LOGNAME=root DEVICENAME= TERM=linux SUBSYSTEM=wireguard PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/Wed Jan 11 12:15:00 2023 user.notice wireguard-debug: USER=root ifname=wgclient ACTION=REKEY-TIMEOUT SHLVL=1 HOME=/ HOTPLUG_TYPE=wireguard LOGNAME=root DEVICENAME= TERM=linux SUBSYSTEM=wireguard PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/Wed Jan 11 12:15:06 2023 user.notice wireguard-debug: USER=root ifname=wgclient ACTION=REKEY-TIMEOUT SHLVL=1 HOME=/ HOTPLUG_TYPE=wireguard LOGNAME=root DEVICENAME= TERM=linux SUBSYSTEM=wireguard PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/Wed Jan 11 12:15:11 2023 user.notice wireguard-debug: USER=root ifname=wgclient ACTION=REKEY-TIMEOUT SHLVL=1 HOME=/ HOTPLUG_TYPE=wireguard LOGNAME=root DEVICENAME= TERM=linux SUBSYSTEM=wireguard PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/Wed Jan 11 12:15:16 2023 user.notice wireguard-debug: USER=root ifname=wgclient ACTION=REKEY-TIMEOUT SHLVL=1 HOME=/ HOTPLUG_TYPE=wireguard LOGNAME=root DEVICENAME= TERM=linux SUBSYSTEM=wireguard PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/

parabear 发表于 2023-1-12 01:07:23

MT2500和AXT1800路由器nat映射表失效时间是多少?

萝卜大侠 发表于 2023-1-12 09:17:13

parabear 发表于 2023-1-12 01:07
MT2500和AXT1800路由器nat映射表失效时间是多少?

一般都是30S

AXT1900 发表于 2024-9-17 21:23:36

学习了,感谢分享
页: [1]
查看完整版本: 为什么在路由器上使用wireguard时需要配置PersistentKeepalive参数