tailscale 如何提高打洞成功率? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zwyyy456
V2EX    宽带症候群

tailscale 如何提高打洞成功率?

  •  
  •   zwyyy456 2024-01-17 15:25:51 +08:00 14004 次点击
    这是一个创建于 686 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前听说 tailscale 打洞只要有一端有公网 ipv6 地址,打洞就基本能成功,但是我实际试下来却发现不是这么回事。

    家里的 nas 是有公网 ipv6 地址的,系统为 debian ,上面运行了 tailscale ;我在单位的 mac 上也运行了 tailscale ,尝试 ping tailscale 给出的 nas 的 ip 地址,发现延迟基本稳定在500ms 左右,显然是打洞没有成功。

    我应该如何设置,才能提高 tailscale 的打洞成功率呢?

    第 1 条附言    2024-01-18 00:14:54 +08:00
    padavan 通过修改 `防火墙 -> netfilter` 处的 NAT 类型为 Full Cone NAT ,成功将网络类型修改成了 Full Cone NAT ,但是 tailscale 依旧是打洞失败。。。
    第 2 条附言    2024-01-18 18:54:09 +08:00
    已经在 Mosdns 的 `direct-domain.txt` 中添加 `log.tailscale.io` 和 `controlplane.tailscale.com` 这两个域名,保证这两个域名被直接解析,返回真实 IP ,而不是返回 Fake IP ,家里和单位之间依旧无法打洞成功。。。
    44 条回复    2025-02-07 13:39:21 +08:00
    lujiaosama
        1
    lujiaosama  
       2024-01-17 15:27:44 +08:00
    持续关注, 我还准备上 tailscale 呢. 之前的 wireguard 只挂了一个晚上就被干掉了, UDP 限制太严重了.
    littlewing
        2
    littlewing  
       2024-01-17 15:29:28 +08:00
    单位没 ipv6 的话,家里有 ipv6 有啥用?
    HFX3389
        3
    HFX3389  
       2024-01-17 15:31:55 +08:00
    家里一般没问题,你得看看单位的网是不是有限制,首先单位也要有公网 IPv6 而且从出口到你的设备中间的链路都要支持才可以。
    你可以在家里的 tailscale 主机和单位的 tailscale 主机都输入“tailscale netcheck”看看命令返回的内容和结果就大概能知道具体的原因了
    HFX3389
        4
    HFX3389  
       2024-01-17 15:32:44 +08:00
    @lujiaosama #1 tailscale 用的协议就是 wireguard 诶
    totoro625
        5
    totoro625  
       2024-01-17 15:33:19 +08:00
    听说的不对:
    以下三选一
    1. 两端都能访问 ipv6 网站,其中一端有公网 ipv6
    2. 家宽是 NAT1 型,可以找运维/闲鱼获取管理员账户,设置 DMZ 主机为你的 NAS
    3. 单位是 NAT1 型
    4. 找一台 NAT1 型/公网 ip 型主机中转
    roykingH
        6
    roykingH  
       2024-01-17 15:35:04 +08:00
    单位如果没有 V6 的话 先看看 v4 地址能啥 nat 类型 NAT1 的话基本打洞都能成功 网速可以跑满 注意这里说的 v4 地址是拨号端获取的地址,过路由器或者光猫拨号的话 都会加一层 NAT
    tediorelee
        7
    tediorelee  
       2024-01-17 15:35:34 +08:00
    我说一下我的情况, 028 电信家宽只有 ipv6 公网,NAT 等级 1; 另外一端是公司的电信网,没有 v6, NAT 等级未知.
    Tailscale 打洞 100%成功率直连
    HFX3389
        8
    HFX3389  
       2024-01-17 15:39:01 +08:00
    @tediorelee #7 有点神奇~
    lujiaosama
        9
    lujiaosama  
       2024-01-17 15:44:07 +08:00
    @HFX3389 是的. wg 是直接裸奔, 被识别到就干掉了.
    roykingH
        10
    roykingH  
       2024-01-17 15:48:01 +08:00
    最好的方式还是先把光猫拨号改成桥接 路由拨号以后 dmz 给 nas
    我现在的整体方案是
    V6 直接走域名
    V4 在群晖的虚拟机里面装了一个 openwrt 做旁路油,在旁路油上面安装 tailscasle 和猫咪(为啥这么做? 群晖安装 tailscale 高负载的时候会掉网卡)
    单位搞了一个虚拟机也安装 openwrt ,安装 tailscale 以后直接组网,访问家里跟在家没区别。
    手机上安装 tailscale 客户端,出国开一下客户端 全场景都解决了
    dangyuluo
        11
    dangyuluo  
       2024-01-17 15:52:24 +08:00
    官方有一篇很好的文章,按照里面的推荐配置就行了
    https://tailscale.com/blog/how-nat-traversal-works
    zwyyy456
        12
    zwyyy456  
    OP
       2024-01-17 15:54:12 +08:00
    @totoro625
    光猫已经修改为桥接了,目前是刷了 padavan 的 redmi ac2100 负责拨号。
    那难怪了,单位无法访问 ipv6 网站。。。
    zwyyy456
        13
    zwyyy456  
    OP
       2024-01-17 15:54:51 +08:00
    比较奇怪的一点是,手机流量是支持 ipv6 的,但是手机开热点共享给 mac 用之后,发现 mac 还是无法访问 ipv6 的网站。
    zwyyy456
        14
    zwyyy456  
    OP
       2024-01-17 16:05:29 +08:00
    @totoro625 中转是说用自己的服务器搭建 derp server 吗?
    HFX3389
        15
    HFX3389  
       2024-01-17 16:12:31 +08:00
    @zwyyy456 #13 这说明手机没给你分配 IPv6 地址呗,要么你手机热点只玩 IPv4 ,要么你的 mac 没开 IPv6
    Yuhyeong
        16
    Yuhyeong  
       2024-01-17 16:18:14 +08:00
    家里昨天整了 ipv6 ,今天用 tailscale 打洞连家里电脑,用 parsec 巨慢。
    原来是 ipv4
    MillerD
        17
    MillerD  
       2024-01-17 16:19:08 +08:00
    我是家中有 ipv6 公网 单位无法访问 ipv6 但是 tailscale 基本打洞不怎么失败,同市电信
    应该不是 ipv6 的关系
    zwyyy456
        18
    zwyyy456  
    OP
       2024-01-17 16:20:59 +08:00
    @MillerD 我单位和宿舍的运营商都是移动,测试了一下,单位和宿舍的 nat 类型都是 Symmetric NAT 。
    SenLief
        19
    SenLief  
       2024-01-17 16:21:27 +08:00
    首先想的不是 ipv6 ,而是 NAT1 。
    HFX3389
        20
    HFX3389  
       2024-01-17 16:44:12 +08:00
    @zwyyy456 #18 那就是 NAT4 了,打洞困难
    daisyfloor
        21
    daisyfloor  
       2024-01-17 18:53:50 +08:00
    想请教下,这个和 Cloudflare tunnel 的区别是什么? 我看之前很多人也推荐这个
    MasterofNone
        22
    MasterofNone  
       2024-01-17 19:14:15 +08:00
    自建国内 derp 节点就行了啊
    lt0136
        23
    lt0136  
       2024-01-17 19:29:58 +08:00 via Android
    用 `tailscale ping` 命令,如果打洞成功直连的话,ping 会自动停止,如果打洞失败,会 ping 十次之后报错
    andsky
        24
    andsky  
       2024-01-17 19:43:18 +08:00
    感觉成功率不如 zerotier
    totoro625
        25
    totoro625  
       2024-01-17 20:18:23 +08:00
    可以测试一下家里的 ipv6 是否设置了防火墙:
    https://ipw.cn/ipv6ping/
    https://www.itdog.cn/ping_ipv6/
    totoro625
        26
    totoro625  
       2024-01-17 20:20:49 +08:00
    @daisyfloor #21 Cloudflare tunnel 需要经过境外的 Cloudflare 服务器进行中转
    tailscale 打洞成功相当于直连
    scal
        27
    scal  
       2024-01-17 20:23:28 +08:00
    @tediorelee #7 同
    yianing
        28
    yianing  
       2024-01-17 23:52:37 +08:00
    一端不能访问 ipv6 怎么是不能用 ipv6 直连的,还有一种可能是 ipv4 nat 打洞
    totoro625
        29
    totoro625  
       2024-01-18 08:55:21 +08:00
    光猫改桥接之后的问题找固件开发者就行

    可以试试不改桥接,nas 直连光猫,光猫设置 DMZ 主机,能否打洞
    totoro625
        30
    totoro625  
       2024-01-18 09:03:30 +08:00
    对了,软路由如果挂了梯子的话,可以关闭梯子再试一下
    因为不知道你的梯子是否阻拦了你的打洞
    软路由运行的软件越多越复杂越难打洞
    zwyyy456
        31
    zwyyy456  
    OP
       2024-01-18 09:20:56 +08:00
    @totoro625 padavan 上是没有挂梯子的,它只会将所有的 DNS 请求转发给我的 N1 上的 MOSDNS ,同时将 fakeip 路由给 N1 。
    totoro625
        32
    totoro625  
       2024-01-18 09:35:04 +08:00
    @zwyyy456 #31 可能不行,Tailscale 服务器在国外,可能把梯子 ip 识别为你的 ip ,从而打洞失败

    我如果先开 clash 再开 Tailscale 就会连接失败,但是先开 Tailscale 再开 clash 就能正常连接: https://github.com/tailscale/tailscale/issues/7288
    Edwardlyz
        33
    Edwardlyz  
       2024-01-18 09:53:31 +08:00   3
    @totoro625 #32 clash 开 tun 模式会这样,可以把
    log.tailscale.io
    controlplane.tailscale.com
    这两个域名加入 filter 就好了
    Edwardlyz
        34
    Edwardlyz  
       2024-01-18 09:54:17 +08:00
    @zwyyy456 #31 楼主我估计你的问题也是这样,fake ip 会影响到 tailscale
    zwyyy456
        35
    zwyyy456  
    OP
       2024-01-18 09:58:41 +08:00
    @Edwardlyz 好,我去试试,谢谢
    tsvico
        36
    tsvico  
       2024-01-19 09:56:48 +08:00   1
    试试在不建立连接的情况下 nas 执行 `tailscale ping mac`,即有公网 ip 的机器主动发起连接

    我现在是在云服务上搭建了一个 webhook ,通知 nas 向其他机器发起 ping
    zhyim
        37
    zhyim  
       2024-07-04 11:07:22 +08:00
    换了国内的 DERP 感觉速度还可以了
    OnEvent
        38
    OnEvent  
       338 天前
    我的中转服务器是阿里云的,在杭州,然后两台需要打洞的电脑 A 和电脑 B 都在湖北,很诡异的是,电脑 A 和 B 对电脑 C 都能打洞成功,但是电脑 A 和 B 之间怎么都没办法打洞成功,这个是真的沉默了......
    OnEvent
        39
    OnEvent  
       338 天前
    @OnEvent 啊我把家里路由器的 UPnP 打开了就能稳定 100% 打洞成功了
    hiwind
        40
    hiwind  
       331 天前
    最近 UDP 收紧了嘛?之前还能打洞成功,这周开始不行了
    HomeLab 公网 IPV6 <---> Company 电信无公网 无 IPV6
    onyourhead
        41
    onyourhead  
       300 天前 via Android
    @tsvico 我也是偶然试出来这样可以的,家里 nas 有 ipv6 地址,主动发起连接到手机,然后手机就可以直联了。楼主怎么搞的 webhook ,我也整一个
    tsvico
        42
    tsvico  
       300 天前
    @onyourhead #41 通过 frp 也好,或者 cf tunnel ,把 webhook 服务暴露出去,webhook 服务部署在 NAS 上,docker compose 如下

    ```
    services:
    webhook:
    image: thecatlady/webhook
    container_name: webhook
    command: -verbose -hooks=/config/hooks.yaml -hotreload
    # 参考 https://segmentfault.com/a/1190000042002239 ,docker 访问宿主机命令
    pid: host
    privileged: true
    environment:
    - TZ=Asia/Shanghai
    - UID=1000
    - GID=1000
    mem_limit: 200m
    memswap_limit: -1
    volumes:
    - ./data/config:/config:ro
    # ports:
    # - 8606:9000
    restart: always
    ```
    上边提到的 hooks.yaml
    ```
    - id: ping
    exeute-command: "/config/run/ping.sh"
    command-working-directory: "/config/run"
    include-command-output-in-response: true
    include-command-output-in-response-on-error: true
    pass-arguments-to-command:
    - source: string
    name: '100.64.0.1' # 这里是要 ping 的 ip
    comment: ip
    ```
    /config/run/ping.sh
    ```sh

    #!/usr/bin/env sh

    # variables
    IP=${1}

    if [ "$IP" = "" ];then
    IP="100.64.0.1"
    fi

    PURE_IP=`echo ${IP}|grep -Eo '([0-9]+[.]){3}[0-9]+'|grep -v "255"`


    echo "当前请求 IP 是: ${PURE_IP}"

    #nsenter -m -u -i -n -p -t 1 sh -c "tailscale netcheck"

    nsenter -m -u -i -n -p -t 1 sh -c "tailscale ping ${PURE_IP}"

    exit 0
    ```
    onyourhead
        43
    onyourhead  
       300 天前 via Android
    @tsvico 我昨晚研究了下,用的也是开源的 webhook ,你是怎么发起 webhook 请求呢,curl 命令吗,我是手机连 nas ,是不是要下载一个可以发 http 请求的 APP
    tsvico
        44
    tsvico  
       300 天前
    @onyourhead #43 可以网页直接访问
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5178 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 07:25 PVG 15:25 LAX 23:25 JFK 02:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86