Contents
1、 编译带自定义插件的Caddy
xcaddy与derper都需要golang环境,可参考golang官方文档安装:https://go.dev/doc/install。
caddy2 v2.5.0-beta.1才开始集成tailscale插件(v2.5.0以后的Caddy应该会自带)。无第三方插件需求的话,可以使用官方beta版Caddy。
# 安装好之后,查看 modules,有没有需要“tls.get_certificate.tailscale”。
caddy list-modules
使用xcaddy自己编译添加第三方插件,目前需要指定beta版:
#获取编译工具xcaddy:
go install github.com/caddyserver/xcaddy/cmd/xcaddy@master
# forwardproxy插件:
git clone -b naive https://github.com/klzgrad/forwardproxy
## 编译 Caddy2,并指定版本():
xcaddy build v2.5.0-beta.1 \
--with github.com/abiosoft/caddy-exec \
--with github.com/caddyserver/forwardproxy=$PWD/forwardproxy \
--with github.com/imgk/caddy-trojan \
--with github.com/mholt/caddy-webdav \
--with github.com/caddy-dns/cloudflare
2、编辑caddy配置文件
2.1 自己的域名
如果自己管理域名与DNS解析的话,caddy2可以如此配置:
附带一些caddy-trojan插件相关配置。
{
}
# 请将your-hostname.com替换为你的域名。
:443, your-hostname.com {
# TLS证书申请与管理交给derper
tls {
get_certificate tailscale
}
#反向代理,转发Tailscale页面
reverse_proxy / 127.0.0.1:8080 {
}
}
2.2 Caddy+tailscale免费二级域名解析,做内网HTTPS
1、Tailscale 后台启用MagicDNS。并配置全局DNS服务器(比如1.1.1.1或114.114.114.114)。
2、启用https功能,并选择二级域名,如*.random-abc.ts.net。
之后,每台机器的Tailscale内网地址,都会自动绑定到类似 *.random-abc.ts.net的域名。caddy可以自动为这些域名申请证书,配置如下:
machine01.random-abc.ts.net
root * /var/www
file_server
上面machine01.random-abc.ts.net,解析到了Tailscale的内网IP,虽然DNS记录本身是公开的,但外网访问不到。
3、测试、启动caddy服务器
#caddy2测试,ctrl+c 结束:
caddy run -config Caddyfile.conf
#caddy2后台运行(如果配置文件不以Caddyfile打头,则需要加 --adapter caddyfile):
caddy start -config Caddyfile.conf --adapter caddyfile
#caddy 重载
caddy reload -config Caddyfile.conf
因为申请TLS证书的任务交给了derper,所以caddy现在还不能正常提供https服务。
4、启动derper中继服务器,申请TLS证书
当然,你需要拥有一个域名,并设定好DNS解析,否则无法申请证书。
不推荐用国内机器。因为国内云服务器提供商审查 TLS handshake 里的 SNI 信息, 如果发现 SNI 域名未备案,会阻断 TLS 握手。
# 安装derper
go install tailscale.com/cmd/derper@main
# 如果derper可以独占443端口,且允许别人借用流量,其实可以不用caddy,用这一句就够了:
derper --hostname your-hostname.com
# 节点流量不多,不想公开,可以设置只允许已验证客户端(--verify-clients)
derper --hostname your-hostname.com --verify-clients
# 自定义derper端口8080(-a ":8080")
derper --hostname your-hostname.com -a ":8080" --verify-clients
5、节点服务器的ACL设置
进入 Tailscale 网页控制台,添加:
{
// Access Controls原来的部分
// ...
// ...
// 在原有部分下面添加下面这部分代码
"derpMap": {
// 禁用官方中继服务器
//"OmitDefaultRegions": true,
"Regions": { "900": {
"RegionID": 900,
"RegionCode": "myderp",
"Nodes": [{
"Name": "1",
"RegionID": 900,
"HostName": "your-hostname.com",
// 自定义端口
//"DERPPort": 8080
}]
}}}
}
6、使用systemd管理tailscale
# 不考虑自启,只是背景运行的话,用nohup就好:
nohup derper --hostname your-hostname.com -a ":8080" --verify-clients &
使用systemd管理tailscale(可选功能)
sudo nano /etc/systemd/system/derper.service
#编辑如下内容
[Unit]
Description=derper service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/youpath/derper derper --hostname your-hostname.com -a ":8080" --verify-clients
[Install]
WantedBy=multi-user.target
7、重启各个节点的 tailscale 服务
各个节点的ACL设置,需要重启 tailscale 服务才能生效,win/mac 的话可以直接退出 tailscale 程序再重新打开。
# linux 重启 tailscaled
sudo systemctl restart tailscaled
# 查看 relays 节点的列表和延迟,能看到自己安装的 derper 节点
sudo tailscale netcheck
# 查看当前 derper 和其他 derper 节点的连接状态
sudo tailscale status
ps:Linux内核更新以后,可能提示版本不一致,重新启动系统才能使用tailscale。
8、使用taildrop传送文件
传送文件目前是一个测试功能,需要在 Tailscale 网页控制台打开此功能。
Windows默认接收文件到:
C:\Users(username)\Desktop
linux默认接收文件到:
/var/lib/tailscale/files/用户名-uid-50620307141751454
MacOS默认接收文件到:
~/Downloads
将接收到的文件剪切到当前文件夹:
sudo tailscale file get .
除此之外,tailscale还有服务发现与分享、自定义DNS与内网主机名等功能,总之挺方便的。
参考资料
Tailscale自建DERP中转
caddytls: Support custom GetCertificate modules (like Tailscale)
Custom DERP Servers
Use Caddy to manage Tailscale HTTPS certificates
Tailscale 的一些使用心得
HTTPS in your VPN: Caddy now uses TLS certificates from Tailscale
文章评论