如何让 wireguard 自动重新连接 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Awes0me
V2EX    WireGuard

如何让 wireguard 自动重新连接

  •  
  •   Awes0me 2022 年 6 月 30 日 8359 次点击
    这是一个创建于 1299 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    没有这么配合 DDNS 用过,你和#2 应该是正解
    madao2015
        6
    madao2015  
       2022 年 6 月 30 日
    只能检测 ddns 变化然后定时重启了
    Awes0me
        7
    Awes0me  
    OP
       2022 年 6 月 30 日
    @XiLingHost

    这个确实可以,谢谢

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

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

    @Stendan 这个问题应该是在路由器添加端口转发就可以了
    m4d3bug
        17
    m4d3bug  
       2022 年 6 月 30 日 via Android
    好奇楼主的为什么下载量大就频繁了,full mesh 组网?
    Awes0me
        18
    Awes0me  
    OP
       2022 年 6 月 30 日
    @m4d3bug 应该是电信那边限制了吧
    heiher
        19
    heiher  
       2022 年 6 月 30 日
    Linux 上内核实现的 wireguard ,内核 API 只接受 AF_INET 或 AF_INET6 的 endpoint 地址,所以域名是在用户态由 wg 配置工具在配置时刻解析的,那么 DDNS 的话,解析记录更新内核也无法感知。还需要用户态的 daemon 监测并更新配置。
    hanguofu
        20
    hanguofu  
       2022 年 6 月 30 日
    顺便问问: 有没有检查本地 IP 地址变化的 LINUX 脚本啊 ? 谢谢~
    billytom
        21
    billytom  
       2022 年 7 月 1 日
    @Stendan
    @me221
    感谢两位大神的回答,我这会用 zerotier 了,最近不知道为啥好几个 梅林固件(华硕路由器)都把 wireguard 取消了,但 zerotier 在 koolcenter 应用商城里有,它那个自带 NAT 下级路由,所以就先这样了。但就性能来说,同是 UDP ,这 zerotier 性能一言难尽(虽然它标称直连)
    nxuu
        22
    nxuu  
       2022 年 12 月 13 日
    家宽的公网 ip 变化 你在光猫设置 一般是一周变化一次。如果是用路由器 就根据路由器的设置来变化了。不会频繁变化的。
    kenvix
        23
    kenvix  
       2023 年 8 月 13 日   1
    补一个 openwrt 的,直接在 luci 面板的计划任务里面添加:
    * * * * * /usr/bin/wireguard_watchdog
    jueti
        24
    jueti  
       2023 年 8 月 23 日
    广东电信是两天变一次 IP
    TashinV
        25
    TashinV  
    PRO
       2024 年 12 月 9 日 via iPhone
    翻一下,请问 OP 这种 ip 地址变化,但是 wireguard 客户端 endpotin 又是写的域名,这样的情况,使用 surge 作为 wireguard 客户端,哪怕 ip 地址变化了也可以使用域名连接上吗?
    Awes0me
        26
    Awes0me  
    OP
       2024 年 12 月 10 日 via Android   1
    @TashinV surge 一点问题都没有
    TashinV
        27
    TashinV  
    PRO
       2024 年 12 月 10 日 via iPhone
    @< href="/member/Awes0me">Awes0me 这有点儿奇怪……顺便问一句,iPadOS 和 macOS 的 surge 也没有问题吗?
    Awes0me
        28
    Awes0me  
    OP
       2024 年 12 月 10 日   1
    @TashinV 没有,surge 连不上的时候会自动重新获取 ddns 的 ip ,但是 Windows 和 Android 的客户端连不上不会刷新,就一直连那个老的
    TashinV
        29
    TashinV  
    PRO
       2024 年 12 月 10 日 via iPhone
    @Awes0me
    明白原理了。windows 下面不知道 clash 是不是也支持自动重新刷新 ddns……
    Awes0me
        30
    Awes0me  
    OP
       2024 年 12 月 10 日   1
    @TashinV 不会的,都 2024 了,还是时不时要手动断开连接一次
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5905 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:22 PVG 11:22 LAX 19:22 JFK 22:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86