IPFire 增加 Cloudflare、阿里云和腾讯云动态域名解析支持

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 请求

改动的核心:

  1. system.py 增加自定义 HTTP Header、PATCH、DELETE 等请求能力
  2. providers.py 中增加 Cloudflare、阿里云、腾讯云 DNSPod Provider
  3. 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 开发邮件列表,希望能在后期版本集成。

附件下载

IPFire-dyndns_patch

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇