如何让 wireguard 自动重新连接

2022-06-30 09:02:56 +08:00
 Awes0me

由于家里宽带的 ip 经常变动所以我 endpoint 写的是域名,这就导致了 Windows 和 Android 的客户端连接时间长了就连不上了,他们又不会自动重新链接,需要手动断开一次,很麻烦。

iOS 上我用的 surge 作为客户端就没问题,请问有没有什么办法可以解决?

5709 次点击
所在节点   WireGuard
24 条回复
XiLingHost
2022-06-30 09:06:23 +08:00
Windows 上我是靠计划任务实现的
写一个 ps1 脚本
```powershell
$profileName = ""
$servicesName = "WireGuardTunnel`$$profileName"

$log = wireguard.exe /dumplog | Select-String -Pattern $profileName | Select-Object -Last 10 | Select-String -Pattern retrying
if ($log.Length -gt 3) {
Write-Output $log
Stop-Service $servicesName
Start-Sleep -Seconds 5
Start-Service $servicesName
}
```
然后让它 5 分钟跑一次
villivateur
2022-06-30 09:07:58 +08:00
0o0O0o0O0o
2022-06-30 09:08:12 +08:00
Linux 上配置 PersistentKeepalive 是可以自动重连的
DrX
2022-06-30 09:13:37 +08:00
@0o0O0o0O0o 我发现 PersistentKeepalive 无效,我最终的方法是弄个 cronjob 每隔几分钟 ping 一次服务器。
0o0O0o0O0o
2022-06-30 09:15:48 +08:00
@DrX #4 抱歉我没认真看就回复了,原来是这种场景

没有这么配合 DDNS 用过,你和#2 应该是正解
madao2015
2022-06-30 09:21:18 +08:00
只能检测 ddns 变化然后定时重启了
Awes0me
2022-06-30 09:49:28 +08:00
@XiLingHost

这个确实可以,谢谢

还有 Android 上的不知道怎么办
bjfane
2022-06-30 09:58:12 +08:00
PersistentKeepalive 好使 也没断过,想用就用,但是没发现 ip 变化,ip 变化帝都好像是大概两周 1 次,还好,也配置了 ddns ,
zhixiao
2022-06-30 10:00:05 +08:00
我这 ip 已经快 1 个月没变了。。。其实 ip 变化的也不频繁,断了手动连一下就是了
Awes0me
2022-06-30 10:28:07 +08:00
@bjfane
@zhixiao

下载量大一点就会变得很频繁,一天要变个四五次
Stendan
2022-06-30 10:46:43 +08:00
```
git clone https://git.zx2c4.com/wireguard-tools /usr/share/wireguard-tools
```

```
# nano /etc/systemd/system/wireguard_reresolve-dns.service
[Unit]
Description=Reresolve DNS of all WireGuard endpoints
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'for i in /etc/wireguard/*.conf; do /usr/share/wireguard-tools/contrib/reresolve-dns/reresolve-dns.sh "$i"; done'
```

```
# nano /etc/systemd/system/wireguard_reresolve-dns.timer
[Unit]
Description=Periodically reresolve DNS of all WireGuard endpoints

[Timer]
OnCalendar=*:*:0/30

[Install]
WantedBy=timers.target
```

```
systemctl enable wireguard_reresolve-dns.service wireguard_reresolve-dns.timer --now
```
Stendan
2022-06-30 10:47:55 +08:00
@Stendan 这个是 Linux 的
billytom
2022-06-30 11:19:26 +08:00
@Stendan 请收下我的膝盖,正要找这个。顺便向大神请教,譬如我有个服务器 A ,装的 WG 算主节点吧,还有公司电脑 1 ,家中 ooenwrt 软路由及下面 nat 的几台设备,能否通过 wg 把他们整成个大内网类似 SD-Wan ,我之前试过了,访问服务器 A 没问题,访问 1 和 2 都没问题,但 2 下的 nat 设备就无法访问
Stendan
2022-06-30 11:30:09 +08:00
@billytom noob 一枚~~ 你描述的可能是这个问题?
运行在 NAT 路由器后面的内网服务器,默认是不能被外部网络直接访问的。例如,假设我们有一个 HTTP 服务运行在内网机器 192.168.1.2 ,NAT 路由器的地址是 192.168.1.1 ,并通过另一张有公网 IP 123.123.123.123 的网卡连接到了外部网络。要使得外网机器可以访问 192.168.1.2 的服务,需要执行:
```
# redirect http traffic to 192.168.1.2:
$> iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to 192.168.1.2
```
然后,就可以通过公网 IP 123.123.123.123 的 80 端口访问 192.168.1.2 的 HTTP 服务了。
Stendan
2022-06-30 11:30:51 +08:00
me221
2022-06-30 12:45:28 +08:00
@billytom 我猜你的问题是: /t/857269

@Stendan 这个问题应该是在路由器添加端口转发就可以了
m4d3bug
2022-06-30 13:06:51 +08:00
好奇楼主的为什么下载量大就频繁了,full mesh 组网?
Awes0me
2022-06-30 13:32:22 +08:00
@m4d3bug 应该是电信那边限制了吧
heiher
2022-06-30 20:20:56 +08:00
Linux 上内核实现的 wireguard ,内核 API 只接受 AF_INET 或 AF_INET6 的 endpoint 地址,所以域名是在用户态由 wg 配置工具在配置时刻解析的,那么 DDNS 的话,解析记录更新内核也无法感知。还需要用户态的 daemon 监测并更新配置。
hanguofu
2022-06-30 22:58:39 +08:00
顺便问问: 有没有检查本地 IP 地址变化的 LINUX 脚本啊 ? 谢谢~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/863087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX