V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Awes0me
V2EX  ›  WireGuard

如何让 wireguard 自动重新连接

  •  
  •   Awes0me · 2022-06-30 09:02:56 +08:00 · 6820 次点击
    这是一个创建于 913 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    30 条回复    2024-12-10 10:36:00 +08:00
    XiLingHost
        1
    XiLingHost  
       2022-06-30 09:06:23 +08:00   ❤️ 1
    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 分钟跑一次
    0o0O0o0O0o
        3
    0o0O0o0O0o  
       2022-06-30 09:08:12 +08:00 via iPhone
    Linux 上配置 PersistentKeepalive 是可以自动重连的
    y830CAa5nink4rUQ
        4
    y830CAa5nink4rUQ  
       2022-06-30 09:13:37 +08:00
    @0o0O0o0O0o 我发现 PersistentKeepalive 无效,我最终的方法是弄个 cronjob 每隔几分钟 ping 一次服务器。
    0o0O0o0O0o
        5
    0o0O0o0O0o  
       2022-06-30 09:15:48 +08:00 via iPhone
    @DrX #4 抱歉我没认真看就回复了,原来是这种场景

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

    这个确实可以,谢谢

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

    下载量大一点就会变得很频繁,一天要变个四五次
    Stendan
        11
    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
        12
    Stendan  
       2022-06-30 10:47:55 +08:00
    @Stendan 这个是 Linux 的
    billytom
        13
    billytom  
       2022-06-30 11:19:26 +08:00 via iPhone
    @Stendan 请收下我的膝盖,正要找这个。顺便向大神请教,譬如我有个服务器 A ,装的 WG 算主节点吧,还有公司电脑 1 ,家中 ooenwrt 软路由及下面 nat 的几台设备,能否通过 wg 把他们整成个大内网类似 SD-Wan ,我之前试过了,访问服务器 A 没问题,访问 1 和 2 都没问题,但 2 下的 nat 设备就无法访问
    Stendan
        14
    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
        15
    Stendan  
       2022-06-30 11:30:51 +08:00
    me221
        16
    me221  
       2022-06-30 12:45:28 +08:00
    @billytom 我猜你的问题是: /t/857269

    @Stendan 这个问题应该是在路由器添加端口转发就可以了
    m4d3bug
        17
    m4d3bug  
       2022-06-30 13:06:51 +08:00 via Android
    好奇楼主的为什么下载量大就频繁了,full mesh 组网?
    Awes0me
        18
    Awes0me  
    OP
       2022-06-30 13:32:22 +08:00
    @m4d3bug 应该是电信那边限制了吧
    heiher
        19
    heiher  
       2022-06-30 20:20:56 +08:00
    Linux 上内核实现的 wireguard ,内核 API 只接受 AF_INET 或 AF_INET6 的 endpoint 地址,所以域名是在用户态由 wg 配置工具在配置时刻解析的,那么 DDNS 的话,解析记录更新内核也无法感知。还需要用户态的 daemon 监测并更新配置。
    hanguofu
        20
    hanguofu  
       2022-06-30 22:58:39 +08:00
    顺便问问: 有没有检查本地 IP 地址变化的 LINUX 脚本啊 ? 谢谢~
    billytom
        21
    billytom  
       2022-07-01 00:00:42 +08:00
    @Stendan
    @me221
    感谢两位大神的回答,我这会用 zerotier 了,最近不知道为啥好几个 梅林固件(华硕路由器)都把 wireguard 取消了,但 zerotier 在 koolcenter 应用商城里有,它那个自带 NAT 下级路由,所以就先这样了。但就性能来说,同是 UDP ,这 zerotier 性能一言难尽(虽然它标称直连)
    nxuu
        22
    nxuu  
       2022-12-13 22:06:15 +08:00
    家宽的公网 ip 变化 你在光猫设置 一般是一周变化一次。如果是用路由器 就根据路由器的设置来变化了。不会频繁变化的。
    kenvix
        23
    kenvix  
       2023-08-13 20:54:53 +08:00   ❤️ 1
    补一个 openwrt 的,直接在 luci 面板的计划任务里面添加:
    * * * * * /usr/bin/wireguard_watchdog
    jueti
        24
    jueti  
       2023-08-23 11:52:34 +08:00
    广东电信是两天变一次 IP
    TashinV
        25
    TashinV  
       19 天前 via iPhone
    翻一下,请问 OP 这种 ip 地址变化,但是 wireguard 客户端 endpotin 又是写的域名,这样的情况,使用 surge 作为 wireguard 客户端,哪怕 ip 地址变化了也可以使用域名连接上吗?
    Awes0me
        26
    Awes0me  
    OP
       19 天前 via Android   ❤️ 1
    @TashinV surge 一点问题都没有
    TashinV
        27
    TashinV  
       19 天前 via iPhone
    @Awes0me 这有点儿奇怪……顺便问一句,iPadOS 和 macOS 的 surge 也没有问题吗?
    Awes0me
        28
    Awes0me  
    OP
       19 天前   ❤️ 1
    @TashinV 没有,surge 连不上的时候会自动重新获取 ddns 的 ip ,但是 Windows 和 Android 的客户端连不上不会刷新,就一直连那个老的
    TashinV
        29
    TashinV  
       19 天前 via iPhone
    @Awes0me
    明白原理了。windows 下面不知道 clash 是不是也支持自动重新刷新 ddns……
    Awes0me
        30
    Awes0me  
    OP
       19 天前   ❤️ 1
    @TashinV 不会的,都 2024 了,还是时不时要手动断开连接一次
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2608 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:49 · PVG 18:49 · LAX 02:49 · JFK 05:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.