cruisetian

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

  •  
  •   cruisetian · Sep 13, 2023 · 6135 views
    This topic created in 1153 days ago, the information mentioned may be changed or developed.

    首先说明当前的配置:

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

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

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

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

    网络结构图

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

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

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

    官方例子: https://github.com/WireGuard/wireguard-tools/tree/master/contrib/nat-hole-punching
    :D
    pH
    pH
    Sep 22, 2023
    23
    @qsnow6 S5 主要问题是明文 0-0
    qsnow6
    qsnow6
    Sep 22, 2023
    24
    @pH #23 socks5 over tls
    huaxie1988
    huaxie1988
    Sep 23, 2023 via Android
    25
    ipv6 直连配合 ddns
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3310 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 05:40 · PVG 13:40 · LAX 21:40 · JFK 00:40
    ♥ Do have faith in what you're doing.