把本地 Windows 上的 MySQL 通过 Tailscale 提供给你自己的其他主机和同事主机使用,并保留一台云主机作为链路兜底。
这份文档收敛以下三类内容:
截至 2026-07-02,当前实际跑通的信息如下:
DESKTOP-9KO3IVK100.100.67.1090.0.0.0:3306ts-relay-01100.99.117.43124.221.105.128tail6e2c27.ts.net当前已经确认过:
DESKTOP-9KO3IVK 在线ts-relay-01 在线3306root@'%' 已存在,可用于你自己 tailnet 内部的临时管理连接远端主机
|
| 优先直连
v
本地数据库机
(Windows + MySQL + Tailscale)
^
| 直连失败时走 peer relay
|
云主机
(CentOS 7 + Tailscale relay)
说明:
推荐做法:
auth keyauth key,就执行 tailscale up,再人工点一次网页授权适用场景:
推荐做法:
不推荐直接用你的 auth key 把同事机器接入,除非你明确接受:
开始前先确认:
UDP 400001.86+建议:
在 Tailscale 后台 Access controls 中合并类似配置:
{
"groups": {
"group:db-users": [
"你的Tailscale登录邮箱",
"同事1邮箱",
"同事2邮箱",
"同事3邮箱"
]
},
"tagOwners": {
"tag:relay": ["你的Tailscale登录邮箱"]
},
"acls": [
{
"action": "accept",
"src": ["group:db-users"],
"dst": ["100.100.67.109:3306"]
}
]
}
说明:
group:db-users 是可访问数据库的用户组tag:relay 用于云主机 relay100.100.67.109建议:
one-off 或可复用 auth keyauth keyone-off key 当成长期文档常量以下步骤适用于 DESKTOP-9KO3IVK。
下载安装:
安装后登录当前 tailnet。
& "C:\Program Files\Tailscale\tailscale.exe" ip -4
当前实际值:
100.100.67.109
& "C:\Program Files\Tailscale\tailscale.exe" status
Get-CimInstance Win32_Service | Where-Object { $_.Name -eq "MySQL" } | Format-List Name,State,PathName
Get-NetTCPConnection -LocalPort 3306 -State Listen | Format-Table -AutoSize
当前预期:
Running3306 正在监听0.0.0.0:3306建议仅放行 Tailscale 网段:
New-NetFirewallRule -DisplayName "MySQL 3306 from Tailscale" `
-Direction Inbound -Action Allow -Protocol TCP `
-LocalPort 3306 -RemoteAddress 100.64.0.0/10
检查历史规则:
Get-NetFirewallRule | Where-Object { $_.DisplayName -match "3306|MySQL" }
当前事实:
root@'%' 已放开长期建议:
root 做业务连接示例:
CREATE USER 'ts_trading_u1'@'100.101.102.103' IDENTIFIED BY '请替换成强密码1';
GRANT SELECT ON trading_xuntou.* TO 'ts_trading_u1'@'100.101.102.103';
FLUSH PRIVILEGES;
以下步骤适用于 124.221.105.128。
放行:
UDP40000curl -fsSL https://tailscale.com/install.sh | sh
sudo systemctl enable --now tailscaled
tailscale version
systemctl status tailscaled --no-pager
sudo tailscale up \
--auth-key='请替换成新的有效auth-key' \
--hostname='ts-relay-01' \
--advertise-tags=tag:relay \
--ssh
sudo tailscale set --relay-server-port=40000
检查:
tailscale ip -4
tailscale status
ss -lunp | grep 40000
当前实际节点信息:
ts-relay-01100.99.117.43winget install --id Tailscale.Tailscale --exact --accept-source-agreements --accept-package-agreements
验证:
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts version
Get-Service Tailscale | Format-List Name,Status,StartType
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts up --auth-key='请替换成新的有效auth-key' --hostname='my-workstation'
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts up --hostname='my-workstation'
然后打开输出的授权链接,用你自己的 Tailscale 账号确认。
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts status
& $ts ip -4
& $ts ping 100.100.67.109
& $ts ping 100.99.117.43
Test-NetConnection 100.100.67.109 -Port 3306
auth key 直接把同事机器并进来$ts = 'C:\Program Files\Tailscale\tailscale.exe'
if (Test-Path $ts) {
& $ts version
& $ts status
} else {
winget install --id Tailscale.Tailscale --exact --accept-source-agreements --accept-package-agreements
}
加入 tailnet:
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts up --hostname='coworker-win-01'
如果输出授权链接,就打开浏览器让同事完成一次网页登录。
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts status
& $ts ip -4
& $ts ping 100.100.67.109
& $ts ping 100.99.117.43
Test-NetConnection 100.100.67.109 -Port 3306
curl -fsSL https://tailscale.com/install.sh | sh
sudo systemctl enable --now tailscaled
sudo tailscale up --auth-key='请替换成新的有效auth-key' --hostname='my-server-02'
tailscale status
tailscale ip -4
tailscale ping 100.100.67.109
tailscale ping 100.99.117.43
当前可直接使用:
100.100.67.1093306DESKTOP-9KO3IVK如果只是先验证管理连接:
rootroot@'%'建议:
Test-NetConnection 验证网络不要跳步骤。顺序固定:
tailscale statustailscale ping 100.100.67.109tailscale ping 100.99.117.43Test-NetConnection 100.100.67.109 -Port 3306Windows 验证命令:
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts status
& $ts ping 100.100.67.109
& $ts ping 100.99.117.43
Test-NetConnection 100.100.67.109 -Port 3306
Linux 验证命令:
tailscale status
tailscale ping 100.100.67.109
tailscale ping 100.99.117.43
nc -zv 100.100.67.109 3306
tailscale ping 不通先判定为网络层问题,不要先改 MySQL。
重点检查:
tailscale ping 通,但 3306 不通回到数据库机 DESKTOP-9KO3IVK 检查:
Get-NetTCPConnection -LocalPort 3306 -State Listen
netstat -ano | findstr :3306
重点确认:
0.0.0.0:33063306/TCP检查:
sudo tailscale set --relay-server-port=40000UDP 40000这是预期内的边界:
这次已经实际验证过一个高频故障:
tailscale ping 超时ts-relay-01 也一起超时这种情况优先怀疑客户端自己的 Tailscale 服务卡住。
Restart-Service Tailscale
然后立刻复测:
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts ping 100.100.67.109
& $ts ping 100.99.117.43
Test-NetConnection 100.100.67.109 -Port 3306
taskkill /F /IM tailscale-ipn.exe
taskkill /F /IM tailscale.exe
Start-Process 'C:\Program Files\Tailscale\tailscale-ipn.exe'
然后再测:
$ts = 'C:\Program Files\Tailscale\tailscale.exe'
& $ts status
& $ts ping 100.100.67.109
& $ts ping 100.99.117.43
Test-NetConnection 100.100.67.109 -Port 3306
请把当前机器加入我现有的 Tailscale tailnet,并验证到本地 MySQL 的网络连通性。
现有节点:
- DESKTOP-9KO3IVK / 100.100.67.109
- ts-relay-01 / 100.99.117.43
- MagicDNS 后缀:tail6e2c27.ts.net
要求:
1. 检查是否已安装 Tailscale
2. 未安装则安装
3. 如果我提供了 auth key,就用 auth key 加入
4. 如果我没提供 auth key,就执行 tailscale up 并把授权链接返回给我
5. 接入后执行:
- tailscale status
- tailscale ip -4
- tailscale ping 100.100.67.109
- tailscale ping 100.99.117.43
- Test-NetConnection 100.100.67.109 -Port 3306
6. 把最终主机名、Tailscale IP 和验证结果告诉我
请把当前这台 Windows 机器加入我现有的 Tailscale tailnet。
现有节点:
- DESKTOP-9KO3IVK / 100.100.67.109
- ts-relay-01 / 100.99.117.43
- MagicDNS 后缀:tail6e2c27.ts.net
这台机器属于我的同事,他会用自己的 Tailscale 账号登录。
要求:
1. 检查是否已安装 Tailscale
2. 未安装则安装
3. 执行 tailscale up,并把授权链接打开或返回
4. 等用户完成网页授权后,执行:
- tailscale status
- tailscale ip -4
- tailscale ping 100.100.67.109
- tailscale ping 100.99.117.43
- Test-NetConnection 100.100.67.109 -Port 3306
5. 把最终主机名、Tailscale IP 和验证结果告诉我
3306 直接暴露到公网rootauth key 当成长期固定值写死tailscale ping 都不通时就去改 MySQL如果后面这套方案会长期用,建议再做三件事:
ts-relay-01 增加简单监控,至少监控 tailscaled 和 UDP 40000