cloudflare icon indicating copy to clipboard operation
cloudflare copied to clipboard

大佬 建个cfip的域名项目吧

Open AtoiX opened this issue 2 years ago • 7 comments

#大佬,建个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

AtoiX avatar Apr 04 '22 02:04 AtoiX

之前有考虑过,由于节点质量参差不齐,建议还是自己手动选择最适合自己的节点

ip-scanner avatar Apr 04 '22 03:04 ip-scanner

大佬,甲骨文的都挺快的,如果按区分开比如用alihk.cfip.xxx cc.oracle.cfip.xxx更新不同区的中转ip,像smartdns或者QX SURGE这样的客户端会自动选择最快的节点连接,支持ens的dns比如233.5.5.5也是会根据你的线路给你最快的ip的

AtoiX avatar Apr 05 '22 02:04 AtoiX

目前没有这方面计划,后续可能添加

ip-scanner avatar Apr 05 '22 07:04 ip-scanner

我猜,你的问题是,如果使用工具找出了高速的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

issacqin avatar May 08 '22 15:05 issacqin

自动筛选 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

bclswl0827 avatar May 26 '22 02:05 bclswl0827

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,只有最后一个管用

wo2429 avatar Aug 08 '22 06:08 wo2429

已经有人做了类似的项目: transfer.ipcf.tk ,但部分地区效果不理想

transfer ipcf tk_多地区多线路HTTP测速

gd1214b avatar Aug 21 '22 01:08 gd1214b

自动筛选 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

image

hello,使用这个脚本,我这边发现只会删除旧的DNS记录,没有添加新的记录上去,不知道为啥。使用的token是全局API KEY。

zazitufu avatar Oct 25 '22 08:10 zazitufu

没有获取到可用ip呗

wo2429 avatar Oct 25 '22 08:10 wo2429

image 这个效果还是不错,就是希望节点坚持久一些,脚本筛选的节点有时候也挂,我国内外分流用阿里,几乎全绿

wsy741963 avatar Nov 16 '22 05:11 wsy741963