kenaito-dns/README.md

209 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# kenaito-dns
## 背景
Bind9不能直接支持API的方式添加解析记录 通过脚本修改Bind服务器配置这种事情实在是太冒险了而且没有发现有开源的、性能嘎嘎好的DNS服务器项目。
## 简介
一个轻量级 DNS 服务器让变更解析记录简单、优雅为了纯血自研devops平台而生。
## 环境依赖
- gcc
- go version >= 1.20
## 项目结构
- constant 常量
- controller api接口
- core dns解析
- dao 数据库交互
- domain 各种领域模型
- util 工具函数
## 项目耗时
``
more than 7 hours
``
## 主要特性
- 纳秒级、毫秒级( <= 5 )响应时间
- 支持API变更解析记录
- 支持解析记录回滚
- 支持A、AAAA、MX、TXT、CNAME记录解析
## 待办清单
- 支持回滚 2024-11-08 [ok]
- 添加缓存 2024-11-09 [ok]
- 新增Web控制台 2024-11-11 [ok]
- 支持一键启/停用 2024-11-11 [ok]
- 支持一键回滚 2024-11-11 [ok]
## 运行配置
#### Go代理地址配置
[去看看](https://blog.odboy.cn/go%E5%85%A8%E5%B1%80%E9%85%8D%E7%BD%AE%E5%9B%BD%E5%86%85%E6%BA%90-by-odboy/)
#### window安装gcc(记得配置环境变量哦, 记得重启电脑哦)
- [去看看](https://github.com/niXman/mingw-builds-binaries/releases)
- [去下载](https://github.com/niXman/mingw-builds-binaries/releases/download/14.2.0-rt_v12-rev0/x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev0.7z)
- [国内下载](https://oss.odboy.cn/blog/files/windows-gcc/x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev0.7z)
#### window验证gcc
```shell
gcc -v
```
#### 编译
- GOOS代表程序构建环境的目标操作系统其值可以是liunxwindowsfreebsddarwin
- GORACH代表程序构建环境的目标计算架构其值可以是386amd64或arm
```text
首先,配置代理,并在项目根目录执行 go mod tidy 安装依赖
```
```shell
# Windows
set GOOS=windows
set GOARCH=amd64
set CGO_ENABLED=0
go build -o ./bin/kenaito-dns_windows_amd64 main.go
```
```shell
# Linux
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
go build -o ./bin/kenaito-dns_linux_amd64 main.go
```
```shell
# Mac
set GOOS=darwin
set GOARCH=amd64
set CGO_ENABLED=0
go build -o ./bin/kenaito-dns_darwin_amd64 main.go
```
#### 运行
```shell
# 例子:在 Mac 平台上
# 将编译产出的 kenaito-dns_darwin_amd64 与 dns.sqlite3 文件放在同一目录下, 执行以下命令运行即可
./kenaito-dns_darwin_amd64
```
![jietu1](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/jietu1.png)
#### 测试
```text
DNS服务所在的ip地址为 192.168.43.130
所需工具brew install watch
测试命令watch -n 2 nslookup demo2024.odboy.cn 192.168.43.130
```
- 新增A解析记录 [演示视频](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/AddRecord_WM.mp4)
- 删除A解析记录 [演示视频](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/RemoveRecord_WM.mp4)
- 修改A解析记录 [演示视频](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/ModifyRecord_WM.mp4)
- 回滚解析记录 [演示视频](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/RollbackRecord_WM.mp4)
## 控制台预览
- 新增解析记录
![addrecord1](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/add_record_func.png)
![addrecord2](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/add_record_func2.png)
- 版本回滚
![rollback1](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/rollback_func.png)
![rollback2](https://oss.odboy.cn/blog/files/onlinedoc/kenaito-dns/rollback_func2.png)
## k8s集群中使用
```shell
# 使用的是CoreDNS并且配置上游DNS服务器
kubectl edit configmap coredns -n kube-system
# ---------------------------------------------------
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health
lameduck 5s
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream 192.168.1.103
fallthrough in-addr.arpa ip6.arpa cluster.local io.local
ttl 30
}
prometheus :9153
cache 30
loop
reload
loadbalance
}
kind: ConfigMap
# ---------------------------------------------------
# 逐个重启 coredns pod
kubectl get pod -A|grep coredns|awk '{print $2}'|xargs -I{} kubectl delete pod {} -n kube-system
# 进入容器验证
```
## 常见问题
#### nslookup 命令不存在解决
```shell
yum install bind-utils -y
```
#### nslookup指定dns服务器查询
```shell
# 这里dns服务器为 192.168.1.103
nslookup example.com 192.168.1.103
```
## 特别鸣谢
- [数据库操作 - xorm](http://xorm.topgoer.com/)
- [DNS解析 - miekg/dns](https://github.com/miekg/dns)
- [Web - gin](https://gin-gonic.com/zh-cn/docs/quickstart/)
## 代码托管以私人仓库Gitea为准
- Gitea后端: [https://gitea.odboy.cn/odboy/kenaito-dns](https://gitea.odboy.cn/odboy/kenaito-dns)
- Gitea前端: [https://gitea.odboy.cn/odboy/kenaito-dns-front](https://gitea.odboy.cn/odboy/kenaito-dns-front)
- Github后端: [https://github.com/odboy-tianjun/kenaito-dns](https://github.com/odboy-tianjun/kenaito-dns)
- Github前端: [https://github.com/odboy-tianjun/kenaito-dns-front](https://github.com/odboy-tianjun/kenaito-dns-front)
- Gitee(已关闭单纯的不想放在gitee): [https://gitee.com/odboy/kenaito-dns](https://gitee.com/odboy/kenaito-dns)
## 微信交流群
![wxcode](https://oss.odboy.cn/blog/files/userinfo/MyWxCode.png)
(扫码添加微信备注kenaito-dns邀您加入群聊)
加入群聊的好处:
- 第一时间收到项目更新通知。
- 第一时间收到项目 bug 通知。
- 第一时间收到新增开源案例通知。
- 和众多大佬一起互相 (huá shuǐ) 交流 (mō yú)。