cloudflare
cloudflare copied to clipboard
大佬 建个cfip的域名项目吧
#大佬,建个dns或者hosts项目吧,能不能让cloudflare解析一个域名,比如alihk.domain.com,每天自动更新为中转ip,这样我们只需要把服务器地址改成alihk.domain.com就能使用中转ip 或者生成surge,小火箭能使用的模块,供移动端自动更新 #!name=CFIP #!desc=中专CFIP [Host] alihk.cfip = 47.242.201.101 alihk.cfip = 47.56.143.21 alihk.cfip = 47.244.136.244 alihk.cfip = 47.91.153.45 cc.cfip = 152.69.230.119 cc.cfip = 152.69.228.146 cc.cfip = 152.69.230.31 cc.cfip = 152.67.222.147
之前有考虑过,由于节点质量参差不齐,建议还是自己手动选择最适合自己的节点
大佬,甲骨文的都挺快的,如果按区分开比如用alihk.cfip.xxx cc.oracle.cfip.xxx更新不同区的中转ip,像smartdns或者QX SURGE这样的客户端会自动选择最快的节点连接,支持ens的dns比如233.5.5.5也是会根据你的线路给你最快的ip的
目前没有这方面计划,后续可能添加
我猜,你的问题是,如果使用工具找出了高速的Cloudflare的IP节点,如何更新到自己的v2ray这类节点上。
在这里我是这样做的
1.申请一个changeip.com的服务,免费搞几个DDNS域名。 2.你的节点地址就用这几个DDNS域名。 3.找出的Cloudflare高速IP就影射到这些域名上就行了,这方案我用了好几年了。 bat脚本例子: call curl "https://nic.changeip.com/nic/update?cmd=update&u=%DDNS_UID%&p=%DDNS_PWD%&hostname=%node_Current.DDNS_Name%&ip=!lastip!"
DDNS_UID = changeip.com user id DDNS_PWD = changeip.com password node_Current.DDNS_Name = ddns name lastip = Cloudflare IP address
自动筛选 IP,更新记录到 CloudFlare 依赖:jq curl grep
#!/bin/bash
# CloudFlare Account setting
CF_EMAIL="[email protected]"
CF_DOMAIN="cloudflare.example.org"
CF_TOKEN="....."
CF_ZONE="....."
# User config
IP_LIST="
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Alibaba%20Cloud%20-%20%E6%97%A5%E6%9C%AC%20%E4%B8%9C%E4%BA%AC.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Microsoft%20Azure%20-%20%E4%B8%AD%E5%9B%BD%20%E9%A6%99%E6%B8%AF.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Huawei%20Cloud%20-%20%E4%B8%AD%E5%9B%BD%20%E9%A6%99%E6%B8%AF.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Tencent%20Cloud%20-%20%E4%B8%AD%E5%9B%BD%20%E9%A6%99%E6%B8%AF.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/China%20Unicom%20-%20%E4%B8%AD%E5%9B%BD%20%E8%A5%BF%E5%AE%89.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/China%20Telecom%20-%20%E4%B8%AD%E5%9B%BD%20%E8%A5%BF%E5%AE%89.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/China%20Mobile%20-%20%E4%B8%AD%E5%9B%BD%20%E8%A5%BF%E5%AE%89.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Alibaba%20Cloud%20-%20%E4%B8%AD%E5%9B%BD%20%E5%8C%97%E4%BA%AC.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Alibaba%20Cloud%20-%20%E4%B8%AD%E5%9B%BD%20%E6%B7%B1%E5%9C%B3.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Alibaba%20Cloud%20-%20%E4%B8%AD%E5%9B%BD%20%E6%9D%AD%E5%B7%9E.txt
https://fastly.jsdelivr.net/gh/ip-scanner/cloudflare@daily/Alibaba%20Cloud%20-%20%E6%97%A5%E6%9C%AC%20%E4%B8%9C%E4%BA%AC.txt
"
IP_LATENCY="1.0"
# curl Arguments
CURL_ARGS="--silent --connect-timeout 3 --max-time 10 --retry 100"
# Download IP list
echo > /tmp/iplist.txt
echo "[INFO] Downloading IP list"
for URL in ${IP_LIST}; do
echo "[INFO] Fetching ${URL}"
while(true); do
/usr/bin/curl ${CURL_ARGS} ${URL} >> /tmp/iplist.txt
if [ "$?" == "0" ]; then
if [ ! -s "/tmp/iplist.txt" ]; then
echo "[ERR] Retry due to empty file"
contine
fi
cat /tmp/iplist.txt
echo >> /tmp/iplist.txt
break
else
echo "[ERR] Retry due to network failure"
continue
fi
done
done
echo "[INFO] IP list merged"
cat /tmp/iplist.txt | xargs echo -n | sed "s/ /\n/g" | tee /tmp/_iplist.txt
mv /tmp/_iplist.txt /tmp/iplist.txt; echo
# Filter available IP
echo > /tmp/available.txt
echo "[INFO] Filtering available IP"
for IP in $(cat '/tmp/iplist.txt' ); do
/usr/bin/curl --silent --resolve ":443:${IP}" \
--connect-timeout ${IP_LATENCY} --max-time ${IP_LATENCY} \
https://api.cloudflare.com/cdn-cgi/trace | grep -q "h=api.cloudflare.com"
if [ "x$?" == "x0" ]; then
echo ${IP} | tee -a /tmp/available.txt >/dev/null
echo "[INFO] Available node ${IP}"
fi
done
IP_COUNT=$(wc -w /tmp/available.txt | cut -d ' ' -f1)
if [ "${IP_COUNT}" == "0" ]; then
echo "[ERR] No available IP found"
exit 1
fi
# Get CloudFlare DNS List
echo "[INFO] Getting old DNS record"
DNS_ID=$(/usr/bin/curl ${CURL_ARGS} \
-H "Content-Type: application/json" \
-H "X-Auth-Email: ${CF_EMAIL}" \
-H "X-Auth-Key: ${CF_TOKEN}" \
-X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records?type=A&name=${CF_DOMAIN}&proxied=false&order=type&match=all&page=1&per_page=50" \
| jq -r '.result | .[] | [.id] | .[]')
# Delete all DNS record
echo "[INFO] Deleting old DNS record"
for RECORD in ${DNS_ID}; do
/usr/bin/curl ${CURL_ARGS} \
-H "Content-Type: application/json" \
-H "X-Auth-Email: ${CF_EMAIL}" \
-H "X-Auth-Key: ${CF_TOKEN}" \
-X DELETE "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records/${RECORD}" \
--output /dev/null
echo "[INFO] Deleted record ${RECORD}"
done
# Update DNS record
for IP in $(cat '/tmp/available.txt'); do
/usr/bin/curl ${CURL_ARGS} \
-H "Content-Type: application/json" \
-H "X-Auth-Email: ${CF_EMAIL}" \
-H "X-Auth-Key: ${CF_TOKEN}" \
-X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records" \
--data "{\"type\":\"A\",\"name\":\"${CF_DOMAIN}\",\"content\":\"${IP}\",\"ttl\":1,\"priority\":10,\"proxied\":false}" \
--output /dev/null
echo "[INFO] Updated record ${IP}"
done
IP_LIST=" https://cdn.staticaly.com/gh/ip-scanner/cloudflare/daily/Alibaba%20Cloud%20-%20%E4%B8%AD%E5%9B%BD%20%E9%A6%99%E6%B8%AF.txt https://cdn.staticaly.com/gh/ip-scanner/cloudflare/daily/Alibaba%20Cloud%20-%20%E6%96%B0%E5%8A%A0%E5%9D%A1.txt "
接下来的代码运行的时候,只能获取到 新加坡 的ip,香港的ip,获取不到,所以如果存放多个LIST,只有最后一个管用
已经有人做了类似的项目: transfer.ipcf.tk
,但部分地区效果不理想
自动筛选 IP,更新记录到 CloudFlare 依赖:jq curl grep
#!/bin/bash # CloudFlare Account settings CF_EMAIL="注册 CloudFlare 的 Email" CF_DOMAIN="用作优选 IP 的域名" CF_TOKEN="账户全局 API Key" CF_ZONE="域名对应的 Zone ID" # User config IP_LIST=" https://cdn.staticaly.com/gh/ip-scanner/cloudflare/daily/Alibaba%20Cloud%20-%20%E4%B8%AD%E5%9B%BD%20%E9%A6%99%E6%B8%AF.txt https://cdn.staticaly.com/gh/ip-scanner/cloudflare/daily/Alibaba%20Cloud%20-%20%E6%96%B0%E5%8A%A0%E5%9D%A1.txt " # IP 列表 IP_LATENCY="0.3" # 延迟 # curl Arguments CURL_ARGS="--silent --connect-timeout 10 --max-time 10 --retry 100" # Download IP list echo > /tmp/iplist.txt echo "[INFO] Downloading IP list" for URL in ${IP_LIST}; do echo "[INFO] Fetching ${URL}" while(true); do /usr/bin/curl ${CURL_ARGS} ${URL} --output /tmp/iplist.txt if [ "$?" == "0" ]; then if [ ! -s "/tmp/iplist.txt" ]; then echo "[ERR] Retry due to empty file" contine fi cat /tmp/iplist.txt echo >> /tmp/iplist.txt break else echo "[ERR] Retry due to network failure" continue fi done done echo "[INFO] IP list merged" cat /tmp/iplist.txt | xargs echo -n | sed "s/ /\n/g" | tee /tmp/_iplist.txt mv /tmp/_iplist.txt /tmp/iplist.txt; echo # Filter available IP echo > /tmp/available.txt echo "[INFO] Filtering available IP" for IP in $(cat '/tmp/iplist.txt' ); do /usr/bin/curl --silent --resolve "cloudflare.com:443:${IP}" \ --connect-timeout ${IP_LATENCY} --max-time ${IP_LATENCY} \ https://cloudflare.com/cdn-cgi/trace | grep -q "h=cloudflare.com" if [ "x$?" == "x0" ]; then echo ${IP} | tee -a /tmp/available.txt >/dev/null echo "[INFO] Available node ${IP}" fi done # Get CloudFlare DNS List echo "[INFO] Getting old DNS record" DNS_ID=$(/usr/bin/curl ${CURL_ARGS} \ -H "Content-Type: application/json" \ -H "X-Auth-Email: ${CF_EMAIL}" \ -H "X-Auth-Key: ${CF_TOKEN}" \ -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records?type=A&name=${CF_DOMAIN}&proxied=false&order=type&match=all&page=1&per_page=50" \ | jq -r '.result | .[] | [.id] | .[]') # Delete all DNS record echo "[INFO] Deleting old DNS record" for RECORD in ${DNS_ID}; do /usr/bin/curl ${CURL_ARGS} \ -H "Content-Type: application/json" \ -H "X-Auth-Email: ${CF_EMAIL}" \ -H "X-Auth-Key: ${CF_TOKEN}" \ -X DELETE "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records/${RECORD}" \ --output /dev/null echo "[INFO] Deleted record ${RECORD}" done # Update DNS record for IP in $(cat '/tmp/available.txt'); do /usr/bin/curl ${CURL_ARGS} \ -H "Content-Type: application/json" \ -H "X-Auth-Email: ${CF_EMAIL}" \ -H "X-Auth-Key: ${CF_TOKEN}" \ -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE}/dns_records" \ --data "{\"type\":\"A\",\"name\":\"${CF_DOMAIN}\",\"content\":\"${IP}\",\"ttl\":1,\"priority\":10,\"proxied\":false}" \ --output /dev/null echo "[INFO] Updated record ${IP}" done
hello,使用这个脚本,我这边发现只会删除旧的DNS记录,没有添加新的记录上去,不知道为啥。使用的token是全局API KEY。
没有获取到可用ip呗
这个效果还是不错,就是希望节点坚持久一些,脚本筛选的节点有时候也挂,我国内外分流用阿里,几乎全绿