Windows + Rocky Linux:通过 Tailscale 互传文件
1. 概述
通过 Tailscale 组建虚拟局域网(WireGuard 隧道),实现 Windows 和 Rocky Linux 两台电脑之间的安全文件互传,无需公网 IP、端口转发或复杂防火墙配置。
环境信息:
| 项目 | 机器 A | 机器 B |
|---|---|---|
| 操作系统 | Windows 10/11 | Rocky Linux 9.x |
| 角色 | 客户端 | 客户端 |
| Tailscale IP | 安装后自动分配(100.x.x.x) | 安装后自动分配(100.x.x.x) |
2. Tailscale 账号准备
- 访问 https://login.tailscale.com 注册账号(支持 Google / Microsoft / GitHub 登录)。
- 两台机器使用同一个账号登录,即可自动加入同一 Tailnet。
3. Windows 端安装与配置
3.1 安装 Tailscale
- 访问 https://tailscale.com/download/windows 下载安装包。
- 运行安装程序,按提示完成安装。
- 安装完成后系统托盘会出现 Tailscale 图标,点击 Log in 用浏览器登录账号。
3.2 验证连接
打开 PowerShell 执行:
1 | tailscale status |
输出中应能看到本机信息及分配的 100.x.x.x 地址。
3.3 开启 Taildrop(文件传输)
Taildrop 是 Tailscale 内置的文件传输功能,默认已启用,无需额外配置。
确认方法:登录 https://login.tailscale.com/admin/acls,确保 ACL 中没有禁用 Taildrop(默认 ACL 策略允许)。
4. Rocky Linux 端安装与配置
4.1 安装 Tailscale
1 | # 添加 Tailscale 官方仓库 |
4.2 登录认证
1 | sudo tailscale up |
终端会输出一个认证 URL,在浏览器中打开并用与 Windows 相同的账号登录完成授权。
4.3 验证连接
1 | tailscale status |
应能看到本机和 Windows 机器的信息,记录两台机器的 hostname(后续传文件要用)。
4.4 互 ping 测试
1 | # 在 Rocky Linux 上 ping Windows(用 Tailscale hostname 或 100.x.x.x) |
在 Windows 上同样可以 ping Rocky Linux:
1 | ping <rocky-hostname> |
如果双向 ping 通,说明 Tailscale 隧道已建立成功。
5. 文件互传方式
方式一:Taildrop(Tailscale 内置,推荐)
Taildrop 是最简单的方式,无需额外安装任何软件。
Linux 发送文件到 Windows
1 | # 发送单个文件 |
Windows 端收到文件后,会在系统托盘弹出通知,文件默认保存到 Downloads 目录。
也可以在 Windows 上通过命令行接收:
1 | # 查看待接收文件 |
Windows 发送文件到 Linux
方法 A — 命令行:
1 | tailscale file cp C:\path\to\file.txt <rocky-hostname>: |
方法 B — 右键菜单(GUI):
在文件资源管理器中右键文件 → Send with Tailscale → 选择目标 Rocky Linux 设备。
Linux 端接收文件:
1 | # 在你想保存文件的目录下执行 |
文件会下载到当前目录。
方式二:Samba 共享(适合频繁大量文件操作)
通过 Tailscale 网络搭建 Samba 共享,Windows 可以像访问本地文件夹一样操作 Linux 文件。
4.1 Rocky Linux 安装配置 Samba
1 | # 安装 Samba |
编辑 Samba 配置文件:
1 | sudo vim /etc/samba/smb.conf |
在文件末尾添加:
1 | [shared] |
设置 Samba 密码并启动服务:
1 | # 设置 Samba 用户密码(可以和系统密码不同) |
4.2 防火墙放行(仅允许 Tailscale 接口)
1 | # 获取 Tailscale 接口名(通常是 tailscale0) |
这样只有通过 Tailscale 隧道的流量才能访问 Samba,不会暴露在公网。
4.3 Windows 访问 Samba 共享
- 打开文件资源管理器,地址栏输入:
1 | \\<rocky-tailscale-ip>\shared |
或使用 Tailscale hostname:
1 | \\<rocky-hostname>\shared |
输入之前设置的 Samba 用户名和密码。
可右键 映射网络驱动器 将其挂载为盘符(如 Z:),方便日常使用。
方式三:SFTP/SCP(利用 SSH,无需额外服务)
Rocky Linux 通常默认已安装 OpenSSH Server。
确认 SSH 服务运行
1 | sudo systemctl status sshd |
Windows 通过 SCP 传输文件
Windows 10/11 自带 OpenSSH 客户端:
1 | # Windows → Linux |
使用 WinSCP 图形界面(可选)
- 下载安装 WinSCP:https://winscp.net
- 新建连接:
- 协议:SFTP
- 主机名:Rocky Linux 的 Tailscale IP 或 hostname
- 用户名/密码:Linux 系统账号
- 连接后可拖拽传输文件。
6. 三种方式对比
| 特性 | Taildrop | Samba | SFTP/SCP |
|---|---|---|---|
| 安装复杂度 | 无需额外安装 | 需安装配置 Samba | 通常已有 SSH |
| 适用场景 | 偶尔传几个文件 | 频繁读写、大量文件 | 偶尔传输、脚本自动化 |
| 传输速度 | 一般 | 快(持续连接) | 快 |
| 双向传输 | 支持 | 支持(Windows 可读写) | 支持 |
| 图形界面 | Windows 右键菜单 | Windows 资源管理器 | WinSCP |
| 额外端口 | 无 | 445(仅 Tailscale 内) | 22(仅 Tailscale 内) |
7. 开机自启动配置
7.1 Windows 端
Tailscale Windows 客户端安装后默认开机自启,无需额外配置。
确认方法:
Ctrl + Shift + Esc打开任务管理器 → 启动 标签页 → 确认 Tailscale 状态为「已启用」。- 或通过服务管理器确认:
1 | # PowerShell 查看 Tailscale 服务状态 |
输出的 StartType 应为 Automatic。
如果未自启动,手动设置:
1 | # 设置 Tailscale 服务为自动启动 |
开机自动登录(免手动点 Log in):
Tailscale 认证成功一次后,密钥会缓存在本地,重启后自动重连,无需重复登录。如果密钥过期(默认 180 天),需要重新认证。可在 Admin Console 中为设备禁用密钥过期:
- 访问 https://login.tailscale.com/admin/machines
- 点击目标设备 → Disable key expiry
7.2 Rocky Linux 端
安装时已执行 systemctl enable tailscaled,服务会开机自启。
验证自启状态:
1 | # 查看服务是否 enabled |
确保登录状态持久化:
tailscale up 登录一次后,认证状态会持久保存在 /var/lib/tailscale/ 中,重启后自动重连。
如需开机后自动以特定参数启动(如指定 exit node、advertise routes),创建 override 配置:
1 | # 查看当前启动参数 |
在编辑器中添加:
1 | [Service] |
保存后重载:
1 | sudo systemctl daemon-reload |
7.3 Samba 服务自启动(如果使用 Samba 方式)
1 | # 确认 smb 和 nmb 均为开机自启 |
7.4 SSH 服务自启动(如果使用 SFTP/SCP 方式)
1 | # 确认 sshd 为开机自启 |
7.5 开机自启验证清单
重启两台机器后,依次检查:
| 检查项 | Windows 命令 | Rocky Linux 命令 |
|---|---|---|
| Tailscale 服务运行 | Get-Service Tailscale |
systemctl status tailscaled |
| Tailscale 已连接 | tailscale status |
tailscale status |
| 互相可达 | ping <rocky-hostname> |
ping <windows-hostname> |
| Samba 运行(可选) | — | systemctl status smb |
| SSH 运行(可选) | — | systemctl status sshd |
8. 详细排障指南
8.1 Tailscale 连接问题
Q1: tailscale status 看不到对方设备
排查步骤:
1 | # 1. 确认本机 tailscaled 服务运行 |
- 确认两台机器登录的是同一个 Tailscale 账号。
- 登录 https://login.tailscale.com/admin/machines 查看设备是否在线。
- 如果设备显示 “key expired”,点击设备 → Reauthenticate,或在终端重新执行
tailscale up。
Q2: ping 不通对方
1 | # 1. 确认 Tailscale 接口存在且有 IP |
Q3: Tailscale 节点认证过期
1 | # 检查密钥过期时间 |
永久解决:在 Admin Console 中为设备禁用密钥过期(见 7.1 节)。
8.2 Taildrop 文件传输问题
Q4: 发送文件报错 “file transfer not enabled”
- 登录 https://login.tailscale.com/admin/acls 检查 ACL 策略。
- 默认策略已启用 Taildrop,如果有自定义 ACL,确保没有禁用。
Q5: 发送成功但对方收不到
Windows 端收不到:
1 | # 手动接收(在目标目录下执行) |
- 检查系统托盘 Tailscale 图标是否有通知气泡。
- 确认 Windows Defender 没有拦截文件。
Linux 端收不到:
1 | # 手动接收 |
Q6: 大文件传输中断
- Taildrop 不支持断点续传,中断后需重新发送。
- 大文件(> 1GB)建议使用 Samba 或 SCP 方式,更稳定。
- 传输前可先压缩,减少传输时间:
1 | # Linux 端压缩 |
8.3 Samba 共享问题
Q7: Windows 无法连接 Samba 共享
1 | # 1. 确认 Samba 服务运行 |
Windows 端排查:
1 | # 测试 SMB 端口连通性 |
Q8: Samba 能连但无法写入文件
1 | # 1. 检查 Linux 文件系统权限 |
8.4 SFTP/SCP 问题
Q9: SSH 连接被拒绝
1 | # 1. 确认 sshd 运行 |
Q10: SCP 传输速度异常慢
1 | # 1. 确认 Tailscale 是直连还是中继 |
8.5 Tailscale 网络性能问题
Q11: 传输速度慢(走 DERP 中继)
1 | # 1. 确认连接方式 |
常见原因和解决方案:
| 原因 | 解决方案 |
|---|---|
| 严格 NAT / 对称 NAT | 换用支持 Full Cone NAT 的路由器 |
| 防火墙阻止 UDP | 放行 UDP 41641 端口 |
| ISP 限制 UDP | 联系 ISP 或使用其他网络 |
| 设备刚加入网络 | 等待 1-2 分钟让直连握手完成 |
Q12: Tailscale 突然断开
1 | # 1. 查看 tailscaled 日志 |
8.6 日志收集(提交工单或社区求助时使用)
1 | # Rocky Linux 完整日志收集 |
Windows 端:
1 | # 收集日志 |
9. 安全建议
- ACL 最小权限:如果 Tailnet 中有多台设备,在 Admin Console 中配置 ACL 限制设备间访问权限。
- Samba 仅绑定 Tailscale 接口:在
smb.conf的[global]段添加:
1 | interfaces = tailscale0 |
- SSH 密钥认证:建议用密钥替代密码登录,提高安全性:
1 | # Windows 生成密钥 |
- 定期更新:保持两端 Tailscale 版本为最新。