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

tailscale 为什么经常打洞失败?

  •  
  •   FaiChou · 3 天前 · 4984 次点击

    同一个小区内(一个在 A 楼,一个在 B 楼),同一个运营商(联通)。

    两个地方都是用 OpenWrt ,开了 fullcon nat (测试发现其实是 Port-Restricted Cone NAT )。

    使用 tailscale 连接组网,测试发现经常会直连失败,而去走 derp ,尤其是晚高峰时候。

    不清楚是 tailscale 自己程序的问题还是运营商的限制。

    tailscale 是暴力遍历端口(它们官网有教程),实践下来还是能够打洞成功的。

    但真正使用的时候就打洞失败,可用性差。

    所以想问下,tailscale 是否支持手动配置端口转发(已有公网 ip )?

    不想一直在 op 后台开一个端口,这样风险太大了(吃过这样的亏)。

    我的想法是,打洞失败,既然能连接 derp 服务器,那就能控制另一端,搞个脚本,让另一台设备主动请求 OpenWrt ( upnp/nat-pmp)开放一个临时端口。然后 tailscale 是否支持这样搞?

    74 条回复    2025-07-29 16:30:39 +08:00
    worker201
        1
    worker201  
       3 天前
    你的头像很吊
    Tink
        2
    Tink  
    PRO
       3 天前
    可以考虑把 ts 所在设备的 41641/udp 映射出去试一下
    ixixi
        3
    ixixi  
       3 天前
    用一下蒲公英试试 可以提单子问问他们技术支持
    litpel
        4
    litpel  
       3 天前
    你的头像很吊 和我衣服的 logo 很像
    FaiChou
        5
    FaiChou  
    OP
       3 天前
    @Tink 一个局域网下有很多设备。
    seenthewind
        6
    seenthewind  
       3 天前
    没用过 tailscale ,对打洞只有一点浅薄的理解。

    理论上稳定的网络打洞不可行,因为临时的打洞实际上是由于各层网络设备的“后门策略”使得可以出现打洞的现象。

    至于网络设备有多少后门策略,哪些可用,就要看各种实际情况了(有兴趣可以看看 root 后的小米路由器配的 iptables ),比如,万一后门的正主正在用咋办?



    开放临时端口的办法可能可以,但是还是太麻烦了。

    我目前的方法就非常简单,首先是普通的主流网络设备做前端拨号,获得公网 ip 后,后端配置 wireguard ,在拨号的网络设备里,映射一个非常高的 udp 端口(用高段位来尽量减少 sb 扫描,用 udp 来进一步规避 sb 中的 sb )。

    由于 wireguard 是 udp ,无论是处理性能还是对抗扫描等都还可以,另外做一个靠谱长度的 key ,可以保证在量子计算前不被攻破。

    其他就没了,别整那些花里胡哨的,用得越多你留的面包屑就越多,框架的漏洞就越多。
    huangsen365
        7
    huangsen365  
       3 天前 via Android   ❤️ 1
    如果都支持公网 ipv6 将会很容易打洞成功,或者在国内挑个当地云服务器自建 derp
    totoro625
        8
    totoro625  
       3 天前
    Port-Restricted Cone NAT 是 NAT3
    以下方式任选或组合使用:
    1. 路由器拨号
    2. 打电话要公网 IP
    3. 尝试走 IPV6
    4. 闲鱼买一个路由器管理员账户,把 tailscale 所在机器的 IP 设置为 DMZ
    lhsakudsgdsik
        9
    lhsakudsgdsik  
       3 天前
    是的,今年打洞成功率挺低的,就算 ipv6 打洞通了,ping 测试也会每五六个包延迟就高到一百多,还不如完全走搭建的中转服务器
    Tink
        10
    Tink  
    PRO
       3 天前
    @FaiChou #5 你所有设备都装了 ts ?一个局域网装一台就可以了啊
    FaiChou
        11
    FaiChou  
    OP
       3 天前
    @Tink #10 设备很多,两端的网段都一样,都是 192.168.3.x ,不想改了,所以没办法用 subnet 那功能。
    lnbiuc
        12
    lnbiuc  
       3 天前
    不支持
    怀疑是联通对 udp 包的限制
    Tink
        13
    Tink  
    PRO
       3 天前
    @FaiChou #11 建议改了,长痛不如短痛,最有用的功能浪费了
    HandSonic
        14
    HandSonic  
       3 天前
    我这同一个城市,同一个运营商中国电信,Tailscale IPv6 直通,丢包率都能到 20%,运营商限制 UDP 还是限制的太狠了,我用 OpenVPN 走 TCP 隧道就不丢包
    kekylin
        15
    kekylin  
       3 天前
    我联通公网 IPv6 ,基本上和三大运营商连接都是直连,平时不怎么关注连接质量,刚刚测试了一下,还可以。
    100.10.0.1 的 Ping 统计信息:
    数据包: 已发送 = 100 ,已接收 = 100 ,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
    最短 = 12ms ,最长 = 87ms ,平均 = 18ms
    sunfly
        16
    sunfly  
       3 天前
    @worker201 活捉佬友
    gogogo2000
        17
    gogogo2000  
       3 天前
    tailscale 会自动创建 upnp 端口映射的,所以
    > 我的想法是,打洞失败,既然能连接 derp 服务器,那就能控制另一端,搞个脚本,让另一台设备主动请求 OpenWrt ( upnp/nat-pmp)开放一个临时端口。然后 tailscale 是否支持这样搞?
    人家本来是这样的。

    > tailscale 是暴力遍历端口(它们官网有教程),实践下来还是能够打洞成功的。
    tailscale 是生日算法,并不是暴力遍历 https://tailscale.com/blog/how-nat-traversal-works
    "But we can get rid of STUN, the birthday paradox trick, port mapping protocols, and all the hairpinning bumf. That’s much nicer!"
    gogogo2000
        18
    gogogo2000  
       3 天前
    Here’s a parting “TL;DR” recap: For robust NAT traversal, you need the following ingredients:

    A UDP-based protocol to augment

    Direct access to a socket in your program

    A communication side channel with your peers

    A couple of STUN servers

    A network of fallback relays (optional, but highly recommended)

    Then, you need to:

    Enumerate all the ip:ports for your socket on your directly connected interfaces

    Query STUN servers to discover WAN ip:ports and the “difficulty” of your NAT, if any

    Try using the port mapping protocols to find more WAN ip:ports

    Check for NAT64 and discover a WAN ip:port through that as well, if applicable

    Exchange all those ip:ports with your peer through your side channel, along with some cryptographic keys to secure everything.

    Begin communicating with your peer through fallback relays (optional, for quick connection establishment)

    Probe all of your peer’s ip:ports for connectivity and if necessary/desired, also execute birthday attacks to get through harder NATs

    As you discover connectivity paths that are better than the one you’re currently using, transparently upgrade away from the previous paths.

    If the active path stops working, downgrade as needed to maintain connectivity.

    Make sure everything is encrypted and authenticated end-to-end.
    guanzhangzhang
        19
    guanzhangzhang  
       3 天前
    主路由开 upnp 试试,自建 derp 试试
    lovelylain
        20
    lovelylain  
       3 天前 via Android
    你到底是有公网 ip 不想常开端口,还是没有公网 ip
    webcape233
        21
    webcape233  
       3 天前 via iPhone
    ip6 很容易成功
    Z1on
        22
    Z1on  
       3 天前 via Android
    同一小区要不试试 tr069 组网呢
    Markxu0
        23
    Markxu0  
       3 天前 via Android
    zerotier 效果确实好一些,试试 zerotier
    nxuu
        24
    nxuu  
       3 天前
    试试 gl.inet 的路由器 默认固件自带 tailscale 一直用着都没问题.
    RobinHuuu
        25
    RobinHuuu  
       3 天前 via iPhone
    tailsacle 支持自定义端口,不过是需要在服务运行命令行中加--port 参数。从你的描述看是一个网内多点,不改 port 是无法直连的,这也是难打洞的原因之一。

    或者一个网一个 tailcale ,然后做好路由,你都是 openwrt ,这些都好办。
    NightFlame
        26
    NightFlame  
       3 天前
    @Markxu0 不都是打洞吗,为什么 z 会好点?
    yiranw09
        27
    yiranw09  
       3 天前
    感觉如果只是用作远程桌面的话,没有必要用 tailscale ,不稳定,延迟也不一定低
    不如 frp 稳定开个隧道,远程桌面即便是 10M 的小水管也很流畅了
    Niphor
        28
    Niphor  
       3 天前
    都 NAT3 了,老老实实中转吧
    aMR
        29
    aMR  
       3 天前
    两边都是用 OpenWrt 拨号的?还有你 IPv6 呢
    lxnelly
        30
    lxnelly  
       3 天前
    我跟你一样同小区,开了 ipv6 很轻松。ipv4 一样不行
    ccloving
        31
    ccloving  
       3 天前
    同一个小区内(一个在 A 楼,一个在 B 楼),同一个运营商(联通)。-----这种情况用无线网桥串起来不是更稳定嘛。
    565656
        32
    565656  
       3 天前
    我已经放弃 tailscale 了 如果需要自建 derp 不如直接 frp 了
    yankebupt
        33
    yankebupt  
       3 天前
    公网 i 现在收钱了,每月100,太贵了,没买
    ipv6 给的地址好像能用
    FaiChou
        34
    FaiChou  
    OP
       3 天前
    @aMR 对啊,都用 OpenWrt 了,自己拨号的,性能更好点。 之前经常因为 tz 配置文件有问题,v6 让我给关了。我有空再改一下打开 v6.
    Chihaya0824
        35
    Chihaya0824  
    PRO
       3 天前
    嗯? 看了半天竟然没人提端口复用问题吗
    41641 这个口被别人占用了那可能会打洞失败,所以 ACL 里加入 randomizeClientPort 随机化端口试试
    https://tailscale.com/kb/1018/acls/
    /t/851441
    #17
    FaiChou
        36
    FaiChou  
    OP
       3 天前
    @Chihaya0824

    这个 1025 端口是随机化端口么?刚才一开始打洞不成功,过了一会打洞成功才有这个 1025 端口。但另一个设备 op3,还是一直没有打洞成功。另外 z4pro 这个设备用默认的 41641 端口。
    FaiChou
        37
    FaiChou  
    OP
       3 天前
    @Chihaya0824

    感觉开启 randomizeClientPort 不是个好选择:

    > The randomizeClientPort field (if set to true) makes devices prefer a random port for WireGuard traffic over the default static port 41641. You should only use the randomizeClientPort field as a workaround for some buggy firewall devices after consulting with Tailscale (support).

    因为有 nat 的情况下都会给内网设备做端口映射,每个内网设备都是用 41641 端口,但 nat 对应的外网端口就不一样了,比如我上面的:

    m2mini:41641 → 公网:1025
    z4pro:41641 → 公网:41641
    Chihaya0824
        38
    Chihaya0824  
    PRO
       3 天前
    @FaiChou 试试改下 acl 呗,看这里 https://tailscale.com/kb/1337/policy-syntax#randomizeclientport
    因为我没用这个选项所以不知道表现是什么样的
    但是不太懂为什么会用 1025 口,这好像不是一个 tailscale 会用的口,如果一直是 41641 我觉得应该就没开随机
    Chihaya0824
        39
    Chihaya0824  
    PRO
       3 天前
    @FaiChou emmm ,不好意思才发现原来有公网 ip ,那不应该啊?难道是 nat4444?
    如果 41641 放行了那应该没问题啊
    你的 netcheck 是显示的是你的 wan 的 ip 吗?
    Ansen
        40
    Ansen  
       3 天前
    一样的问题, 同城电信网络, 两边都有公网 IP , 还是经常走 relay , 慢得要死
    我还 自建 derp , 一样不行

    我在想要不要上 phantun
    FaiChou
        41
    FaiChou  
    OP
       3 天前
    @Chihaya0824 #39

    Report:
    * Time: 2025-07-28T07:59:44.6168Z
    * UDP: true
    * IPv4: yes, 我的公网 ip:52275
    * IPv6: no, but OS has support
    * MappingVariesByDestIP: false
    * PortMapping:
    * CaptivePortal: false
    FaiChou
        42
    FaiChou  
    OP
       3 天前
    @Ansen 嗯,我也自建过很多个 derp ,但是只要不是直连都很拉胯。
    hobairiku
        43
    hobairiku  
       3 天前
    我这里经常被限制 1M 的 UDP 网速,我有两个自建的 derp ,客户端显示在线,而且一方可以 ping 通,都显示在线,但是另一方就 ping 不通,换个时间或者其他网络环境的机器又可以,限速是近几个月开始的,而这种无法连接的情况是很近一段时间开始出现,怀疑是运营商问题了。
    echo1937
        44
    echo1937  
       3 天前
    我自建的 derp,速度还挺好啊
    FaiChou
        45
    FaiChou  
    OP
       3 天前
    @gogogo2000 #17 是的,生日悖论,但还是要遍历很多端口。
    unbridle
        46
    unbridle  
       3 天前
    有 ipv6 这些都不是问题
    aMR
        47
    aMR  
       3 天前
    @FaiChou 自己拨号还只能测出 NAT3 就奇怪了,要么 full cone nat 没弄好,要么运营商限制了,想折腾的话可以把 tailscale 直接装 openwrt 上或者用电脑拨号测一下能不能通,不想折腾就直接 IPv6 吧
    FaiChou
        48
    FaiChou  
    OP
       3 天前
    @unbridle
    @huangsen365
    @totoro625
    @webcape233
    @aMR
    @lxnelly

    开了下 v6, 仍然有打洞失败的情况。

    FaiChou
        49
    FaiChou  
    OP
       3 天前
    @aMR #47 我 op 上都装了 ts 的。
    crackid
        50
    crackid  
       3 天前
    我刚好相反,很容易直连,一直连网络就巨拉胯近乎不能用,所以每次直连我都去重启一下拨号然后让他走自建的 derp... 要不是能多设备组网,我都想要换回 frp 了
    masenjooham
        51
    masenjooham  
       3 天前
    同一小区,首选给宽带运维赛两条烟。皮线直连如何? 不光不用打洞,宽带都省一条。。。。
    备选:试试 tr069 组网呢
    huangsen365
        52
    huangsen365  
       3 天前
    @crackid 你这个很好解决,就是所有设备都尽量层 nat 网络 然后就必然走 derp 了
    huangsen365
        53
    huangsen365  
       3 天前
    @FaiChou 其实自建 derp 是最佳的做法
    Actrace
        54
    Actrace  
       3 天前
    @565656 DERP 可以直接用 vx.link 的,轻松。
    v2er119
        55
    v2er119  
       3 天前
    应该是设置问题 ,现在 TS 功能太多了,反而更容易误操作了。不同城市不同运营商一个 derp ,稳定运行好多年,现在装系统第一件事装 ssh server 和 ts 。
    同一个小区内的,应该有共同上级路由,比如 tracer 出来是 x.x.x.x ,理论上在对方网络互相添加一个本段网络的 router: addr: 192.168.1.0, mask: 255.255.255.0, gate: x.x.x.x ,都可以直接 ping 通的吧。
    yuantinghg
        56
    yuantinghg  
       3 天前 via Android
    插个嘴。
    360t7 op 装 ts ,内存和 cpu 占用很高,有没有解决方案?
    我现在把从 op 上 ts 卸载了,然后 fnos 安装 ts 。
    Csheng
        57
    Csheng  
       3 天前
    试试 https://netbird.io/ ,tailscale 自建搞起来比这玩意还麻烦
    目前我用它自建,所有 peer 都连自建,还是挺稳定的 P2P 连通,再不济都能转发。
    Heroininu
        58
    Heroininu  
       3 天前
    今年运营商改革的背景下,打洞成功反而是坏事,稳定性堪忧,UDP 阻断严重。10 个包丢 1 个。我特意改成用中转,稳定多了。
    Csheng
        59
    Csheng  
       3 天前
    @Csheng tailscale derp 自建,两边 peer 都有公网的情况下也经常跑转发,真沙雕。。。
    bytesfold
        60
    bytesfold  
       3 天前 via iPhone
    用的 derp ,腾讯云 200M ,还算好用
    Cheons
        61
    Cheons  
       3 天前 via Android
    @masenjooham
    皮线直连,两栋楼之间布线的工程量可不小😂
    即便是紧挨取得两栋,两包烟的费用可解决不了,两条差不多吧

    还是试试 tr069 吧
    thereone
        62
    thereone  
       3 天前
    有 ipv6 用 softether 直连不就行了也不用打洞,udp tcp 都可以选择使用的。二层三层互通也没有任何问题。
    aarontian
        63
    aarontian  
       2 天前
    不懂原理。。但我家里电脑连华硕梅林,打洞成功率基本为 0 ,绕过路由器直接连联通的光猫,就稳成功了。
    kylo1989
        64
    kylo1989  
       2 天前
    大概率是运营商 NAT 太狠了,或者防火墙抽风。实在不行就中转呗,虽然慢点。
    badgv
        65
    badgv  
       2 天前 via Android
    @Csheng nerbird 自建管理平台比 tailscale 的 headscale 麻烦多了,都用 docker ,nerbird 要跑一堆容器,headscale 一个就足够
    Ananaskop
        66
    Ananaskop  
       2 天前
    如果有公网 ip 可以通过 ss 进行
    lonccc
        67
    lonccc  
       2 天前
    我的办法是,家里宽带和手机流量都是电信,都有打开 ipv6 ,外出电脑连手机热点,tailscale 能稳定直连,速度够看 1080p 视频。而且不限地域,在外省也是一样的。办宽带送的流量 60g 每月完全够用了。
    404not400
        68
    404not400  
       2 天前
    可以试试 ring.link ,稳定的。
    Csheng
        69
    Csheng  
       2 天前
    @badgv 容器确实多了,看起来比较臃肿,但效果确实好啊。。。也可能是我没用好 tailscale ,浅尝辄止

    当时的场景是 wrt 旁路上装 sing-box tun + tailscale/netbird 测试,可能是没配置好 sing-box 导致的经常 relay 也说不定,
    折腾到现在能稳定 netbird p2p ,估计再换回 tailscale 也许很顺利,不一定了,有时间再折腾过。。
    Huelse
        70
    Huelse  
       2 天前
    两边都是桥接的宽带成功率高
    memcache
        71
    memcache  
       2 天前
    https://arthurchiao.art/blog/how-nat-traversal-works-zh/#11-%E8%83%8C%E6%99%AFipv4-%E5%9C%B0%E5%9D%80%E7%9F%AD%E7%BC%BA%E5%BC%95%E5%85%A5-nat
    FaiChou
        72
    FaiChou  
    OP
       2 天前
    @memcache 直接看原文就很清楚了,讲的很细。我自己也写过一篇原文的解读。
    gunner168
        73
    gunner168  
       2 天前 via iPhone
    之前用的自建 derp 搭配 stun 打洞,ip4 环境下走 derp 也基本等于直连,最近不知怎么了一直无法连接到 derp 服务器,已经放弃了,改用 wireguard 搭 stun ,唯一的麻烦是每次端口变动需要手动填一次,但是速度快延迟低
    wm5d8b
        74
    wm5d8b  
       2 天前 via Android
    运营商的问题,我试过同一个城市使用 ipv6 ,电信、联通、移动 5G 访问电信家宽和移动家宽都能直连,联通家宽就不行
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   926 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 20:58 · PVG 04:58 · LAX 13:58 · JFK 16:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.