IPFire 自带动态 DNS 功能,可以在公网 IP 变化后自动更新域名解析记录。不过在默认支持的服务商列表中,并没有 Cloudflare、阿里云和腾讯云 DNSPod。对于国内网络环境,阿里云和腾讯云 DNSPod 使用非常普遍;而 Cloudflare 也是很多站点常用的 DNS 托管服务。
借助AI工具,我给 IPFire 的 ddns 组件增加了三个新的 DNS 服务商支持:
cloudflare.com
alidns.aliyuncs.com
dnspod.tencentcloudapi.com
直接在 IPFire 的 Web 页面中添加这些服务商,实现公网 IP 变化后的自动解析更新。
实现思路
IPFire 的动态 DNS 页面是:
/srv/web/ipfire/cgi-bin/ddns.cgi
但这个页面本身并不真正执行 DNS 更新。它主要负责:
- 展示支持的 DDNS 服务商列表
- 保存主机名、用户名、密码或 Token
- 生成
/var/ipfire/ddns/ddns.conf - 调用后端
/usr/bin/ddns进行更新
真正的动态 DNS 更新逻辑在 Python 包中:
/usr/lib/python3.10/site-packages/ddns/
主要涉及两个文件:
providers.py
system.py
其中:
providers.py定义各个 DDNS 服务商system.py负责发送 HTTP 请求
改动的核心:
- 给
system.py增加自定义 HTTP Header、PATCH、DELETE 等请求能力 - 在
providers.py中增加 Cloudflare、阿里云、腾讯云 DNSPod Provider - 在
lfs/ddns中加入构建补丁
安装方法
补丁包目录结构如下:
cloudflare patch/
├── install.sh
├── uninstall.sh
├── README.md
├── README.cn.md
├── ipfire-ddns-cloudflare.patch
└── src/patches/ddns-014-dns-provider-support.patch
把整个 cloudflare patch 文件夹复制到 IPFire 主机上,然后执行:
chmod +x install.sh uninstall.sh
./install.sh
安装脚本会自动完成:
- 备份当前
providers.py - 备份当前
system.py - 应用 DNS Provider 补丁
- 执行 Python 语法检查
- 验证新服务商是否已经被
/usr/bin/ddns识别
默认安装路径为:
/usr/lib/python3.10/site-packages/ddns
如果你的系统路径不同,也可以手动指定:
DDNS_DIR=/path/to/ddns ./install.sh
配置方法
Cloudflare
Cloudflare 使用 API Token 认证。
在 IPFire 页面中选择:
cloudflare.com
填写方式:
主机名:完整域名,例如 test.example.com
令牌:Cloudflare API Token
Cloudflare Token 需要对应 Zone 的 DNS 编辑权限。

阿里云
阿里云使用 AccessKey 认证。
在 IPFire 页面中选择:
alidns.aliyuncs.com
填写方式:
主机名:完整域名,例如 test.example.com
用户名:AccessKeyId
密码:AccessKeySecret
对应用户需要具备查询、新增、更新云解析 DNS 记录的权限。
腾讯云
腾讯云 DNSPod 使用 SecretId 和 SecretKey 认证。
在 IPFire 页面中选择:
dnspod.tencentcloudapi.com
填写方式:
主机名:完整域名,例如 test.example.com
用户名:SecretId
密码:SecretKey
对应 用户需要具备查询、创建、修改 DNSPod 记录的权限。

卸载方法

如果需要回退,执行:
./uninstall.sh
卸载脚本会优先恢复安装时生成的备份文件。如果找不到备份,则尝试反向应用补丁。
检查验证
安装后可以执行:
/usr/bin/ddns list-providers | grep -E 'cloudflare.com|alidns.aliyuncs.com|dnspod.tencentcloudapi.com'
正常情况下应该看到:
alidns.aliyuncs.com
cloudflare.com
dnspod.tencentcloudapi.com
Cloudflare 是 Token 认证服务商,还可以检查:
/usr/bin/ddns list-token-providers | grep cloudflare.com
问题排查
IPFire 的动态 DNS 页面会用颜色显示主机名是否同步:
- 绿色:解析结果与当前 RED IP 一致
- 红色:解析结果与当前 RED IP 不一致
需要注意的是,这个判断依赖 IPFire 本机 DNS 解析结果。如果你刚刚在 Cloudflare、阿里云或腾讯云创建了记录,而 IPFire 本机 DNS 之前缓存过 NXDOMAIN,页面可能会暂时显示红色。此时并不一定代表 DDNS 更新失败。可以用公共 DNS 验证:
dig @1.1.1.1 ipftest.example.com A
dig @8.8.8.8 ipftest.example.com A
如果公共 DNS 已经返回正确 IP,而 IPFire 页面仍显示红色,通常只是本机 DNS 缓存问题。等待缓存过期,或者重启/清理本机 DNS 缓存即可。
补丁提交
本次修改已经整理为标准补丁,并提交到 IPFire 开发邮件列表,希望能在后期版本集成。
