飞牛OS NAS + Tailscale P2P直连配置

21 阅读4分钟

整合纯P2P直连、性能最优、适配NAS场景的核心参数,精细权限控制(cap_add替代privileged),P2P关键参数,最终配置如下:

tailscale 官网:login.tailscale.com/admin/machi…

【注意】:只需两处修改!TS_AUTHKEY 和 TS_EXTRA_ARGS 中的"192.168.5.0/24"部分。其余不变。

version: "3.8"
services:
  tailscale:
    image: tailscale/tailscale:latest
    container_name: tailscale
    hostname: fnos-nas
    network_mode: "host"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - NET_RAW
    devices:
      - /dev/net/tun:/dev/net/tun
    volumes:
      - /mnt/nas/tailscale-data:/var/lib/tailscale
    environment:
      # 替换为你自己的Reusable类型Auth Key(必须有效且未过期)
      - TS_AUTHKEY=xxx
      - TS_STATE_DIR=/var/lib/tailscale
      - TS_USERSPACE=false  # 内核级模式,性能更优(需要/dev/net/tun和NET_ADMIN权限)
      # 宣告内网路由 + 直连优化参数(无多余空格)
      - TS_EXTRA_ARGS=--advertise-routes=192.168.5.0/24 --netfilter-mode=on --snat-subnet-routes=true
      - TS_DISABLE_DNS=true  # 避免与飞牛OS DNS冲突
      - TS_ENABLE_LOCAL_DISCOVERY=true  # 启用局域网本地发现(直连优化)

关键参数完善说明(最优方案核心)

参数完善原因 & 作用
version: "3.8"指定Docker Compose文件格式版本,确保兼容性
cap_add: NET_ADMIN + NET_RAW替代privileged=true,仅赋予必要网络权限,更安全(NAS场景优先精细权限)
TS_DISABLE_DNS=true适配NAS场景:避免Tailscale修改DNS导致飞牛OS访问内网设备/外网域名解析异常
TS_USERSPACE=false内核级模式(最优选择):使用系统内核网络栈,比用户空间模式传输速度提升30%+,适配P2P直连(需要/dev/net/tun和NET_ADMIN权限)

部署&验证(极简3步)

步骤1:前置准备

生成Auth Key:登录Tailscale控制台 login.tailscale.com/admin/authk… → 生成「Reusable」类型密钥(仅勾选这1项,无需其他);

步骤2:部署容器

飞牛os中打开docker → 选中左侧compose:项目名称 trailscale ,路径设置为项目磁盘中的 docker/tailscale 目录 → 把上面的yml填进去并勾选创建后立即启动!

步骤3:验证纯P2P直连

在公司电脑(Windows 11)CMD执行,验证连接状态:

# ip 位于 https://login.tailscale.com/admin/machines
tailscale ping 100.xxx.xx.xx

连接状态说明:

  • direct - 纯P2P直连(最优状态,延迟最低)
  • via DERP(tok) - 通过官方DERP中继服务器(初始连接或NAT穿透失败时的保底方式)
  • via IP:PORT - 通过指定中继节点(可能是自建的derper服务器,延迟低时也视为P2P成功)

判断标准:

  • 延迟≤50ms:P2P直连成功(无论显示direct还是via某个节点)
  • 延迟>100ms:可能还在使用DERP中继,需要检查网络环境

我的实际测试结果如下:

C:\Users\admin>tailscale ping  100.xxx.xx.xx
pong from fnos-nas (100.xxx.xx.xx) via DERP(tok) in 613ms 
pong from fnos-nas (100.xxx.xx.xx) via DERP(tok) in 232ms 
pong from fnos-nas (100.xxx.xx.xx) via DERP(tok) in 231ms 
pong from fnos-nas (100.xxx.xx.xx) via  120.xxx.xxx.xx:8582  in 12ms
或
C:\Users\admin>tailscale ping  100.xxx.xx.xx
pong from fnos-nas (100.xxx.xx.xx) via  120.xxx.xxx.xx:8582  in 12ms

结果分析: 第一种情况,最后一行延迟仅12ms,说明已成功建立P2P直连。前面的via DERP(tok)是直连协商完成前的过渡中继状态,Tailscale会自动升级到最优路径。后续再ping就不会再显示"DERP"等过度状态了。

后面也可以用 tailscale status 和 tailscale netcheck 继续验证:

C:\Users\admin>tailscale status
100.xx.xx.xx     changbao  jooybao@  windows  -
100.xx.xx.xx   fnos-nas  jooybao@  linux    -

C:\Users\admin>tailscale netcheck
2026/01/19 16:12:24 portmap: monitor: gateway and self IP changed: gw= 192.168.11.1  self= 192.168.11.95 

Report:
        * Time: 2026-01-19T08:12:26.7380025Z
        * UDP: true
        * IPv4: yes,  111.xxx.xxx.xx:61481 
        * IPv6: no, but OS has support
        * MappingVariesByDestIP: true
        * PortMapping:
        * CaptivePortal: false
        * Nearest DERP: Hong Kong
        * DERP latency:
                - hkg: 110.3ms (Hong Kong)
                - tok: 192.6ms (Tokyo)
                - sfo: 202.5ms (San Francisco)
                - par: 210.1ms (Paris)
                ...
                - ams: 210.6ms (Amsterdam)
                - lhr: 214.3ms (London)
                - jnb: 424.9ms (Johannesburg)

重要补充说明

1. 启用子网路由

功能说明

  • 问题:默认情况下,Tailscale只能访问安装了Tailscale客户端的设备本身(如NAS的100.xx.xx.xx),无法访问局域网内的其他设备(如192.168.5.10的摄像头、192.168.5.20的电脑等)
  • 解决:启用子网路由后,NAS将成为一个"网关",允许通过Tailscale网络访问整个192.168.5.0/24网段的所有设备
  • 实际效果:在公司电脑上可以直接访问 192.168.5.10(家里的摄像头)、192.168.5.20(家里的电脑)等,无需为每台设备单独安装Tailscale

操作步骤: 容器启动后,需要在Tailscale管理控制台手动启用子网路由:

  • 访问 login.tailscale.com/admin/machi…
  • 找到 fnos-nas 设备,点击右侧的 ... 菜单
  • 选择 Edit route settings
  • 勾选 192.168.5.0/24 网段
  • 点击 Save 保存

2. 防火墙设置

功能说明

  • 问题:Tailscale节点间通过UDP端口41641进行P2P直连通信。如果防火墙阻止了这个端口,节点之间只能通过DERP中继服务器通信,导致延迟高、速度慢
  • 解决:开放UDP 41641端口,允许Tailscale建立P2P直连,实现低延迟、高速度的连接
  • 实际效果:P2P直连延迟通常<50ms,而通过DERP中继延迟可能>200ms

配置方法: 确保飞牛OS的防火墙允许Tailscale通信:

  • 开放UDP端口 41641(Tailscale默认端口)
  • 或临时关闭防火墙测试(不推荐长期使用)