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

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

  •  
  •   cruisetian · 170 天前 · 2418 次点击
    这是一个创建于 170 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先说明当前的配置:

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

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

    官方例子: https://github.com/WireGuard/wireguard-tools/tree/master/contrib/nat-hole-punching
    :D
    pH
        23
    pH  
       160 天前
    @qsnow6 S5 主要问题是明文 0-0
    qsnow6
        24
    qsnow6  
       160 天前
    @pH #23 socks5 over tls
    huaxie1988
        25
    huaxie1988  
       159 天前 via Android
    ipv6 直连配合 ddns
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3012 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.