DDNS Updater 是一个用于动态测试优选 Cloudflare IP 更新的 Python 脚本,支持 IPv4 和 IPv6 地址的自动更新。该脚本使用华为云 DNS 服务,确保您的域名始终指向最佳的 Cloudflare IP 地址,提升访问速度和稳定性。
- 动态测试:定期测试并优选 Cloudflare 的最佳 IP 地址。
- IPv4 和 IPv6 支持:同时支持 IPv4 和 IPv6 地址的自动更新。
- 华为云 DNS 集成:使用华为云 DNS 服务进行域名解析更新。
- Docker 容器化:通过 Docker 容器化部署,简化安装和管理。
- 日志管理:日志文件自动映射到主机,便于监控和调试。
在开始之前,请确保您的系统满足以下要求:
- 操作系统:Linux(推荐使用 Ubuntu 或 CentOS)
- Docker:已安装并运行
- 安装指南:Docker 官方文档
- Docker Compose(可选):用于简化多容器管理
- 安装指南:Docker Compose 官方文档
- 华为云账号:拥有 DNS 服务的访问密钥(
ACCESS_KEY
和SECRET_KEY
)
首先,克隆本项目的仓库到您的本地机器:
git clone https://github.com/DR-lin-eng/cloudflare_best_ip_ddns_HWcloud.git
cd cloudflare_best_ip_ddns_HWcloud
如果您没有使用 Git,可以直接下载项目压缩包并解压到目标目录。
为了确保容器具有独立的 IPv4 和 IPv6 地址,创建一个支持 IPv6 的自定义桥接网络。
注意:在创建网络之前,请确保选择的子网不与现有 Docker 网络重叠。
docker network create \
--driver bridge \
--ipv6 \
--subnet 172.30.0.0/16 \
--subnet 2001:db8:2::/64 \
custom-bridge-net
常见错误:
-
子网重叠:如果出现
Pool overlaps with other one on this address space
错误,选择不同的子网范围。例如:docker network create \ --driver bridge \ --ipv6 \ --subnet 172.31.0.0/16 \ --subnet 2001:db8:3::/64 \ custom-bridge-net
验证网络创建:
docker network inspect custom-bridge-net
确保您的 Dockerfile
已正确配置并安装了必要的网络工具。
# 使用官方轻量级 Python 基础镜像
FROM python:3.12-slim
# 设置工作目录
WORKDIR /app
# 安装必要的网络工具和依赖项
RUN apt-get update && \
apt-get install -y --no-install-recommends iproute2 iputils-ping curl && \
rm -rf /var/lib/apt/lists/*
# 将 requirements.txt 复制到容器中
COPY requirements.txt .
# 安装 Python 依赖项
RUN pip install --no-cache-dir -r requirements.txt
# 将当前目录的内容复制到容器中
COPY . .
# 定义环境变量(将在运行容器时传递)
ENV ACCESS_KEY=""
ENV SECRET_KEY=""
# 定义容器启动时运行的命令
CMD ["python", "测活.py"]
在项目目录中运行以下命令构建 Docker 镜像:
docker build -t ddns_updater .
确保在主机的当前目录中存在 ddns_update.log
文件,用于存储容器内的日志。
touch ddns_update.log
使用自定义桥接网络运行容器,并映射日志文件,同时传递环境变量。
docker run -d \
--name ddns_updater \
--network custom-bridge-net \
-e ACCESS_KEY=你的_ACCESS_KEY_ \
-e SECRET_KEY=你的_SECRET_KEY_ \
-v "$(pwd)/ddns_update.log:/app/ddns_update.log" \
ddns_updater
说明:
- 请替换
你的_ACCESS_KEY_
和你的_SECRET_KEY_
为您的华为云密钥。
docker ps
应看到类似以下内容:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcdef123456 ddns_updater "python 测活.py" 10 seconds ago Up 8 seconds ddns_updater
使用以下命令查看容器在自定义网络中的 IPv4 和 IPv6 地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{.GlobalIPv6Address}}{{end}}' ddns_updater
示例输出:
172.30.0.2 2001:db8:2::2
为了简化部署和管理,您可以使用 Docker Compose。以下是详细的步骤和配置文件。
在项目目录中创建一个名为 docker-compose.yml
的文件,并添加以下内容:
version: '3.8'
services:
ddns_updater:
image: ddns_updater
container_name: ddns_updater
networks:
custom-bridge-net:
ipv6_address: 2001:db8:2::10 # 可选,手动指定容器的 IPv6 地址
environment:
- ACCESS_KEY=${ACCESS_KEY}
- SECRET_KEY=${SECRET_KEY}
volumes:
- ./ddns_update.log:/app/ddns_update.log
restart: unless-stopped
networks:
custom-bridge-net:
external: true
name: custom-bridge-net
为了管理环境变量,创建一个 .env
文件并添加以下内容:
ACCESS_KEY=你的_ACCESS_KEY_
SECRET_KEY=你的_SECRET_KEY_
安全性提示:绝对不要 将 .env
文件提交到版本控制系统(如 Git)。在 .gitignore
文件中添加 .env
以防止意外泄露。
在项目目录中运行以下命令启动容器:
docker-compose up -d
要实时查看容器的日志,可以使用以下命令:
docker-compose logs -f
日志文件 ddns_update.log
被映射到主机的当前目录,您可以通过以下方式查看日志:
cat ddns_update.log
或使用 tail
实时查看新增日志:
tail -f ddns_update.log
-
停止容器:
docker stop ddns_updater
-
移除容器:
docker rm ddns_updater
-
停止并移除容器:
docker-compose down
-
保护敏感信息:
- 不要 在
Dockerfile
中硬编码ACCESS_KEY
和SECRET_KEY
。 - 使用
.env
文件或 Docker Secrets 管理环境变量。 - 确保
.env
文件不被提交到版本控制系统。
- 不要 在
-
限制容器权限:
- 使用非 root 用户运行容器(可在
Dockerfile
中设置)。 - 仅挂载必要的卷,限制对主机文件系统的访问。
- 使用非 root 用户运行容器(可在
-
定期更新镜像和依赖:
- 使用最新的基础镜像和依赖库,以修复已知的安全漏洞。
-
防火墙配置:
- 确保主机防火墙仅允许必要的流量,尤其是在开放 IPv6 端口时。
本项目采用 MIT 许可证。
感谢您使用 DDNS Updater! 如果您有任何问题或建议,请随时联系项目维护者或提交 Issue。