Cloudflare 关闭 IPv6 的两种姿势:控制台一键搞定 & API 自动化脚本
前言
Cloudflare 默认给所有接入的域名开启 IPv6(AAAA 记录)。部分场景下(源站仅 IPv4、合规要求、排障需要)我们想让边缘节点只返回 IPv4 地址。本文把「网页控制台」和「API 调用」两种做法一次性讲透,复制即可用。
一、控制台图形化操作(30 秒完成)
- 登录 dash.cloudflare.com → 选中目标域名
- 左侧菜单 Network(网络)
- 找到 IPv6 Compatibility 卡片,开关拨到 Off
- 等待 1–2 分钟生效
验证
dig AAAA 你的域名 @1.1.1.1
# 无 AAAA 记录返回即成功
二、API 自动化(curl / 脚本 / Terraform 均适用)
1. 准备参数
变量 | 获取位置 |
---|---|
ZONE_ID | 域名 Overview 页面右侧「API」栏 |
API Token | Profile → API Tokens → Create Token 权限:Zone → Zone Settings → Edit,作用域选对应站点 |
2. 最简 curl(Token 版)
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/settings/ipv6" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{"value":"off"}'
返回片段
{"result":{"id":"ipv6","value":"off","modified_on":"2024-05-18T12:34:56Z"},...}
3. 一键 Bash 脚本(带校验)
#!/usr/bin/env bash
set -e
ZONE_ID="1234567890abcdef1234567890abcdef"
API_TOKEN="你的Token"
resp=$(curl -sX PATCH \
"https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/settings/ipv6" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"value":"off"}')
# 判断结果
if echo "$resp" | jq -e '.success' > /dev/null; then
echo "IPv6 已关闭"
else
echo "失败: $resp"
fi
4. Terraform 资源片段(基础设施即代码)
resource "cloudflare_zone_settings_override" "main" {
zone_id = var.zone_id
settings {
ipv6 = "off"
}
}
三、常见疑问 FAQ
问题 | 解答 |
---|---|
关闭 IPv6 后,源站 IPv6 还能用吗? | 可以,只是 Cloudflare 边缘不再对外提供 AAAA 记录。 |
会影响 SEO 吗? | 搜索引擎同时支持 IPv4/IPv6,仅返回 IPv4 不会降权。 |
多久生效? | 全球边缘 1–3 分钟;DNS TTL 若较大,旧 AAAA 会缓存到 TTL 到期。 |
如何重新开启? | 控制台拨回 On,或 API 把 "value" 设成 "on" 即可。 |
四、结语
30 秒可视化操作适合一次性变更;API/Terraform 适合批量、自动化、GitOps 场景。两种办法任选其一,都能让 Cloudflare 停止返回 IPv6 地址,强制所有访客走 IPv4 通道。复制脚本,喝杯咖啡的功夫就搞定。