Skip to content

tswcbyy1107/intranet-dns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

intranet dns

基于gin框架开发的内网dns管理系统后端demo, 支持动态dns修改(RFC 2136标准)、dns探测等功能. 提供dns解析的基础服务为bind. 支持多节点部署.

启动方式: go run cmd/main.go, 本地swagger查看api详情
swagger示例

项目项目结构如下:

intranet-dns/
├── apis            # 控制器
├── cmd             # main.go
├── config          # 配置文件
├── ctx             # gin上下文
├── database        # 数据库初始化
├── docs            # swagger
├── middleware      # gin中间件
├── models          # 数据库表结构, dao函数
├── router          # 路由控制
├── service         # 服务代码
│   ├── cronjob     # 定时任务
│   ├── dnslib      # dns服务
│   └── redis       # redis服务    
└── utils           # 工具函数

表结构:

mysql> show tables;
+-----------------------+
| Tables_in_dns_service |
+-----------------------+
| apis                  | # 路由
| audit_logs            | # 审计日志
| cronjobs              | # 定时任务
| dns_probes            | # dns探测
| dns_records           | # dns rr
| dns_zones             | # dns zone
| sys_roles             | # 系统角色
| sys_users             | # 系统用户
+-----------------------+

功能点:

  • api管理: 路由自动录入数据库, 支持禁用单个api, 支持api限速, 接入go-swagger注解
  • 用户管理: 用户可绑定多个角色, 角色可绑定多个api接口, 实现rbac权限模型管控. 单个用户可禁用, 统计登录次数以及登录时间. 利用go-jwt token来实现登录鉴权等.
  • 日志审计: os.stdout支持输出api访问日志, 包含来源ip、请求耗时等. 数据库存储具体的body日志用于审计
  • 定时任务管理: 支持动态的增删改查定时任务, 定时任务可控制是否启动, 可查看最近的运行结果
  • dns管理: bind9+go miekg/dns实现dns动态增删改查, dns探测等. dynamic dns rfc2136

相关组件

golang: gin, gorm, go-swagger, go-jwt, go-redis, miekg/dns

database: mysql, redis

nameserver: bind dynamic update, bind key配置

tsig-keygen funny.com > /etc/funny.com.key

cat /etc/named.conf |grep -A 5 'funny.com'
include "/etc/funny.com.key";
zone "funny.com." {
        type master;
        file "funny.com.zone";
        allow-update { key funny.com; };
};

使用举例

如增加dns记录:

# dig不存在的记录, NXDOMAIN
dig a.b.c.funny.com @your_dns_server
"->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 24423
flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1"

# call api to add dns record
curl -X 'POST' \
  'http://localhost:8008/api/v1/dns/records' \
  -H 'accept: application/json' \
  -H 'token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzM2NTExMDc4LCJpc3MiOiJpbnRyYW5ldC1kbnMifQ.Gqubkw1gNICcH-X90FDVWMFHClJhhyn0ljUafRh7xZk' \
  -H 'Content-Type: application/json' \
  -d '{
  "record_content": "110.110.110.110",
  "record_name": "a.b.c.funny.com",
  "record_ttl": 120,
  "record_type": "A",
  "zone": "funny.com"
}'

# 内网dns记录已经动态添加成功
dig a.b.c.funny.com @your_dns_server +short
110.110.110.110

# 查看named zone文件
cat funny.com.zone|grep a.b.c
a.b.c			A	110.110.110.110

Releases

No releases published

Packages

No packages published

Languages