使用Tailscale组网实现外网访问fnos NAS服务
一、文档说明
1.1 核心目的
通过Tailscale组建虚拟专用网络(VPN),实现外网环境下对fnos NAS服务的稳定访问。适用于多局域网场景(如公司、家庭、外部移动网络)的设备无感互通,打破地域和网络边界限制。
1.2 环境依赖
- 需一台带有公网IP的服务器(本文以阿里云ECS为例,配置:Ubuntu 20.04系统、3M带宽,年付约99元)。
 
- 说明:内网穿透需依赖公网IP中转,国内第三方内网穿透服务普遍价格较高,自建方案更经济。
 
二、部署Tailscale国内中继DERP服务
Tailscale是基于WireGuard的P2P组网工具,可实现内网穿透;当P2P直连失败时(如复杂NAT环境),流量会通过DERP中继服务中转。由于Tailscale官方未在中国大陆部署DERP节点,自建国内DERP可提升大陆地区网络连通性。
2.1 前置准备
- 公网服务器需提前安装 
docker和 docker-compose(用于部署DERP服务)。 
- 公网服务器需安装Tailscale客户端(用于验证DERP节点合法性)。
 
2.2 安装Tailscale客户端
在公网服务器上执行以下命令:
# 一键安装Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# 登录Tailscale账号(需在浏览器中完成验证)
tailscale login
执行 tailscale login后,控制台会输出登录URL,用浏览器访问并按指引完成授权,确保服务器成功加入Tailscale网络。
2.3 部署DERP中继服务
步骤1:创建部署目录
# 新建文件夹存放配置
mkdir -p /opt/tailscale-ip-derper && cd /opt/tailscale-ip-derper
步骤2:编写docker-compose配置
创建 docker-compose.yml文件,内容如下(端口可自定义,建议使用10000以上高位端口):
services:
  derper:
    image: ghcr.io/yangchuansheng/ip_derper:latest  # 基于官方DERP修改的适配镜像
    container_name: derper
    restart: always  # 容器异常时自动重启
    ports:
      - "12345:12345"  # DERP服务端口(宿主机端口:容器端口,需保持一致)
      - "3478:3478/udp"  # STUN协议端口(用于NAT类型检测,建议不变)
    volumes:
      # 映射Tailscale客户端的sock文件,用于验证节点合法性(防止被未授权设备滥用)
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
    environment:
      - DERP_ADDR=:12345  # 容器内DERP服务监听地址(需与端口映射一致)
      - DERP_CERTS=/app/certs  # 证书存放路径(自签名证书自动生成)
      - DERP_VERIFY_CLIENTS=true  # 启用客户端验证(必须开启,防止DERP节点被滥用)
步骤3:启动DERP服务
# 启动容器(后台运行)
docker-compose up -d
# 查看容器状态(确保状态为Up)
docker-compose ps
2.4 配置Tailscale ACL启用自定义DERP节点
登录Tailscale管理控制台,在“Access Controls”中修改 derpMap配置,添加自定义DERP节点(保留官方节点需设置 OmitDefaultRegions: false)。

配置模板示例(需替换为你的公网IP和端口):
"derpMap": {
  "OmitDefaultRegions": false,  // false=保留官方节点;true=仅使用自定义节点
  "Regions": {
    "900": {  // 900-999为Tailscale预留的自定义DERP区域ID
      "RegionID": 900,
      "RegionCode": "cn-aliyun",  // 自定义区域代码(如阿里云节点)
      "RegionName": "China Alibaba Cloud",  // 区域名称(便于识别)
      "Nodes": [
        {
          "Name": "derp-aliyun-1",  // 节点名称
          "RegionID": 900,  // 需与上级RegionID一致
          "IPv4": "1.1.1.1",  // 替换为你的公网服务器IP
          "DERPPort": 12345,  // 替换为docker-compose中配置的端口
          "InsecureForTests": true  // 自签名证书需设为true(生产环境建议配置HTTPS证书并改为false)
        }
      ]
    }
    // 如需添加多个自定义节点,可复制上述结构并修改RegionID、IP、端口等
  }
}
修改后点击“Save”生效,Tailscale会自动将配置同步到所有节点。
三、客户端安装与配置
所有需要访问fnos NAS的设备(如电脑、手机)需安装Tailscale客户端,并加入同一Tailscale网络。
3.1 客户端下载
访问Tailscale官方下载页,根据设备系统选择对应版本:

3.2 客户端登录
安装完成后,打开Tailscale客户端,使用与公网服务器相同的账号登录,完成授权后即可加入网络。登录成功后,客户端会显示分配的Tailscale私有IP(如 100.x.y.z)。
四、组网路由配置(可选)
若需访问客户端所在局域网内未安装Tailscale的设备(如fnos NAS所在局域网的其他设备),需将Tailscale客户端配置为“子网路由器”,共享局域网路由。
4.1 Linux系统配置
# 开启IP转发(临时生效,重启后需重新执行)
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
# 共享局域网子网(替换为实际子网,可通过ip a查看)
# 示例:共享192.168.1.0/24(fnos NAS所在局域网)和10.0.0.0/24
sudo tailscale up --advertise-routes=192.168.1.0/24,10.0.0.0/24

4.2 Windows系统配置
# 以管理员身份运行PowerShell,共享局域网子网
tailscale up --advertise-routes=192.168.1.0/24,10.0.0.0/24
# 开启IP转发
netsh interface ipv4 set interface "Tailscale" forwarding=enabled
netsh interface ipv6 set interface "Tailscale" forwarding=enabled
4.3 控制台启用路由
登录Tailscale管理控制台,进入“Machines”页面,找到配置了路由的设备,点击“... > Edit route settings”,勾选需要启用的子网路由,点击“Save”生效。


五、验证与使用
- 查看节点状态:在任意客户端执行 
tailscale status,确认fnos NAS所在设备及公网服务器在线(状态为 active)。 
- 访问fnos NAS:通过fnos NAS的Tailscale私有IP(如 
100.123.45.67或使用名称)或局域网IP(如 192.168.1.100,需配置路由),在外网环境直接访问其服务(如Web管理界面、文件共享等)。 
- tailscale控制台可以查看在线设备
 

注意事项
- 自定义DERP节点的 
InsecureForTests: true仅适用于测试,生产环境需配置HTTPS证书(如Let's Encrypt)并改为 false。 
- 公网服务器需开放配置的DERP端口(如12345)和STUN端口(3478/udp),确保防火墙规则允许入站流量。
 
- 若访问速度慢,可通过 
tailscale netcheck查看当前使用的DERP节点,优先选择延迟低的节点(国内节点通常延迟更低)。