2 min read

Cloudflare 关闭 IPv6 的两种姿势:控制台一键搞定 & API 自动化脚本

前言

Cloudflare 默认给所有接入的域名开启 IPv6(AAAA 记录)。部分场景下(源站仅 IPv4、合规要求、排障需要)我们想让边缘节点只返回 IPv4 地址。本文把「网页控制台」和「API 调用」两种做法一次性讲透,复制即可用。


一、控制台图形化操作(30 秒完成)

  1. 登录 dash.cloudflare.com → 选中目标域名
  2. 左侧菜单 Network(网络)
  3. 找到 IPv6 Compatibility 卡片,开关拨到 Off
  4. 等待 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 通道。复制脚本,喝杯咖啡的功夫就搞定。