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中加入构建补丁
安装方法
通过添加社区存储库来进行安装,在终端环境中以 root 身份运行:
curl -fsSL https://opnwall.github.io/IPFire-repo/install-repo.sh | sh
更新仓库并安装插件:
ipfrepo update ipfrepo install ipfire-dyndns
常用命令
ipfrepo list # 列出插件 ipfrepo info <package> # 查看插件信息 ipfrepo install <package> # 安装插件 ipfrepo remove <package> # 移除插件 ipfrepo update # 更新仓库元数据 ipfrepo upgrade # 升级已安装插件
配置方法
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 开发邮件列表,希望能在后期版本集成。
