如果使用tailscale只是用来远程桌面的,推荐使用Rustdesk来做,可以看我最新的博客,隧道代理也是可以,只是需要手动指定端口映射,不能想tailscale。
Rustdesk自建服务器 一分钟实现远程办公自由 流畅高清免费都有了
前提准备:
具有公网ip的服务器
域名(SSL证书,阿里云申请可申请免费证书)
以下默认自定义端口为81,需要自定义可以自行修改
配置SSL证书
通过ftp等方式,将SSL证书添加到/usr/local/cert,用于后面derper运行配置使用,此路径可自定义,但后面运行derper命令需对应修改。
默认使用crt后缀的文件,即下载apche证书,将key、crt结尾的文件都移到该目录,名字统一改为域名,即你使用的服务器对应的域名。
证书需要注意一点,你需要用哪个域名就要申请哪个域名,如你要用abc.com就用abc.com去创建证书,你要用123.abc.com就要申请123.abc.com的ssl证书,然后提交的key和crt,crt结尾有两个,只需要带public结尾的即可,即公钥。
安装golang环境
获取安装包并安装,此处安装包版本仅为示例,如果后续按照derper的时候提示使用什么版本,则使用什么版本。
wget https://studygolang.com/dl/golang/go1.20.0.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz
配置环境变量
vi /etc/profile
在最开头添加
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
保存退出,并更新环境变量
source /etc/profile
测试是否安装成功
go version
安装derper
设置go的代理,如果不设置,可能因为网络问题执行下一行安装命令不成功
go env -w GOPROXY=https://goproxy.cn,direct
安装derper,此处如果go版本安装不满足要求,会提示使用什么版本,如果这里有提示,则相应重新安装go对应版本
go install tailscale.com/cmd/derper@main
# 检查结果是否有报错
derper -h
编写启动脚步
cd /usr/local/gopath/bin
vi runderper
脚本内容
#!/bin/sh
cd /usr/local/gopath/bin
nohup ./derper -hostname 你的域名 -c=derper.conf -a :81 -http-port -1 -certdir 你的SSL证书路径 -certmode manual -stun &
echo $! > app.pid
PS:在启动脚本增加 -verify-clients参数可以进行验证,但是需要在服务器端安装并登陆tailscale
nohup ./derper -hostname 你的域名 -c=derper.conf -a :81 -http-port -1 -certdir 你的SSL证书路径 -verify-clients -certmode manual -stun &
给文件执行权限
chmod +x runderper
编写停止脚本
vi stopderper.sh
脚本内容
#!/bin/sh
kill `cat /usr/local/gopath/bin/app.pid`
rm -rf /usr/local/gopath/bin/app.pid
给文件执行权限
chmod +x stopderper.sh
配置系统服务,并使用自定义脚本处理
cd /etc/systemd/system
vi derper.service
文件内容
Description=derper服务
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/gopath/bin/runderper
ExecStop=/usr/local/gopath/bin/stopderper.sh
[Install]
WantedBy=multi-user.target
服务相关命令
# 查看derper服务状态
systemctl status derper.service
# 启动derper服务
systemctl start derper.service
# 停止derper服务
systemctl stop derper.service
# 设置开机自启
systemctl enable derper.service
# 重载配置
systemctl daemon-reload
执行查看状态命令出现如下截图为正常,最后的error日志自测不影响远程桌面使用
Tailscale 配置
进入Access Controls页面进行配置
// Example/default ACLs for unrestricted connections.
{
// Declare static groups of users beyond those in the identity service.
"Groups": {
"group:example": [ "user1@example.com", "user2@example.com" ],
},
// Declare convenient hostname aliases to use in place of IP addresses.
"Hosts": {
"example-host-1": "100.100.100.100",
},
"ACLs": [
// Match absolutely everything. Comment out this section if you want
// to define specific ACL restrictions.
{ "Action": "accept", "Users": ["*"], "Ports": ["*:*"] },
],
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "myderp",
"Nodes": [
{
"Name": "1",
"RegionID": 900,
"HostName": "你的域名",
"DERPPort": 81
}
]
}
}
}
}
此时,需要在云服务器网络安全组里面进行端口放行,tcp 81, udp 3478,注意两个端口配置的类型,不要配错。
到此所有步骤测完了,可以在Machines页面随便点一台在线的设备查看是否正常连接上了,查看测出是否和你配置的RegionID一致
使用cmd ping一下端口
此时响应延迟3ms,比用官方的延迟(100ms到300ms不等)起码低了几十倍,此时可以正常进行远程桌面了,高清且超低延迟,就好像自己在电脑前一般。此时我写完这篇文档,突然发现我是在用tailscale 自建derp服务器 来打洞远程桌面写的,非常丝滑。