#前言
最近北方的电信连接博客服务器的速度很慢,上午速度也只有 500 - 700 Kbps 左右。我打算套一下 CDN 试试。都说 Cloudflare 的 CDN 是减速器,可是只有 500 Kbps 的网络应该不能更慢了吧。
套了 CDN 的网站加载起来很奇怪,给人一种莫名的不流畅,链接点了没有反应,没有进度条,过了一会突然就跳过去了……
其实,我是想让代理的速度快一些,现在看个 360p 视频都卡。
目前 Cloudflare 免费用户可以中转 Websocket 流量,所以要把配置换到 ws。xray 已经三个半月没有更新了,这篇配置既可以用 xray 也可以用 v2ray。
#准备
需要带有 dns.providers.cloudflare
模块的 Caddy,详细情况看 另一篇日记。
#两种反代 ws 方式
一种是 Caddy/Nginx 反代,一种是 xray 反代。
#Caddy/Nginx 等反代
优点:
-
Caddy 监听 80,443端口,这是一个完整的现代网站,只有特定 url 的流量会被转发到 v2ray 。
-
tls 完全由 Caddy 处理,不需要 xray 参与。
-
服务器对外可以只暴露 443 端口,反代端口由 Caddy 转发,不需要对外开放。
缺点:
- 增加调试的难度,连接出现问题要查看两个程序的日志。
#xray 反代
优点:
- 降低整个代理系统的耦合,甚至可以没有 Caddy/Nginx 等。
缺点:
- 如果搭配 Cloudflare 的 CDN,可选端口有限,Cloudflare 只支持少数几个端口转发[1]。
#配置
本文介绍 Caddy 反代 ws 的配置,用 xray 反代的样例配置在样例中已经存在。
#服务器 xray 配置:
{
"log": {
"loglevel": "error"
},
"inbounds": [
{
"port": 12345, // 与 Caddy 配置中的端口相同
"listen": "127.0.0.1", // 不需要对外暴露
"protocol": "vless",
"settings": {
"clients": [
{
"id": "xxxx...xxxx",
"level": 0,
"email": "someone@example.com"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/echo" // 与 Caddy 配置中的路径相同
}
}
}
],
"outbounds": [
{
"protocol": "freedom"
}
]
}
#服务器 Caddy2 配置:
your.domain.com {
root * /home/local_user/site_dir
file_server
log {
output file /home/local_user/log/access.log
}
tls {
dns cloudflare 3jd7w_Awe5ybpqG6zxXr6nRT&ywQyR_EfQtKoRe(你的API token)
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
curves x25519
}
@mywebsocket {
path /echo
header Connection *Upgrade*
header Upgrade websocket
}
reverse_proxy @mywebsocket localhost:12345
}
dns cloudflare xxx...xxx(你的API token)
通过 DNS challenge 申请证书。
反代部分的 mywebsocket
是一个 named matcher
,详细配置可以去查看 caddy 文档 matchers 。
注意 caddy 的执行用户以及权限,确保日志文件正常创建。
这时,你已经可以通过域名或 ip,以 websocket + tls 直连方式,使用代理了。
#本地 xray 配置
{
"log": {
"loglevel": "error"
},
"inbounds": [
{
"port": 10800,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "your.domain.com", // 这里填你的 ip 地址也可以
"port": 443,
"users": [
{
"id": "xxxx...xxxx",
"encryption": "none",
"level": 0
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "your.domain.com"
},
"wsSettings": {
"path": "/echo"
}
}
}
]
}
#本地 AnXray 配置截图
wss 方式与以前介绍的 tcp + xtls 方式,网速接近,都在 500 - 700 Kbps,接下来套上 CDN 试试。
#Cloudflare CDN 配置
为了代理的 CDN 设置与正常网站用 CDN 加速的设置完全相同,不需要额外设置任何东西,没有workers那些。
Caddy 搭配 Cloudflare 使用有 TLS 证书问题要处理,详细步骤看 CDN 加速网站,Caddy 与 Cloudflare 搭配使用,配置 TLS。
防火墙要增加一条规则:允许中国。有的博客上说如果不这样设置,部分连接会被阻断。虽然我没有遇到过,但还是设置了。
等几分钟 DNS 记录更新,期间可以使用 nslookup 或者 ping 等手段查看 DNS 是否更新。Windows 下可能要清除 DNS 缓存? 我不常用 Windows,但是在 Windows 下遇到过类似问题。
等到 DNS 记录更新,如果上面的本地配置中你用了域名信息,那么现在再连接,就已经使用了 CDN 中转了。
#后记
使用 Cloudflare CDN 中转,延迟大了一些,在我这里(北方的电信)的确有加速效果。相同的 xray 配置,相近的时间,多次交替测速,直连是 500 - 700 Kbps; CDN 中转,能跑到 30 - 60 Mbps ,最高能到 90 Mbps。
用 traceroute 查看路由,发现前半程都是走 AS4134 ( 163 骨干网)从北京出口直连洛杉矶。到了洛杉矶电信后直接能进 Cloudflare 机房,看来 Cloudflare 接入了洛杉矶电信,而直连是走 AS64050 BGP 转到 AS 35916 ,服务器所在的 MC 机房。
那么问题出现了。到洛杉矶都是一样的线路,却跑出了这么大的差距,是 MC 机房到电信的线路太烂,还是电信预留给 Cloudflare 一定的带宽呢?
7.23 更新测速
测试了几天,同一时间段的速度并不稳定,但是基本都在 50 Mbps 以上。延迟令人难受。
走 CDN 能到 100 Mbps, 真是奇怪。直连还是 700 Kbps。