CAUTION本教程仅适用于于个人使用,请勿将其用于非法目的,请勿在生产环境中使用。
由此造成的一切后果由使用者自行承担
前言
该教程仅适用于同时使用 Xray Xhttp TLS Nginx/Caddy 的人,否则该教程大部分内容对你无用
使用Docker部署Xray
Docker Image
Docker run命令
docker run -d \ --name xray \ -v "/your-path:/etc/xray" \ -p "127.0.0.1:your-port:your-port" \ --restart unless-stopped \ teddysun/xray:latestDocker Compose
services: xray_xhttp: image:'teddysun/xray:latest' container_name:xray volumes : -/your-path:/etc/xray ports: -'127.0.0.1:your-port:your-port' restart:unless-stopped任选一种方式使用 Docker 部署 Xray ,注意命令与配置文件有部分需要修改
IMPORTANT如果你设置
Docker仅监听来自Localhost的特定端口,Xray配置文件中请务必不要设置监听Localhost
Xray服务端配置
{ "log": { "loglevel": "warning", "error": "/var/log/xray/error.log", "access": "/var/log/xray/access.log" }, "inbounds": [ { "port": , //VLESS+XHTTP 监听端口 需与Docker转发端口对应 "protocol": "vless", "settings": { "clients": [ { "id": "", //修改为自己的 UUID "email": "" //可随意填 } ], "decryption": "none" }, "streamSettings": { "network": "xhttp", "xhttpSettings": { "path": "" //修改为自己的路径 建议为纯英文与数字,可包含大小写,不包含特殊符号 } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls", "quic" ] } } ], "dns": { "servers": [ "https+local://1.1.1.1/dns-query", "localhost" ] }, "routing": { "domainStrategy": "IPIfNonMatch", "rules": [ { "type": "field", "ip": [ "geoip:private" ], "protocol": [ "bittorrent" ], "outboundTag": "block" }, { // 防止服务器直连国内 "type": "field", "ip": ["geoip:cn"], "outboundTag": "wireguard-1" }, { "type": "field", "domain":["geosite:cn","geosite:geolocation-cn"], "outboundTag":"wireguard-1" } ] }, "outbounds": [ { "tag":"direct", "protocol": "freedom", "settings": {} }, { "tag": "block", "protocol": "blackhole", "settings": {} }, { //如果不想使用Warp outbounds,请删除此出站配置,并移除routing页的对应路由项 "protocol": "wireguard", "settings": { "secretKey": "", "address": [""], "peers": [ { "publicKey": "", "endpoint": "e" } ], "reserved":[0, 0, 0] }, "tag": "wireguard-1" } ]}此配置为 Xray+Xhttp+TLS ,部分参数需自行修改
TLS(传输层安全)部分需在客户端配置
NOTEWarp outbounds配置请参照 Project X
WARNING传输层安全中的
Reality目前看来有非常明显的特征,不建议使用为什么这么说,假设你使用
Reality偷了 Apple 的证书,GFW 检测流量时发现带着 www.apple.com SNI 头的流量流入了非 Apple 的ASN,例如IT7 Network,这不是很奇怪吗,非常明显的特征
启动
你需要将此配置文件放置于 Docker 所映射的配置文件夹中,并重命名为 config.json
Nginx反向代理
配置
server { listen 443 ssl http2; //监听IPV4 443 listen [::]:443 ssl http2; //监听IPV6 443 server_name your-domain; //修改为你的域名
ssl_certificate your-cert-path; //修改为你的证书路径 绝对路径 ssl_certificate_key your-key-path; //修改为你的私钥路径 绝对路径
ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305;
location /your-path { //与Xray中的Xhttp路径对应 grpc_pass grpc://127.0.0.1:your-port; //与Docker所监听的实机端口对应 grpc_set_header Host $host; client_body_timeout 5m; grpc_read_timeout 300; grpc_send_timeout 5m; grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location / { //伪装站点 proxy_pass http://127.0.0.1:your-port; //与伪装站点所监听的端口对应 } }IMPORTANT本配置不支持
HTTP3与ECH,需要请自行查看文档添加TLS需要完整证书链的证书才能正常与
Xray服务端建立链接,如果使用类似 acme 的项目,请务必使用包含完整证书链的证书与密钥
Caddy反向代理
配置
your_domain {
tls { ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 }
handle /your-path/* { //与Xray中的Xhttp路径对应
reverse_proxy 127.0.0.1:your-port { //与Docker所监听的实机端口对应
transport http { versions h2c 2 } } }
handle /* {
reverse_proxy 127.0.0.1:your-port { #与你所使用的伪装站点所监听的端口对应,也可直接拒绝访问,但会有较为明显的特征 header_up Host {http.request.host} } }}IMPORTANT
Caddy会自行申请需要的 SSL证书该配置同时兼容
HTTP3与HTTP2
Caddy ECH支持
CAUTION该部分可能导致不可知的问题,请考虑好个人能力后再进行操作
Caddy 所发行的正式版不包含 ECH 支持,你需要使用内置了 DNS模块 的 Caddy 版本
使用Caddy官方命令添加模块
首先你需要确保你已经正确安装了 Caddy ,此处以 Cloudflare DNS 为例
执行以下命令
caddy add-package github.com/caddy-dns/cloudflare并在Caddyfile中添加如下配置
{ dns cloudflare your-key //此处key使用Cloudflare官方api令牌替换 ech example.com //任意一个域名均可,此为ECH公共名称,建议选择 cloudflare-ech.com}NOTE在
Cloudflare中申请api令牌,需包含区域DNS读取与编辑权限,建议将源限制为你的服务器IP以确保安全性
完成这一切之后,等待 Caddy 自动生成 ECH 密钥即可
使用Dig命令验证ECH有效性
dig test.example.com TYPE65 //将 test.example.com 替换为你在Caddyfile中所使用的公用名如输出包含类似如下内容则有效
ech=AEr+DQBGlwAgACBVSsnixVAfd/Ca9HP9JTf2O+B1kynOkZIwAMASDASDQABAAIASDASDADHw9lY2guZXhhbXBsZS5jb20AAA==NOTE如果需要重新/取消部署 ECH ,请删除 /$HOME/.local/share/caddy/ech/configs,并移除
Cloudflare中的 HTTPS记录$HOME就是你的用户目录
将ECH添加到Xray
将如下配置添加至 streamSettings
"tlsSettings"{ "echConfigList": "https://1.1.1.1/dns-query"}IMPORTANT仅需添加至客户端配置,服务端 ECH 由反向代理进行处理