从 0 搭建一个 AnyTLS 节点(Caddy 分流, 自动维护证书)

- 使用 Caddy 通配符证书, mholt/caddy-l4 sni 分流

- AnyTLS 不开 TLS, 靠 Caddy 自动维护证书

▎mise

官方文档

curl https://mise.run | sh

echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc

fish:
echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish

重启你的 shell 会话, 安装 go
mise use -g go


▎caddy

caddy 安装: 官方文档

xcaddy 安装:
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

mholt/caddy-l4(基于 SNI 转发) 安装:
补充一点 如果想用最新的特性 可以用 xcaddy build master 但是可能也有新鲜的 bug 🐶
xcaddy build latest --with github.com/mholt/caddy-l4 --with github.com/caddy-dns/cloudflare --output /usr/bin/caddy

mholt/caddy-l4 文档

caddy 配置(使用通配符证书, 需要配置 CLOUDFLARE_API_TOKEN )
/etc/caddy/Caddyfile
{
log {
output stdout
format console
level INFO
}

servers :443 {
listener_wrappers {
layer4 {
@anytls tls sni a.foo.com
route @anytls {
tls
proxy tcp/127.0.0.1:23556
}
}
tls
}
}
}

# this block makes Caddy obtain a wildcard TLS certificate
*.foo.com {
tls {
issuer acme {
email [email protected]
dir https://acme.zerossl.com/v2/DV90
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
issuer acme {
dir https://acme-v02.api.letsencrypt.org/directory
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
}
respond "Hello World!" 200
}


▎服务端(对 我就喜欢用 mihomo 服务端)

mihomo 官方文档中的 创建运行服务

mihomo 配置(paddingScheme 是 vibe 的. 可以自定义. 顺便示范下如何 优先使用 IPv4. 其他配置省略, 自己加吧)
proxies:
- name: "direct"
type: direct
udp: true
ip-version: ipv4-prefer
listeners:
- name: anytls-in
type: anytls
proxy: direct
port: 23556
listen: "127.0.0.1"
users:
root: "xYbpwdF9vIELWoLmdC"
certificate: ""
private-key: ""
allow-insecure: true
# https://github.com/anytls/anytls-go/blob/main/docs/protocol.md#cmdupdatepaddingscheme
padding-scheme: |-
stop=10
0=38-72
1=180-420,520-960
2=1050-1320,c,260-620,c,760-1240,c,260-680,c,900-1350
3=90-220,780-1180
4=700-1240,c,220-520,c,900-1360
5=160-420
6=760-1280
7=220-640
8=900-1360
9=180-480


2. 客户端

Sub-Store 内单行 JSON
{ "name": "节点名", "type": "anytls", "server": "服务器", "port": 443, "password": "xYbpwdF9vIELWoLmdC", "udp": true, "sni": "a.foo.com" } 

或 Surge 格式
节点名=anytls,服务器,443,password="xYbpwdF9vIELWoLmdC",sni=a.foo.com


▎相关阅读

Caddy 使用 Redis 共享 storage

相关: Sub-Store 自动设置服务端证书 SHA-256 指纹 自建节点证书相关说明

GOST SNI 分流

服务器合集 合集 群组 恰饭 联系推广

#AnyTLS #mihomo #节点 #服务器 #协议 #Caddy