我选择使用 caddy 来自动续期证书, 丢掉烦人的 acme.sh

安装 Caddy

Arch Linux

  1. # xcaddy 在 aur 源
  2. yay -Sy caddy xcaddy-bin go

复制代码

其他发行版

go 安装: https://go.dev/doc/install
Caddy 安装: https://caddyserver.com/docs/install
xCaddy安装: https://github.com/caddyserver/xcaddy

编译 Caddy

Caddy 默认的 Proxy 无法对回落的流量进行 SNI 分流

  1. # caddy 编译
  2. xcaddy build –with github.com/mastercactapus/caddy2-proxyprotocol
  3. # 可以先看看运行的是哪个caddy
  4. systemctl cat caddy
  5. # 替换原版 caddy
  6. mv caddy /usr/bin/caddy
  7. # 查看是否编译成功
  8. caddy list-modules
  9. # 结尾几行
  10. …….
  11.   Standard modules: 100
  12. caddy.listeners.proxy_protocol
  13.   Non-standard modules: 1
  14.   Unknown modules: 0

复制代码

配置 Caddy

Caddyfile 一般默认路径 /etc/caddy/Caddyfile

  1. {
  2.         servers :8080 {
  3.                 listener_wrappers {
  4.                         proxy_protocol {
  5.                                 timeout 2s
  6.                                 allow 0.0.0.0/0
  7.                         }
  8.                         tls
  9.                 }
  10.                 protocols h1 h2 h2c h3
  11.         }
  12. }
  13. :80 {
  14.     redir https://{host}{url}
  15. }
  16. import /etc/caddy/conf.d/*

复制代码

在 /etc/caddy/conf.d 中任意起一个文件

  1. # vim /etc/caddy/conf.d/example.com
  2. http://example.com:8080 {
  3.     reverse_proxy https://bing.com {
  4.         header_up Host {upstream_hostport}
  5.         transport http {
  6.             tls
  7.         }
  8.     }
  9. }
  10. example.com:8443 {
  11.     reverse_proxy https://bing.com {
  12.         header_up Host {upstream_hostport}
  13.         transport http {
  14.             tls
  15.         }
  16.     }
  17. }

复制代码

Caddy 启动前请确认 /etc/hosts 不为空

  1. 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  2. ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

复制代码

 

  1. # 启动 Caddy
  2. systemctl start caddy
  3. # 开机启动
  4. systemctl enable caddy

复制代码

查看 /var/lib/caddy/certificates 下是否有证书, 保存你证书的完整路径

  1. # 查看路径
  2. ls /var/lib/caddy/certificates
  3. # 例子
  4. /var/lib/caddy/certificates/acme-v02.api.letsencrypt.org-directory/example.com/example.com.crt
  5. /var/lib/caddy/certificates/acme-v02.api.letsencrypt.org-directory/example.com/example.com.key

复制代码

配置 Xray

Archlinux

  1. # 安装 Xray
  2. pacman -Sy xray

复制代码

其他发行版: https://github.com/XTLS/Xray-install

修改 systemd 配置

  1. # 查看路径
  2. systemctl cat xray
  3. # 修改配置
  4. vim /usr/lib/systemd/system/xray.service
  5. # 修改用户组
  6. [Service]
  7. User=xray
  8. # 修改后
  9. [Service]
  10. User=caddy
  11. # 重载 systemd
  12. systemctl daemon-reload

复制代码

修改 xray 配置 /etc/xray/config.json, 脚本安装用户路径 (状态: 待补充)

  1. {
  2.   “log”: {
  3.     “loglevel”: “debug”
  4.   },
  5.   “routing”: {
  6.     “domainStrategy”: “IPIfNonMatch”,
  7.     “rules”: [
  8.       {
  9.         “type”: “field”,
  10.         “domain”: [
  11.           “geosite:category-ads-all”
  12.         ],
  13.         “outboundTag”: “block”
  14.       },
  15.       {
  16.         “type”: “field”,
  17.         “domain”: [
  18.           “geosite:google”
  19.         ],
  20.         “outboundTag”: “direct”
  21.       },
  22.       {
  23.         “type”: “field”,
  24.         “ip”: [
  25.           “geoip:cn”
  26.         ],
  27.         “outboundTag”: “block”
  28.       }
  29.     ]
  30.   },
  31.   “inbounds”: [
  32.     {
  33.       “listen”: “0.0.0.0”,
  34.       “port”: 443,
  35.       “protocol”: “vless”,
  36.       “settings”: {
  37.         “clients”: [
  38.           {
  39.             “id”: “4ee9ae2b-fad5-4083-a036-b7e44bbc09f0”,
  40.             “flow”: “xtls-rprx-vision”
  41.           }
  42.         ],
  43.         “decryption”: “none”,
  44.         “fallbacks”: [
  45.           {
  46.             “dest”: “8080”,
  47.             “xver”: 1
  48.           }
  49.         ]
  50.       },
  51.       “streamSettings”: {
  52.         “network”: “tcp”,
  53.         “security”: “tls”,
  54.         “tlsSettings”: {
  55.           “rejectUnknownSni”: true,
  56.           “minVersion”: “1.3”,
  57.           “certificates”: [
  58.             {
  59.               “certificateFile”: “/var/lib/caddy/certificates/acme-v02.api.letsencrypt.org-directory/example.com/example.com.crt”,
  60.               “keyFile”: “/var/lib/caddy/certificates/acme-v02.api.letsencrypt.org-directory/example.com/example.com.key”
  61.             }
  62.           ]
  63.         }
  64.       },
  65.       “sniffing”: {
  66.         “enabled”: true,
  67.         “destOverride”: [
  68.           “http”,
  69.           “tls”
  70.         ]
  71.       }
  72.     }
  73.   ],
  74.   “outbounds”: [
  75.     {
  76.       “protocol”: “freedom”,
  77.       “tag”: “direct”
  78.     },
  79.     {
  80.       “protocol”: “blackhole”,
  81.       “tag”: “block”
  82.     }
  83.   ],
  84.   “policy”: {
  85.     “levels”: {
  86.       “0”: {
  87.         “handshake”: 2,
  88.         “connIdle”: 120
  89.       }
  90.     }
  91.   }
  92. }

复制代码

启动 Xray

  1. # 启动
  2. systemctl start xray
  3. # 开启基地
  4. systemctl enable xray

复制代码

参考资料
https://xtls.github.io/document/level-1/fallbacks-with-sni.html#caddy-%E9%85%8D%E7%BD%AE

原创文章, 如需转载请注明出处

Xray + xtls-rprx-vision + caddy 安装配置与部署初尝试

声明:本站所有文章或资源,均来自互联网分享。本站不参与制作或存储,内容仅用于互联网爱好者学习和研究,如不慎侵犯了您的权利,请及时联系站长处理删除。敬请谅解!