cloudflare
优选ip
访问家用服务器
前言
由于一直有使用markdown写笔记的需求,但是每次处理图片的时候总是很头疼。突然,我瞥见了还在角落里面吃灰小主机,因此萌生了废物利用想法,搭建一个外网可访问的图床。图床直接使用lsky-pro
就可以,关键还是在外网访问上。
于是在网上看看有没有现成的方案,功夫不负有心人,找到了两种方法:内网穿透或者DDNS
。由于免费的内网穿透带宽小,所以使用DDNS
方案。
家里宽带只有动态ipv6
,80、443
端口也不能用。于是,先通过DDNS
将公网ipv6
地址放到cloudflare
的DNS
服务器上解析。但是ipv6
网络普又是一个问题,在ipv4 only
网络上无法访问服务器,所以要cloudflare
的CDN
实现ipv4
转ipv6
;加上端口转发,还可以不带端口访问服务器;最后再使用Cloudflare for SaaS
配置优选ip
提升下速度,似乎就圆满了。感谢cloudflare
大善人。下面开始实操。
环境说明
个人还是习惯使用Ubuntu
。然后我使用了一款服务器管理面板1panel
。使用图形化界面可以少敲一些命令行。1panel
里很多服务都是容器搭建的,兼容性不错。最后就是准备域名。如果要弄优选ip
,就需要两个域名,和一个palpay
账户。
实操
服务器管理面板1panel
由于下面很多操作都是在1panel
面板中操作,所以提前安装好1panel
。安装过程不复杂。直接去官网看就行在线安装 - 1Panel 文档
安装时它会自动帮我装上了docker
,还配置好了镜像仓库源。真是太细心了。
动态域名解析DDNS-go
Github
地址jeessy2/ddns-go
这里我没有去Github
上下载。而是在1panel
应用商店里下载。
直接安装就行,防火墙放行9876端口、使用http://$LOCAL_IP:9876
访问。
DNS
服务商选择Cloudflare
,如何将购买的域名托管至Cloudflare
参考域名DNS服务托管至Cloudflare,就是如此简单创建API-Key
方法参考dnsapi · acmesh-official/acme.sh Wiki
You can do this via your Cloudflare profile page, under the API Tokens section. When your create the token, under Permissions, select Zone > DNS > Edit, and under Zone Resources, only include the specific DNS zones within which you need to perform DNS challenges.
将得到的API-Key
填入Token
。
启用IPv6
,填入需要解析的域名。
完成后点击保存,会自动将DNS
记录同步到cloudflare
。
实现IPV6 Only
服务器可在IPv4
网络下访问
Cloudflare
提供了免费CDN
代理。同时CDN
支持IPv4
和IPv6
双栈流量的互相转换。我们可以利用这一特性实现此需求。
主要步骤:打开Cloudflare
的CDN
服务,再去Origin Rules
配置端口转发。
-
Cloudflare
设置打开每条
DNS
记录中的小云朵即可打开CDN
服务点击
规则 -> Origin Rules -> 创建规则
。参考下图填写。域名填写自己的。端口不能随便写(比如图中的8081就不行),Cloudflare
只支持部分端口转发。参考Network ports | Cloudflare Fundamentals docs自行修改。 -
本地服务器设置
设置反向代理。直接在
1panel
中配置,不用敲一行代码。进入面板,选择网站 -> 网站
根据提示安装``OpenResty`。注意安装
OpenResty
时配置的http/https
端口要和端口转发的一致。否则无法代理。同时防火墙放行对应端口。路由器也要放行该端口(最好由路由器拨号上网)安装完成后,配置反向代理。 配置如图
最后,如果建议开启
https
。开启方法也很简单,打开刚才建立的记录,选择HTTPS -> 启用HTTPS
然后导入自己的证书即可。如何申请证书见部署免费SSL证书-acme脚本 -
如果使用
https
,要在Cloudflare
中选择SSL/TLS
。设置SSL/TLS加密
设置为完全。 -
至此以及可以直接通过域名访问家庭内网服务器。如果有多个服务,可以添加多个二级域名,再重复上面步骤。
先添加二级域名的``DNS`解析,设置端口转发,可都转发至同一端口。最后在本地设置反向代理,代理到对应服务的端口。
设置优选IP
此步骤非必要。但是由于Cloudflare
服务器都在国外,访问速度比较慢,通过该方法可以一定程度上缓解。毕竟免费,又不是不能用😁
这里需要两个域名且
Cloudflare
绑定paypal
。注册
paypal
账户与Cloudflare
绑定paypal账户
的教程在B站一搜一大堆。比较简单,国内借记卡应该都可以。
原理
现在有两个域名maindomain.com
,backdomain.com
,在再创建一个二级域名cdn.backdomain.com
解析到优选好的ip
。整个过程简单的来说就是:
maindomain.com(CNAME记录) --> cdn.backdomain.com(DNS解析CDN服务器) --> 优选CDN服务器(由于设置了Saas,CDN发现了Header字段的Host值==maindomain.com,跳转到回源域名上) --> backdomain.com
最后访问到我们的服务器
设置Cloudflare for SaaS
-
添加回退源
可用上面配置好的域名作为回退源。也可用其他域名,但要求
backdomain.com
已经在正常解析,且开启CDN
。位置:
SSL/TLS -> 自定义主机
。输入域名backdomain.com
-
添加自定义主机名,位置:
SSL/TLS --> 自定义主机名 --> 添加自定义主机名
(图中域名多加了个点,懒得改了)输入主域名:
maindomian.com
,其他默认即可(图中域名多加了个点,懒得改了)完成后,找到添加刚添加的主机名,在证书状态栏会出现待验证,点击后出现下面界面。
将下面两个TXT记录分别添加至
miandomain.com
的``DNS记录中,证书名称填在名称处,证书验证
TXT`值填在名称处。完成后如图
回到添加回退源界面,点击刷新后,显示如图表示添加成功。
设置DNS
-
在
maindomain.com
主域名中添加CNAME
记录实现miandomain.com --> cdn.backdomain.com
。关闭代理,仅DNS
-
在
backdomain.com
回源域名中设置辅助域名,指向``cloudflare优选
ip`。既在DNS中添加如下记录。优选ip选择参考XIU2/CloudflareSpeedTest: 🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP ~
其他设置
-
反向代理,如果使用
https
,导入miandomian.com
的证书。在本地服务器上添加新的反向代理用于代理
maindomian.com
。方法通上点击跳转 -
检查
SSL/TLS
配置,https
服务一般使用配置为完全
自动更新优选ip
脚本
脚本参考CloudflareSpeedTest/script/cfst_ddns.sh at master · XIU2/CloudflareSpeedTest
使用说明自动更新 Cloudflare 中的域名解析记录为最快 IP(Windows/Linux 脚本+手动教程) · XIU2/CloudflareSpeedTest · Discussion #481
根据个人使用习惯,对脚本做了一些修改。使用时依次填入API-KEY, EMAIL, ZONE_ID, DOMAIN, RECORD_NAME
#!/bin/bashAPI_KEY="******************" # Global API-KEY 密钥
EMAIL="******************" # 帐户信息
ZONE_ID="******************" #区域ID
DOMAIN="******************" # 主域名信息 假如完镇域名为cdn.mydomain.com,则此处填mydomain.com
RECORD_NAME="***" # 修改为二级域名名称 假如完镇域名为cdn.mydomain.com,则此处填cdn
TYPE=A #DNS A记录
PROXIED=true #开启代理
TTL=1 #表示自动./CloudflareST -o "result_ddns.txt"# 判断结果文件是否存在,如果不存在说明结果为 0
[[ ! -e "result_ddns.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0CONTENT=$(sed -n "2,1p" result_ddns.txt | awk -F, '{print $1}')
if [[ -z "${CONTENT}" ]]; thenecho "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."exit 0
fiRECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?type=A&name=${RECORD_NAME}.${DOMAIN}" -H "X-Auth-Email: ${EMAIL}" -H "X-Auth-Key: ${API_KEY}" -H "Content-Type: application/json" | jq -r '.result[0].id')if [ -z "$RECORD_ID" ]; thenecho "Error: Unable to retrieve Record ID for the specified A record."exit 1
ficurl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}" \-H "X-Auth-Email: ${EMAIL}" \-H "X-Auth-Key: ${API_KEY}" \-H "Content-Type: application/json" \--data "{\"type\":\"${TYPE}\",\"name\":\"${RECORD_NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}"
终端执行
# 测速脚本下载压缩包
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.2.5/CloudflareST_linux_amd64.tar.gz
# 解压
tar -zxf CloudflareST_linux_amd64.tar.gz
# 赋予执行权限
chmod +x CloudflareST
# 新建脚本,将上面代码修改参数后复制进去。保存
vim auto_dns_update.sh
#赋予执行权限
chmod +x auto_dns_update.sh
# 执行
./auto_dns_update.sh
添加定时任务vim /etc/crontab
# 将下面一行代码加入到最后.晚上9点执行该脚本
0 21 * * * root cd /root/CloudflareST/ && ./auto_dns_update.sh