Awes0me
V2EX  ›  WireGuard

如何让 wireguard 自动重新连接

  •  
  •   Awes0me · Jun 30, 2022 · 9449 views
    This topic created in 1590 days ago, the information mentioned may be changed or developed.

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

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

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

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

    这个确实可以,谢谢

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

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

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