白夜瞭望

夢の中の夢
うつし世はゆめ 夜の夢こそまこと
  1. 首页
  2. Linux技术
  3. 正文

自建caddy2+Tailscale DERP中转节点

2022年3月11日 4208点热度 2人点赞 0条评论

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/[email protected]
# 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/[email protected]

# 如果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

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: caddy linux Tailscale windows 教程
最后更新:2022年3月18日

bai

文案为生的业余画师,偶尔客串程序员。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Copyright © 2022 yumenaka.net All Rights Reserved.

Theme Kratos Made By Seaton Jiang