V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cruisetian
V2EX  ›  宽带症候群

wireguard 组网问题的咨询--NAT 后的两个节点如何设置才能够打洞成功

  •  
  •   cruisetian · 2023-09-13 00:19:40 +08:00 · 3543 次点击
    这是一个创建于 438 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先说明当前的配置:

    • 家里没有公网 IP ,因此使用了 1 台国内 VPS 作为 Wireguard 服务器

    • 家里 1 台软路由搭建了 openwrt ( A ) 接入 wireguard 局域网

    • iOS ( B ) 使用也接入 wireguard 局域网

    整体的网络结构和 peer 设置如下

    网络结构图

    目前 A 和 B 可以互相 ping 通,但是看了下 trace 发现是通过 server 做了中转,没有直接打洞成功,想请问各位大佬如何设置才能让 A 和 B 直接打洞成功呢。求大佬们指点迷津!

    25 条回复    2023-09-23 08:53:02 +08:00
    f165af34d4830eeb
        1
    f165af34d4830eeb  
       2023-09-13 00:38:28 +08:00
    如果不是有特别的需求,个人建议换 zerotier/tailscale ( vps 可以改造成自建 controller 辅助打洞/中继),不需要自己操心打洞的事情了。
    superhack
        2
    superhack  
       2023-09-13 00:38:35 +08:00 via Android
    wg set peer xxxxxx endpoint yyyy
    cruisetian
        3
    cruisetian  
    OP
       2023-09-13 00:53:23 +08:00 via iPhone
    @superhack 请问这个命令是在 server 上执行吗
    qsnow6
        4
    qsnow6  
       2023-09-13 00:56:42 +08:00
    建议换 tailscale ,更新配置、打洞、配子网啥的非常方便
    cruisetian
        5
    cruisetian  
    OP
       2023-09-13 01:02:02 +08:00 via iPhone
    @qsnow6 希望可以在手机上同时回家和出国,手机又不允许两个 vpn 同时开,只能用 wireguard 打洞把 wireguard 配到出国软件上了
    qsnow6
        6
    qsnow6  
       2023-09-13 01:08:17 +08:00
    @cruisetian #5 家里开个 socks5 代理,当访问子网 IP 时,通过小火箭设置使用代理连接。
    qsnow6
        7
    qsnow6  
       2023-09-13 01:09:08 +08:00
    这个 socks5 需要暴露在公网,设置好密码。
    thsun
        8
    thsun  
       2023-09-13 02:29:44 +08:00 via iPhone
    没公网不行,走 IPv6 就可以不走中转
    SuzutsukiKaede
        9
    SuzutsukiKaede  
       2023-09-13 02:40:27 +08:00
    你的需求需要用到 Wireguard 的 full mesh 模式,建议使用现成的方案 Tailscale 。
    SuzutsukiKaede
        10
    SuzutsukiKaede  
       2023-09-13 02:45:08 +08:00
    cruisetian
        11
    cruisetian  
    OP
       2023-09-13 08:35:04 +08:00 via iPhone
    @SuzutsukiKaede 好的,我去看下研究下,不行就 tailscale 了
    server
        12
    server  
       2023-09-13 08:38:14 +08:00
    不折腾 tailscale ,记得把 mtu 该下,TS_DEBUG_MTU="1420"
    diskerjtr
        13
    diskerjtr  
       2023-09-13 10:21:11 +08:00
    你 2 边都是 nat 后面,如果 2 边都没有公网 IP ,只能靠中转。
    chancat
        14
    chancat  
       2023-09-14 18:22:34 +08:00 via Android
    推荐 tailscale
    ysc3839
        15
    ysc3839  
       2023-09-14 23:34:46 +08:00 via Android
    WireGuard 不支持打洞,要自动打洞的话可以考虑 ZeroTier 。
    或者如果 A 或 B 其中之一有 fullcone NAT 的话,可以考虑使用 natmap 开端口,另一端连接,不过端口很可能是随机的。
    https://github.com/heiher/natmap
    dangyuluo
        16
    dangyuluo  
       2023-09-15 03:21:17 +08:00
    你要理解 Wireguard 的原理,peer to peer
    gps949
        17
    gps949  
       2023-09-15 12:20:43 +08:00
    @cruisetian #5 你回家出国不就可以既回家又出国了?
    mcsonger
        18
    mcsonger  
       2023-09-15 12:24:57 +08:00
    至少有一台机器是公网
    mantouboji
        19
    mantouboji  
       2023-09-15 22:42:29 +08:00
    纯 IPv4 情况下,你目前的使用方式和现象是正常的。
    如果你有强迫症,那么要打开 IPv6 ,B 那个设备去连 A 的 IPv6 地址。这个地址因为每三天要变一次,可以用 dynv6 的动态域名。这也是我目前用的方式。只不过我是移动的宽带,光猫拨号,你那个 A 我这里是一台 Mikrotik AX2
    lovelylain
        20
    lovelylain  
       2023-09-16 09:05:18 +08:00 via Android
    @cruisetian 目标是手机上打洞配合原生 wireguard 的话难搞,因为 nat 打洞工具要 root 权限。有公网 ip(包括 IPv6)的话可以给家里 ddns ,然后手机上设置 endpoint 为家里域名,对 wg 网段、家里网段、fakeip 网段连家里。没公网 ip 或者手机端只有 v4 访问不了家里的 v6 就很难搞了。
    cnbatch
        21
    cnbatch  
       2023-09-17 03:48:00 +08:00
    最佳方案是使用 IPv6 直连

    如果仍然想用 IPv4 ,有个折衷的办法,套一层 udphop: /t/898299
    虽然这个工具原本的用途是为了避开 QoS ,但其实对于 OP 这种情况也能用——首先在服务端打洞(已自带打洞选项),然后客户端连过去,只要隧道内能够一直保持有流量(哪怕 1KB/s 都可以)、两边的网络都不是同时换 IP 的话,那么这条连接就可以一直保持畅通
    sunnysab
        22
    sunnysab  
       2023-09-19 18:53:30 +08:00
    Wireguard 本身为了保证自身的简单性,没有 NAT, 需要自己写代码实现。

    官方例子: https://github.com/WireGuard/wireguard-tools/tree/master/contrib/nat-hole-punching
    :D
    pH
        23
    pH  
       2023-09-22 14:41:49 +08:00
    @qsnow6 S5 主要问题是明文 0-0
    qsnow6
        24
    qsnow6  
       2023-09-22 15:38:32 +08:00
    @pH #23 socks5 over tls
    huaxie1988
        25
    huaxie1988  
       2023-09-23 08:53:02 +08:00 via Android
    ipv6 直连配合 ddns
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1103 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.