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

Wireguard 自动重连的问题

  •  
  •   TashinV · 17 天前 · 597 次点击
    两边家里都有公网,下面用 A 、B 代替。
    A 、B 路由都设置了 DDNS ,并打通了 wireguard 连接,由 A 路由(服务端)生成公钥私钥,把这套密钥填入 B 路由中(客户端)。
    1. 这样子是不是 A 内网下的设备就能连上 B 内网的所有设备了?反过来 B 连 A 也是一样?比如 A 家的电脑可以远程连接 B 家的打印机进行打印,B 家可以连上 A 家的 NAS 读写文件。
    2. 公网 IP 总是在变化,我找了一下解决方案,一般是写一个检测的脚本,检测到 IP 地址变化就重新连接。那么想请问一下,这个检测的脚本我是需要跑在哪个路由上?还是需要两边都需要跑这个检测脚本?
    12 条回复    2024-12-18 15:49:29 +08:00
    EyebrowsWhite
        1
    EyebrowsWhite  
       17 天前 via iPhone
    1. 要连接内网设备需要配置允许流量转发,具体看你路由器什么系统了
    2. 都跑
    263
        2
    263  
       17 天前
    点对点的话,其实在 peer 设置一下 keepalive 就能自动处理了,不过具体表现要看设备。
    TashinV
        3
    TashinV  
    OP
       17 天前 via iPhone
    @EyebrowsWhite
    两地路由都是 unifi 。
    我的理解是只要跑一端的脚本就行吧? A 做服务端,B 做客户端,B 主动连接 A 的话就要 B 跑脚本,A 主动连接 B 应该不用跑脚本吧?
    TashinV
        4
    TashinV  
    OP
       17 天前 via iPhone
    @263
    unifi 里面似乎没看到有 keep alive 的选项
    JerryYuan
        5
    JerryYuan  
       17 天前 via Android   ❤️ 1
    1.具体要看路由怎么配置的,要确保双向通信的数据包不会走到意外的地方,基本就能通,和节点公网地址变不变没啥关系
    2.ddns 脚本建议两边都跑,自动维护两个不同的(二级)域名,有助于增强网络链接的健壮性。一端的解析挂了还能靠另一端拉起来。
    yinmin
        6
    yinmin  
       17 天前 via iPhone   ❤️ 1
    OP 可以试试 headscale 的方案,底层也是 wireguard
    yinmin
        7
    yinmin  
       17 天前 via iPhone   ❤️ 1
    unifi 支持 openvpn ,建议 op 可以试试 openvpn 。

    wireguard 不支持 ddns ,启动时解析 dns 一次,然后不会再解析 dns 锁死 ip 不变。

    openvpn 支持 ddns ,设置 resolv-retry infinite ,remote 配置 ddns 域名,如果 ip 变化会自动连新 ip 。讨巧的方式是 openvpn client 配置里的 dns 服务器设置成 ddns ns server ,超快恢复连接。
    TashinV
        8
    TashinV  
    OP
       12 天前 via iPhone
    @JerryYuan
    两台路由都是 unifi 的,我看了一下好像 Linux 设备可以通过 PersistentKeepalive 来进行保活?( GPT:PersistentKeepalive 可以持续监测连接状态,触发重连时重新解析域名。)
    这样的话是不是就不用跑 ddns 脚本了?
    JerryYuan
        9
    JerryYuan  
       12 天前 via Android   ❤️ 1
    @TashinV 需要跑,persistentKeepalive 那个是维持'链接'用的,相当于定时互相 ping 一下
    wireguard 有个特性,就是只会在建立连接时解析域名,完成解析以后会缓存地址直到重启才会重新解析。
    维持链接并不能保证地址不会变,地址一旦变了,keepalive 只会变成无响应,并不能恢复"链接
    JerryYuan
        10
    JerryYuan  
       12 天前 via Android   ❤️ 1
    @JerryYuan 恢复连接需要通过 ddns 拿到更新后的节点地址,并更新到 wg 的 peer 配置上去,这也是 openwrt 里边那个 wireguard_watchdog.sh 在做的事情。
    TashinV
        11
    TashinV  
    OP
       12 天前
    @JerryYuan #10
    懂了。那在 unifi 里面这个 wireguard_watchdog.sh 的脚本该怎么写呢?
    JerryYuan
        12
    JerryYuan  
       12 天前 via Android   ❤️ 1
    @TashinV 从 openwrt 里边拷出来改下就行,里边有几个依赖 luci 配置的东西,可以改成用 wg-quick 啥的去操作。脚本本身已经够用了,没必要自己搓一个了。(如果 unifi 里边和 Linux 的逻辑一致的话)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1332 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:36 · PVG 01:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.