- 动态 CDN 管理 (DCDN) - 自动更新 CDN 源站配置,支持多家服务商,让动态 IPv6 实现稳定的 IPv4/IPv4 双栈访问
- 动态 DNS 管理 (DDNS) - 自动更新域名解析记录,让家庭宽带动态 IP 也能稳定访问(V2 版本规划中)
- 内网穿透管理 - 无公网 IP 也能从外网访问内网服务(V3 版本规划中)
- Webhook 通知 - 支持多种通知方式,实时推送 IP 变更和更新信息
- Web 管理界面 - 提供直观的 Web 管理界面,无需命令行操作
项目起源于一个实际需求:国内运营商分配的动态公网 IPv6 地址经常变化,无法直接支持 IPv4 访问。尝试使用 Cloudflare CDN 套壳后,发现国内访问速度慢且不稳定。在寻找国内 CDN 替代方案的过程中,D-NET 应运而生。
随着使用场景的扩展,新的问题出现了:如果只需要 DDNS 功能怎么办?如果只有 IPv4 私网地址需要内网穿透呢?市面上虽有 DDNS、FRP 等成熟方案,但都需要单独部署。于是 D-NET 规划朝着一体化集成方案的方向演进,目标是用一个轻量级工具解决所有动态网络管理需求。
- 多平台支持 - Linux、Windows、macOS、Docker 全平台支持
- 系统服务 - 支持作为系统服务运行,开机自启
- 自动更新 - 定时检测 IP 变化并自动更新 DNS 记录
- 配置管理 - 基于 YAML 的配置文件,简单易用
- 日志系统 - 完善的日志记录,便于问题排查
- 安全认证 - 内置用户认证系统,保护管理界面
- 仪表盘 - 实时监控系统状态
- DCDN 管理 - 统一管理多家 CDN 服务
- Webhook 配置 - 灵活的通知方式设置
- 系统设置 - 可视化配置管理
- 日志查看 - 在线查看运行日志
从 Releases 页面下载适合您系统的版本并解压。
Mac/Linux:
sudo ./dnet -s installWindows:
以管理员身份打开命令提示符(cmd),然后执行:
.\dnet.exe -s install打开浏览器访问 http://localhost:9877 进行初始化配置。
卸载服务:
Mac/Linux: sudo ./dnet -s uninstall
Windows: .\dnet.exe -s uninstall(以管理员身份运行)
重启服务:
Mac/Linux: sudo ./dnet -s restart
Windows: .\dnet.exe -s restart(以管理员身份运行)
安装服务时可以指定以下参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-l |
监听地址 | -l :9877 |
-f |
同步间隔时间(秒) | -f 600 |
-dcdnCacheTimes |
间隔 N 次与服务商比对 | -dcdnCacheTimes 10 |
-c |
自定义配置文件路径 | -c /path/to/config.yaml |
-noweb |
不启动 Web 服务 | -noweb |
-skipVerify |
跳过 HTTPS 证书验证 | -skipVerify |
-dns |
自定义 DNS 服务器 | -dns 8.8.8.8 |
-resetPassword |
重置密码 | -resetPassword newpass |
使用示例:
# 10 分钟同步一次,并指定配置文件路径
./dnet -s install -f 600 -c /Users/name/.dnet_config.yaml
# 每 10 秒检查 IP 变化,每 30 分钟(180 次)与服务商比对一次
# 实现即时响应且避免服务商限流
./dnet -s install -f 10 -dcdnCacheTimes 180
# 重置密码
./dnet -resetPassword 123456
./dnet -resetPassword 123456 -c /Users/name/.dnet_config.yaml# 拉取镜像
docker pull cxbdasheng/dnet:latest
# 运行容器(推荐方式)
docker run -d \
--name dnet \
-p 9877:9877 \
-v $(pwd)/config:/root \
--restart unless-stopped \
cxbdasheng/dnet:latest
# 访问 Web 界面
# 在浏览器中打开 http://localhost:9877如果 Docker Hub 访问不畅,可以使用 GitHub Container Registry:
docker pull ghcr.io/cxbdasheng/dnet:latest
docker run -d \
--name dnet \
--restart=always \
--net=host \
-v /opt/dnet:/root \
ghcr.io/cxbdasheng/dnet:latest使用 host 网络模式:
docker run -d \
--name dnet \
--restart=always \
--net=host \
-v /opt/dnet:/root \
cxbdasheng/dnet:latest自定义参数启动:
# 自定义监听地址和同步间隔
docker run -d \
--name dnet \
--restart=always \
--net=host \
-v /opt/dnet:/root \
cxbdasheng/dnet:latest \
-l :9877 -f 600重置密码:
docker exec dnet ./dnet -resetPassword 123456
docker restart dnet./dnet [选项]
选项:
-l string
监听地址(默认 ":9877")
-c string
配置文件路径(默认 "~/.dnet_config.yaml")
-f int
更新频率,单位秒(默认 300)
-s string
服务管理(install|uninstall|restart)
-dns string
自定义 DNS 服务器地址,例如:8.8.8.8
-noweb
禁用 Web 服务
-resetPassword string
重置密码
-dcdnCacheTimes int
DCDN 缓存次数(默认 5)D-NET 支持 Webhook 通知功能。当域名更新成功或失败时,会向配置的 URL 发送通知。
在 Webhook URL 或 RequestBody 中可以使用以下变量:
| 变量名 | 说明 | 示例值 |
|---|---|---|
#{serviceType} |
服务类型 | DCDN、DDNS |
#{serviceName} |
服务名称 | www.example.com |
#{serviceStatus} |
更新结果 | 未改变、失败、成功 |
- 如果 RequestBody 为空,则发送 GET 请求
- 如果 RequestBody 不为空,则发送 POST 请求
Server酱
直接在 URL 中使用变量:
https://sctapi.ftqq.com/[SendKey].send?title=DNET通知&desp=服务:#{serviceName},服务类型:#{serviceType},结果:#{serviceStatus}
钉钉群机器人
配置步骤:
- 钉钉电脑端 → 群设置 → 智能群助手 → 添加机器人 → 自定义
- 只勾选
自定义关键词,输入关键词(必须包含在 RequestBody 的 content 中),例如:DNET 通知 - 在 D-NET 的 Webhook URL 中输入钉钉提供的 Webhook 地址
- 在 RequestBody 中输入以下内容:
{
"msgtype": "markdown",
"markdown": {
"title": "DNET 通知",
"text": "您的服务:#{serviceName},服务类型:#{serviceType},结果:#{serviceStatus}"
}
}# 或使用 Make(如果可用)
make build
# 构建所有平台(使用 GoReleaser)
goreleaser build --snapshot --clean
# 运行测试
go test ./...
# 直接运行
go run main.go如果您想为 D-NET 贡献代码、报告问题或提出建议,请阅读我们的 贡献指南。
- DDNS 支持 - 完整的动态 DNS 解析功能,支持主流 DNS 服务商
- 多语言支持 - 国际化支持,提供中文、英文等多语言界面
- 更多 CDN 服务商 - 支持更多 CDN 平台
- 监控告警 - IP 变化监控和异常告警通知
欢迎通过 Issues 提出您的功能建议!
本项目采用 MIT 许可证
感谢以下开源项目为 D-NET 提供支持:
- kardianos/service - 跨平台系统服务管理
- go-yaml/yaml - YAML 配置文件解析
- GoReleaser - 自动化构建和发布工具