整合纯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默认端口)
- 或临时关闭防火墙测试(不推荐长期使用)