标签归档:cloudflare

识别与 Cloudflare 的代理兼容的网络端口

概述

Cloudflare 默认代理发往下列 HTTP/HTTPS 端口的流量。

Cloudflare 支持的 HTTP 端口:

  • 80
  • 8080
  • 8880
  • 2052
  • 2082
  • 2086
  • 2095

Cloudflare 支持的 HTTPS 端口:

  • 443
  • 2053
  • 2083
  • 2087
  • 2096
  • 8443

如果您的域的流量要发送到上面列出的端口以外的其他端口,则可以:

通过 WAF 规则 ID 100015 针对 Pro、Business 和 Enterprise 域阻止除 80 和 443 以外的其他端口上的流量:”Block requests to all ports except 80 and 443″.

只有端口 80 和 443 可兼容以下服务:

Cloudflare Access 不支持 URL 中的端口号。  系统会从通过 Cloudflare Access 保护的 URL 请求中剥离端口号。


相关资源

https://support.cloudflare.com/hc/zh-cn/articles/200169156-%E8%AF%86%E5%88%AB%E4%B8%8E-Cloudflare-%E7%9A%84%E4%BB%A3%E7%90%86%E5%85%BC%E5%AE%B9%E7%9A%84%E7%BD%91%E7%BB%9C%E7%AB%AF%E5%8F%A3

利用CloudFlare设置Dynamic DNS(DDNS)

如果买了动态 VPS,IP 会经常改变。这时,就可以设置 DDNS 来获取动态 IP。比如,设置后,我可以用 ddns.zhaozhu.net 获取自己 VPS 的最新 IP。

获取 API

以 zhaozhuji.net 域名为例,在 CloudFlare 按提示添加域名 zhaozhuji.net 和对应的 A 记录 ddns.zhaozhuji.net,TTL 可设为 2 分钟。注意,DDNS 使用的域名不要开启 CloudFlare 的 CDN。

前往https://www.cloudflare.com/a/profile获取 API,把 API 一长串字符复制保存。

获取脚本

下载脚本 https://gist.github.com/larrybolt/6295160/raw/c634c48c001a411240fc78147949a6a32e1de370/cf-ddns.sh 到/usr/local/bin 目录:

curl https://gist.githubusercontent.com/larrybolt/6295160/raw > /usr/local/bin/cf-ddns.sh && chmod +x /usr/local/bin/cf-ddns.sh

配置

打开脚本进行配置:
vi /usr/local/bin/cf-ddns.sh

需要修改以下内容:


# 输入前面获取的 API
CFKEY=nvake8vn8ak8en8fjka88bnfe

# 输入 Zone name,如 zhaozhuji.net
CFZONE=zhaozhuji.net

# 输入域名的 id,如果不知道可先不填,运行一次脚本获取对应的 id 后再填入
CFID=

# 输入 CloudFlare 的账号邮箱,如 user@example.com
CFUSER=user@example.com

# 设置需要更新的 Hostname,如 ddns.zhaozhuji.net
CFHOST=ddns.zhaozhuji.net

# 设置 Cloudflare TTL,单位是秒,可填 120 到 86400 间的数值
CFTTL=120

输入bash /usr/local/bin/cf-ddns.sh运行脚本,会显示:

bash cf-ddns.sh 
No file, need IP
Missing DNS record ID
fetching from Cloudflare...
 => Incorrect zone, or zone doesn't contain the A-record light.acg.al!
listing all records for zone acg.al:
ID          RECORD        TYPE
133333332  zhaozhuji.net        "A"
133333333  ddns.zhaozhuji.net  "A"
133333334  www.zhaozhuji.net    "A"

这时,把 DDNS 使用的域名对应的 ID 填入刚才提到的 CFID 中,例如这里是CFID=133333333。保存退出后,再运行一遍 cf-ddns.sh,如果显示如下内容,则代表配置成功:

bash cf-ddns.sh
No file, need IP
Updating DNS to 9.9.9.9
Updated succesfuly!

crontab 定时运行

脚本配置成功后,需要让它定时运行,这里设置每 10 分钟运行一次 cf-ddns.sh 脚本。输入crontab -e,然后会有个 vi 编辑界面,在里面添加一行:

*/10 * * * *  /usr/local/bin/cf-ddns.sh >/dev/null 2>&1

crontab 的用法建议参考http://man.linuxde.net/crontab,涵盖了 crontab 服务状态的启动、重启、查看、简单配置等。另外也可以看看http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.htmlhttp://www.runoob.com/linux/linux-comm-crontab.html

参考

cloudflare-update-record.sh同样可设置 DDNS,配置也比较简单。

本文参考了PumpCloud 的教程

备注

有人提及换了域名再操作提示WAN IP Unchanged, to update anyway use flag -f true,这是因为脚本是检测到 IP 发生变化后,才会更新 CloudFlare 的 DNS。可以先手动在 CloudFlare 改 dns,下一次换 IP 时,脚本就会自动修改更新 CF 的 DNS(前提是设了 crontab 定时运行)。

如果有问题,欢迎留言。