|
## 省流量优化网络:定时切换 Cloudflare CNAME
**场景:** 拥有低流量VPS,想省流量。
**方案:** 使用Cloudflare定时切换CNAME,将不同时段的流量指向不同的VPS。
**示例:**
* 晚上 18:00 至凌晨 01:00,将 `tva.123456.xyz` 和 `tvb.1123456.xyz` 指向 `vps1.nice.com`
* 凌晨 01:00 至晚上 18:00,将 `tva.123456.xyz` 和 `tvb.1123456.xyz` 指向 `vps2.nice.com`
**脚本:**
```bash
#!/usr/bin/env bash
# Cloudflare API 凭证
CFKEY="6xxxxac0d你的CFKEYxxx4"
CFUSER="你的CF邮箱@gmail.com"
CFZONE_NAME="123456.xyz"
# 记录
RECORD1="tva.123456.xyz"
RECORD2="tvb.1123456.xyz"
# CNAME 值
CNAME_NIGHT="vps1.nice.com"
CNAME_DAY="vps2.nice.com"
# 获取 Cloudflare Zone ID
CFZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$CFZONE_NAME" -H "X-Auth-Email: $CFUSER" -H "X-Auth-Key: $CFKEY" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1)
# 获取当前时间
HOUR=$(date +'%H')
# 设置目标 CNAME
TARGET_CNAME=$(if [ "$HOUR" -ge 18 ] || [ "$HOUR" -lt 1 ]; then echo "$CNAME_NIGHT"; else echo "$CNAME_DAY"; fi)
# 更新 DNS 记录函数
update_cname_record() {
local RECORD_NAME=$1
local TARGET=$2
# 获取记录 ID
CFRECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$CFZONE_ID/dns_records?name=$RECORD_NAME" -H "X-Auth-Email: $CFUSER" -H "X-Auth-Key: $CFKEY" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1)
# 更新记录
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CFZONE_ID/dns_records/$CFRECORD_ID" -H "X-Auth-Email: $CFUSER" -H "X-Auth-Key: $CFKEY" -H "Content-Type: application/json" --data "{\"type\":\"CNAME\",\"name\":\"$RECORD_NAME\",\"content\":\"$TARGET\",\"ttl\":120}"
}
# 更新记录
update_cname_record "$RECORD1" "$TARGET_CNAME"
update_cname_record "$RECORD2" "$TARGET_CNAME"
echo "DNS records updated to $TARGET_CNAME for $RECORD1 and $RECORD2."
```
**提示:**
* 将脚本中的占位符替换为实际值。
* 脚本需要定时执行,例如每小时运行一次。
* 使用 `crontab` 或其他定时任务工具设置脚本运行时间。 |
|