Tailscale 是目前最受欢迎的异地组网工具之一。在复杂的网络环境中,当两台设备无法建立 P2P 直连时,Tailscale 会通过官方的 DERP 中继服务器转发流量。然而,官方节点往往由于物理距离导致延迟较高。如果你手头正好有一台闲置的 Windows Server,完全可以自己搭建一个专属的 DERP 节点,大幅提升网络体验。
官方并没有直接提供 Windows 版本的预编译程序,但这并不复杂。本文将带你通过编译源码并封装系统服务的方式,在 Windows Server 上完成部署。
准备工作
在开始之前,请确保你具备以下条件:
- 一台具有公网 IP 的 Windows Server。
- 一个专属域名,并已解析到该服务器的公网 IP(例如
derp.yourdomain.com)。 - 开放必要端口:在你的云服务商控制面板中,放行入站的 TCP 80(用于自动申请证书)、TCP 443(用于核心 HTTPS 中继流量)和 UDP 3478(用于 STUN 打洞服务)。
第一步:安装 Go 环境并编译 derper
Tailscale 的服务端程序是用 Go 语言编写的,我们需要先安装 Go 环境来进行编译。
- 前往 Go 官方网站下载适用于 Windows 的
.msi安装包并完成安装。 - 打开 PowerShell 或 CMD 终端,输入
go version,确认环境配置成功。 - 执行以下命令拉取并编译
derper源码:
go install tailscale.com/cmd/derper@main
- 编译成功后,在你的用户目录下(如
C:\Users\Administrator\go\bin)会生成derper.exe。 - 为了规范化管理,建议在 C 盘根目录新建一个
C:\DerpServer文件夹,并将derper.exe移动到这里。
第二步:测试运行与自动申请证书
derper 内置了自动申请 Let's Encrypt SSL 证书的功能,我们先在命令行测试运行它。
打开命令行,进入 C:\DerpServer 目录,执行以下命令(请将域名替换为你自己的域名):
derper.exe -hostname derp.yourdomain.com -c C:\DerpServer\derper.conf -a :443 -stun
注意: 首次运行时程序会占用 80 端口去申请证书,请确保你的服务器没有运行 IIS 等 Web 服务占用该端口。
观察控制台输出,如果没有报错,你可以打开浏览器访问 https://derp.yourdomain.com。如果看到纯文本的 "DERP" 字样,恭喜你,节点服务运行成功!测试完毕后,按 Ctrl + C 结束进程。
第三步:配置为 Windows 后台系统服务
命令窗口一旦关闭,服务就会停止。我们需要借助第三方工具 NSSM (Non-Sucking Service Manager) 将其注册为开机自启的后台服务。
- 下载 NSSM 并解压,使用管理员权限打开命令行,进入 NSSM 的
win64目录。 - 执行服务安装命令:
nssm install TailscaleDERP
- 在弹出的 GUI 窗口中填写以下信息:
- Path (程序路径):
C:\DerpServer\derper.exe - Arguments (启动参数):
-hostname derp.yourdomain.com -c C:\DerpServer\derper.conf -a :443 -stun
- 点击 "Install service" 确认安装。
- 回到命令行,启动服务:
nssm start TailscaleDERP
第四步:配置 Windows 高级防火墙
即便云服务商放行了端口,Windows 自带的高级防火墙也需要进行对应设置。
- 打开“高级安全 Windows Defender 防火墙”。
- 在“入站规则”中选择“新建规则”。
- 允许 TCP 端口
80和443的连接。 - 再次新建规则,允许 UDP 端口
3478的连接。
第五步:在 Tailscale 官方控制台接入节点
最后一步,告诉你的 Tailscale 网络去使用这个新节点。
登录 Tailscale Admin Console,进入 Access Controls 菜单,在 JSON 配置中添加 derpMap 模块:
{
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "win-derp",
"RegionName": "Windows Custom DERP",
"Nodes": [
{
"Name": "1",
"RegionID": 900,
"DERPPort": 443,
"STUNPort": 3478,
"IPv4": "填入你的服务器公网IP",
"HostName": "derp.yourdomain.com"
}
]
}
}
}
}
提示: 自定义节点的
RegionID必须大于等于 900,以免与官方节点冲突。如果你想彻底摒弃官方节点只用自己的,可以将OmitDefaultRegions设置为true。
保存配置后,在你的本地设备上打开终端输入 tailscale netcheck,如果能看到你的自定义节点名称及极低的延迟数据,说明搭建完美收官!
版权属于:soarli
本文链接:https://blog.soarli.top/archives/825.html
转载时须注明出处及本声明。