docker-ddns完全指南:用Docker+Go+Bind9构建你的专属动态DNS服务
【免费下载链接】docker-ddnsEasy-to-deploy dynamic DNS with Docker, Go and Bind9项目地址: https://gitcode.com/gh_mirrors/do/docker-ddns
docker-ddns是一个基于Docker、Go和Bind9的动态DNS服务解决方案,让你轻松搭建专属动态DNS服务,实现从任何地方连接家中设备的需求。只需一个廉价VPS、一个域名和域名服务器访问权限,即可快速部署。
为什么选择docker-ddns?
动态DNS(DDNS)服务能帮助你在家庭网络IP地址变化时,依然通过固定域名访问家中设备。docker-ddns相比传统DDNS服务具有以下优势:
- 完全自主可控:无需依赖第三方服务,保护隐私安全
- 部署简单快速:基于Docker容器化部署,几分钟即可完成
- 兼容性强:支持大多数路由器的自定义DDNS设置,如Fritz!Box、D-Link等
- 轻量级高效:采用Go语言开发,资源占用低,性能优异
docker-ddns工作原理
docker-ddns的工作流程如下:
- 家中设备通过路由器连接互联网,路由器IP地址可能动态变化
- docker-ddns运行在VPS上,通过API接收IP地址更新请求
- 当IP地址变化时,路由器或客户端向docker-ddns发送更新请求
- docker-ddns更新Bind9 DNS服务器的记录
- 外部设备通过域名查询docker-ddns服务器,获取最新IP地址并建立连接
准备工作
在开始部署前,请确保你拥有以下条件:
- 一台运行Linux的VPS(推荐Ubuntu或Debian系统)
- 已安装Docker和Docker Compose
- 一个域名,并且可以修改其DNS记录
- 基本的Linux命令行操作能力
快速安装步骤
使用Docker Hub镜像(推荐)
这是最简单的安装方式,只需运行以下命令:
docker run -it -d \ -p 8080:8080 \ -p 53:53 \ -p 53:53/udp \ -e SHARED_SECRET=changeme \ -e ZONE=example.org \ -e RECORD_TTL=3600 \ --name=dyndns \ davd/docker-ddns:latest使用Docker Compose
如果需要持久化存储DNS配置,可以使用docker-compose.yml文件:
version: '3' services: ddns: image: davd/docker-ddns:latest restart: always environment: RECORD_TTL: 60 ZONE: example.org SHARED_SECRET: changeme ports: - "53:53" - "53:53/udp" - "8080:8080" volumes: - ./bind-data:/var/cache/bind然后运行:docker-compose up -d
从源码构建
如果你想自定义或贡献代码,可以从源码构建:
git clone https://gitcode.com/gh_mirrors/do/docker-ddns cd docker-ddns nano envfile # 修改环境变量 make deploy配置环境变量
docker-ddns通过环境变量进行配置,主要配置文件为envfile,包含以下关键参数:
SHARED_SECRET:用于API认证的共享密钥,必须修改为安全的随机字符串ZONE:你的域名,如example.orgRECORD_TTL:DNS记录的生存时间,单位为秒,默认为3600秒
API使用方法
docker-ddns提供了简单易用的REST API,几乎所有支持自定义DDNS的路由器都可以使用。
基本API
最基本的更新请求格式如下:
http://你的服务器地址:8080/update?secret=你的密钥&domain=子域名&addr=IP地址参数说明:
secret:在envfile中设置的SHARED_SECRETdomain:子域名,多个子域名用逗号分隔addr:要更新的IP地址(IPv4或IPv6)
DynDNS兼容API
为了兼容更多设备,docker-ddns还提供了DynDNS兼容的API,支持以下路径:
/nic/update/v2/update/v3/update
使用时,用户名可以是任意值,密码使用设置的SHARED_SECRET。
路由器配置示例
Ubiquiti路由器配置
set service dns dynamic interface eth0 service dyndns host-name <你的子域名> set service dns dynamic interface eth0 service dyndns login <任意用户名> set service dns dynamic interface eth0 service dyndns password <你的密钥> set service dns dynamic interface eth0 service dyndns protocol dyndns2 set service dns dynamic interface eth0 service dyndns server <你的服务器地址>D-Link路由器配置
在D-Link路由器的Web界面中:
- 选择"手动"DDNS设置
- 输入服务器地址(你的docker-ddns服务器IP或域名)
- 输入主机名(你想要的子域名)
- 输入用户名(任意值)
- 输入密码(你的SHARED_SECRET)
- 保存设置
域名DNS设置
要让docker-ddns正常工作,需要在你的域名提供商处进行如下DNS设置:
dyndns IN NS ns ns IN A <你的VPS IPv4地址> ns IN AAAA <可选,你的VPS IPv6地址>这样配置后,当你使用API更新"foo"子域名时,实际域名将是"foo.dyndns.你的域名"。
常见问题解决
端口冲突问题
如果启动容器时出现端口53冲突,可能是因为系统的systemd-resolved服务占用了该端口。解决方法:
- 编辑
/etc/systemd/resolved.conf - 添加
DNSStubListener=no - 重启服务:
sudo systemctl restart systemd-resolved.service
权限问题
如果使用持久化存储时出现权限错误,确保挂载目录有正确的权限:
chmod -R a+w /path/to/your/bind-data查看日志
要查看API请求日志,可以运行:
docker logs -f dyndns总结
通过docker-ddns,你可以快速搭建一个安全、可靠的动态DNS服务,摆脱对第三方DDNS服务的依赖。无论是远程访问家中的NAS、监控摄像头,还是搭建个人服务器,docker-ddns都能为你提供稳定的域名解析服务。
现在就开始部署你自己的docker-ddns服务,享受随时随地访问家中设备的便利吧!
【免费下载链接】docker-ddnsEasy-to-deploy dynamic DNS with Docker, Go and Bind9项目地址: https://gitcode.com/gh_mirrors/do/docker-ddns
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考