ethusdt
0.01D

tailscale 为什么经常打洞失败?

  •  
  •   ethusdt · Jul 28, 2025 · 13128 views
    This topic created in 465 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

    76 replies  •  2025-08-04 06:47:32 +08:00
    worker201
    worker201
    Jul 28, 2025
    1
    你的头像很吊
    Tink
    Tink
    Jul 28, 2025
    2
    可以考虑把 ts 所在设备的 41641/udp 映射出去试一下
    ixixi
    ixixi
    Jul 28, 2025
    3
    用一下蒲公英试试 可以提单子问问他们技术支持
    litpel
    litpel
    Jul 28, 2025
    4
    你的头像很吊 和我衣服的 logo 很像
    ethusdt
    ethusdt
    OP
    Jul 28, 2025
    5
    @Tink 一个局域网下有很多设备。
    seenthewind
    seenthewind
    Jul 28, 2025
    6
    没用过 tailscale ,对打洞只有一点浅薄的理解。

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

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



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

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

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

    其他就没了,别整那些花里胡哨的,用得越多你留的面包屑就越多,框架的漏洞就越多。
    huangsen365
    huangsen365
    Jul 28, 2025 via Android❤️1
    7
    如果都支持公网 ipv6 将会很容易打洞成功,或者在国内挑个当地云服务器自建 derp
    totoro625
    totoro625
    Jul 28, 2025
    8
    Port-Restricted Cone NAT 是 NAT3
    以下方式任选或组合使用:
    1. 路由器拨号
    2. 打电话要公网 IP
    3. 尝试走 IPV6
    4. 闲鱼买一个路由器管理员账户,把 tailscale 所在机器的 IP 设置为 DMZ
    lhsakudsgdsik
    lhsakudsgdsik
    Jul 28, 2025
    9
    是的,今年打洞成功率挺低的,就算 ipv6 打洞通了,ping 测试也会每五六个包延迟就高到一百多,还不如完全走搭建的中转服务器
    Tink
    Tink
    Jul 28, 2025
    10
    @FaiChou #5 你所有设备都装了 ts ?一个局域网装一台就可以了啊
    ethusdt
    ethusdt
    OP
    Jul 28, 2025
    11
    @Tink #10 设备很多,两端的网段都一样,都是 192.168.3.x ,不想改了,所以没办法用 subnet 那功能。
    lnbiuc
    lnbiuc
    Jul 28, 2025
    12
    不支持
    怀疑是联通对 udp 包的限制
    Tink
    Tink
    Jul 28, 2025
    13
    @FaiChou #11 建议改了,长痛不如短痛,最有用的功能浪费了
    HandSonic
    HandSonic
    Jul 28, 2025
    14
    我这同一个城市,同一个运营商中国电信,Tailscale IPv6 直通,丢包率都能到 20%,运营商限制 UDP 还是限制的太狠了,我用 OpenVPN 走 TCP 隧道就不丢包
    kekylin
    kekylin
    Jul 28, 2025
    15
    我联通公网 IPv6 ,基本上和三大运营商连接都是直连,平时不怎么关注连接质量,刚刚测试了一下,还可以。
    100.10.0.1 的 Ping 统计信息:
    数据包: 已发送 = 100 ,已接收 = 100 ,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
    最短 = 12ms ,最长 = 87ms ,平均 = 18ms
    sunfly
    sunfly
    Jul 28, 2025
    16
    @worker201 活捉佬友
    gogogo2000
    gogogo2000
    Jul 28, 2025
    17
    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
    gogogo2000
    Jul 28, 2025
    18
    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
    guanzhangzhang
    Jul 28, 2025
    19
    主路由开 upnp 试试,自建 derp 试试
    lovelylain
    lovelylain
    Jul 28, 2025 via Android
    20
    你到底是有公网 ip 不想常开端口,还是没有公网 ip
    webcape233
    webcape233
    Jul 28, 2025 via iPhone
    21
    ip6 很容易成功
    Z1on
    Z1on
    Jul 28, 2025 via Android
    22
    同一小区要不试试 tr069 组网呢
    Markxu0
    Markxu0
    Jul 28, 2025 via Android
    23
    zerotier 效果确实好一些,试试 zerotier
    nxuu
    nxuu
    Jul 28, 2025
    24
    试试 gl.inet 的路由器 默认固件自带 tailscale 一直用着都没问题.
    RobinHuuu
    RobinHuuu
    Jul 28, 2025 via iPhone
    25
    tailsacle 支持自定义端口,不过是需要在服务运行命令行中加--port 参数。从你的描述看是一个网内多点,不改 port 是无法直连的,这也是难打洞的原因之一。

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

    这个 1025 端口是随机化端口么?刚才一开始打洞不成功,过了一会打洞成功才有这个 1025 端口。但另一个设备 op3,还是一直没有打洞成功。另外 z4pro 这个设备用默认的 41641 端口。
    ethusdt
    ethusdt
    OP
    Jul 28, 2025
    37
    @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
    Chihaya0824
    Jul 28, 2025
    38
    @FaiChou 试试改下 acl 呗,看这里 https://tailscale.com/kb/1337/policy-syntax#randomizeclientport
    因为我没用这个选项所以不知道表现是什么样的
    但是不太懂为什么会用 1025 口,这好像不是一个 tailscale 会用的口,如果一直是 41641 我觉得应该就没开随机
    Chihaya0824
    Chihaya0824
    Jul 28, 2025
    39
    @FaiChou emmm ,不好意思才发现原来有公网 ip ,那不应该啊?难道是 nat4444?
    如果 41641 放行了那应该没问题啊
    你的 netcheck 是显示的是你的 wan 的 ip 吗?
    Ansen
    Ansen
    Jul 28, 2025
    40
    一样的问题, 同城电信网络, 两边都有公网 IP , 还是经常走 relay , 慢得要死
    我还 自建 derp , 一样不行

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

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

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

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

    当时的场景是 wrt 旁路上装 sing-box tun + tailscale/netbird 测试,可能是没配置好 sing-box 导致的经常 relay 也说不定,
    折腾到现在能稳定 netbird p2p ,估计再换回 tailscale 也许很顺利,不一定了,有时间再折腾过。。
    Huelse
    Huelse
    Jul 29, 2025
    70
    两边都是桥接的宽带成功率高
    memcache
    memcache
    Jul 29, 2025
    71
    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
    ethusdt
    ethusdt
    OP
    Jul 29, 2025
    72
    @memcache 直接看原文就很清楚了,讲的很细。我自己也写过一篇原文的解读。
    gunner168
    gunner168
    Jul 29, 2025 via iPhone
    73
    之前用的自建 derp 搭配 stun 打洞,ip4 环境下走 derp 也基本等于直连,最近不知怎么了一直无法连接到 derp 服务器,已经放弃了,改用 wireguard 搭 stun ,唯一的麻烦是每次端口变动需要手动填一次,但是速度快延迟低
    wm5d8b
    wm5d8b
    Jul 29, 2025 via Android
    74
    运营商的问题,我试过同一个城市使用 ipv6 ,电信、联通、移动 5G 访问电信家宽和移动家宽都能直连,联通家宽就不行
    phrnet
    phrnet
    Aug 1, 2025
    75
    @Chihaya0824 加了这个 我公网 ip 的突然好使了! 我的 wan 口上装了一个 tailscale 内网的机子老要做我自建的 derp 开了这个就直接 p2p 直连了
    le4tim
    le4tim
    Aug 4, 2025 via Android
    76
    楼主可以帮忙在你的网络环境测试一下这个纯协助打洞的 p2p 的小工具的成功率:
    netcat 装上了 P2P“引擎”!
    https://www.v2ex.com/t/1149657
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1374 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 106ms · UTC 18:45 · PVG 02:45 · LAX 10:45 · JFK 13:45
    ♥ Do have faith in what you're doing.