CF家的CDN不生效的原因之一:三级域名。
前言
首先说下为什么会有这篇文章吧,实在是被这个问题坑的有点惨。
之前一段时间我的电脑没有开启ipv6,又恰好捡到一个hax的vps,有知道的小伙伴肯定了解了,hax的vps都是只有ipv6的。
有了vps不搭梯子,那不是白白浪费了吗?那我肯定不想浪费这个vps呀,但是又不想开启ipv6,毕竟ipv6兼容性确实也还没有特别好,所以我想到一个好办法:本机使用ipv4,通过CF的cdn转到vps。
于是,就有了这篇文章。
准备工作
- 一个CF的账号
有没有发现,咱们CF账号的出镜率非常高?
- 一个域名
配置DNS解析
在CF中添加AAAA记录(ipv6是AAAA记录,ipv4是A记录)。
如图:
咱们需要开启小黄云,不然ipv4环境无法访问该vps的节点。
搭建节点
这次咱们再次使用x-ui搭建节点。
安装x-ui
执行命令:
bash <(wget -qO- https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh)
看到下面这个界面时则说明已经安装成功了。
然后,咱们登陆x-ui面板添加一个节点。
此时你发现一个问题,你本机只有ipv4的网络,通过ip地址访问x-ui面板的话是肯定不通的,那只能通过域名访问了,本来这也是咱们想要的效果。
于是你输入域名+端口想要访问x-ui面板。
一段时间之后,xx还是xx,就像这个样子。
或者是这样:
你想了想,是不是DNS还没有生效。
于是你执行命令:
nslookup hax.aischen.eu.org
发现有正常返回ip结果,说明域名是已经生效了的。
你思考了一下原因,不一会儿你想起来,CF的CDN支持的端口是有限的,例如:CF家CDN反代支持端口
于是你在VPS中执行命令:
x-ui
并输入数字6
选择设置面板端口。
再输入2082
,回车。
按y
,再回车。
再次回车,按0,再回车,退出脚本(并不是很重要。)
此时就将x-ui面板的端口设置成了2082,于是你再次输入域名+2082
访问x-ui面板,就能正常访问x-ui面板了。
输入账号密码登陆成功之后,第一件事就是先升级下xray内核,我这里选择升级到1.8.3。
如果以上步骤有遇到问题,可以参考我之前的文章,一步步解决。x-ui搭建节点
添加节点
升级x-ui内核成功之后就可以添加一个节点了,我这里选择vmess+ws+tls的节点。
既然要开启tls,那当然得准备个证书了,还好,x-ui也自带了申请证书的功能。
再次输入命令:
x-ui
输入数字16
,回车。
再输入数字1
,回车。
输入自己的域名,再回车。我这里之前有个免费的eu.org域名,申请下来就是二级域名,但是本身已经使用过了,所以这次搭建节点就准备使用三级域名:hax.aischen.eu.org
再输入端口,端口需要选择CF支持http的端口,比如:80。
一段漫长的等待之后,证书终于申请下来了。
如果申请证书遇到问题,可以参考我之前的文章,一步步解决。申请域名证书
备注可以随意填写,我这里写的是vmess+ws+tls。
协议选择vmess。
端口别忘了选择CF的DNS支持的端口,比如我这里用的8443。
点击+
号添加一个用户。
网络选择ws。
路径也可以随意填写,你可以选择复制用户里的id或者其中某一段。
tls选择开启,并且配置好自己的证书内容。
点击添加,此时你就得到了一个vmess+ws的节点。
节点伪装
为了将节点流量伪装成正常的网址访问,我们需要再引入nginx,用于转发。根路径转发到其他的正常网址(bing.com或者什么网盘)。
我们添加的vmess+ws+tls的节点就转发到配置的8443端口。
全部配置如下:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
gzip on;
server {
listen 443 ssl;
server_name hax.aischen.eu.org; #你的域名
ssl_certificate /etc/x-ui/server.crt; #证书位置
ssl_certificate_key /etc/x-ui/server.key; #私钥位置
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
location /2905aa42 { #分流路径
proxy_redirect off;
proxy_pass http://127.0.0.1:8443; #Xray端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /Fpq8 { #xui路径
proxy_redirect off;
proxy_pass http://127.0.0.1:2080; #xui监听端口
proxy_http_version 1.1;
proxy_set_header Host $host;
}
}
server {
listen 80;
location /.well-known/ {
root /var/www/html;
}
location / {
rewrite ^(.*)$ https://$host$1 permanent;
}
}
}
配置完成,使用命令systemctl reload nginx
重启nginx。
此时再将节点复制,导入到梯子客户端,比如nekobox。
因为用了nginx做转发,所以客户端需要将8443修改为443。
一切都是这么的丝滑,以至于你完全没有发现任何问题。
问题
节点已经添加完成,于是你准备愉快玩耍,首先得测个速。
然后。???
为什么节点不通,明明一切都很顺利,没有什么问题才对。
左思右想,右思左想,还是怀疑可能节点有问题,于是你将节点导给手机端,手机端将域名替换为ip,直接通过ip的形式访问节点,神奇的事情发生了,节点没有问题,能够正常使用。
于是你开始google,各种测试,直到无意中发现这篇帖子
https://community.cloudflare.com/t/third-level-domain/63383
更具体点,可以直接看图:
翻译如下:
简单点说就是CF的ssl不支持三级域名。
然后你将节点换成二级域名,结果节点就可以正常访问了。
破案了,果然就是CF的问题。
解决
此时就有三个方案可以解决了。
一、直接设置二级域名即可,当然,目前可用的免费域名应该都是申请下来就是二级了,如果你比较富裕当然可以直接用,但是穷人家的家庭,一个域名当然是得好几个用途了。所以此时就可以使用方案二了。
二、不使用nginx的转发,将443端口调整回8443(亲测可用。可能是因为443端口才会用到cf的证书?具体原因未知,欢迎有明白的小伙伴告诉我。)
三、设置回源端口,请看之前的教程,直接跳到设置回源端口那节即可,这里就不再赘述了。搭建节点,并套用CDN
结语
其实本节内容在之前也有涉及到,总体来说就是因为CF自身的问题,导致我们搭建节点时出现了一个难以排查到的问题。
当然,也可能CF之后会修复这个问题,那到时候咱们倒是没有必要这么麻烦了。
好的,今天教程到这里就结束了,咱们下期再见~