bind webadmin使用体验

DNS需求

最近甲方项目中有一个需求点需要DNS服务配合,项目要求该DNS系统能让用户自行操作记录,并允许用户通过命令自行修改DNS记录。

领导把这个任务交给我了一个什么还不懂的小白,怎么办?

于是我和我们team的其他同事开始了在网上找一些开源系统,测试几个开源DNS(如bind、powerdns、MyDNS、MaraDNS),它们都非常不错,但并不能直接满足项目要求,需进行二次开发。为节省人力成本,我们并不想针对DNS投入开发成本。通过一位深资运维朋友介绍了一款bind-webadmin的软件,经测试非常适合我们项目要求,bind-webadmin是基于bind9而开发的web管理系统,可快速创建一台动态DNS系统。该软件的作者也非常不错,我在测试中遇到问题时给他发邮件时回复很及时,解答很有耐心,相当给力~~~。

bind-webadmin的官网

https://bind-webadmin.com

bind-webadmin的demo

https://mm-dns.com

废话少说,参照bind webadmin官网开始我的测试,哈~

安装

在安装前,需配置好docker环境。

代码语言:bash
复制
# wget https://bind-webadmin.com/download/bind-webadmin.v0.1.tar.gz
# tar zxvf bind-webadmin.v0.1.tar.gz
# cd bind-webadmin.v0.1
# sh install.sh
# tree /app
/app
├── cert
│   ├── dhparams.pem
│   ├── fullchain.pem 
│   └── privkey.pem
├── docker-compose.yml
├── env.txt
├── mysql
├── server
│   └── app.conf
└── start.sh

这里的主要配置文件是env.txt.

测试时我使用的域名是talknow-tech.com,由于我还没有证书,关闭SSL。

env.txt修改如下

代码语言:bash
复制
# 提示
# 各个容器会启动时读取如下值并到更新自己的相应配置中。

NS_DOMAIN值必须与bind_backend中的配置文件app.conf中的ns变量值相同。

NS_DOMAIN='talknow-tech.com'

mysql基本配置

MYSQL_HOST=bind_mysql
MYSQL_ROOT_PASSWORD=mysql+888
MYSQL_ALLOW_EMPTY_PASSWORD=no
MYSQL_POST=3306
MYSQL_DB=BindDB
MYSQL_USERNAME=root
MYSQL_USERPWD=mysql+888

提示

1.MYSQL_POST值必须与mysql容器启动时的配置相同

2.MYSQL_HOST值必须与mysql空器的服务名称相同

3.当采用root时,MYSQL_USERPWD与MYSQL_ROOT_PASSWORD相同

4.采用非root方式,需手工创建帐号

mysql运行环境(初始化时中文支持)

LANG=C.UTF-8
MYSQL_CHARSET=utf8mb4
MYSQL_COLLATION=utf8mb4_unicode_ci

#后面API接口(不要以/为结尾)
#该值必须与后端接口对外开放的配置保持一致,即接口外部域名和端口
#为外部的api接口。
#API_URL=http://192.168.3.7
#API_URL_SSL=http://192.168.3.7

#若采用本系统的api接口,此值为

API_URL=http://api.$

若有证书,需配置为

API_URLs=https://api.$

#API_URL=http://192.168.3.7
SSL=false
API_URL=http://api.${NS_DOMAIN}
API_URL_SSL=https://api.${NS_DOMAIN}

#----------------------------
#前端参数
ICP=粤ICP备999999号(示例)
OTHERCODE=粤公网安备999999号(示例)
LOGIN_FOOTER_TEXT='Mobile: 130xxxxxxx email: xxxx@qq.com'

#title配置
APP_TITLE=TalkNows

#sider页脚
Footter_line_sider_1=TalkNow
Footter_line_sider_2='测试中'

#普通页面页脚
Footter_line_1='DNS自主系统'
Footter_line_2='by talknow-tech.com'

#前端在产生api Token时为该token配置的TTL
#1年=1000606024365*1=31536000000
TTLApiToken=315360000000

#前端所有cookie的TTL值
#1天:60601000*24
TTLCookie=86400000

docker compose方式安装

代码语言:bash
复制
# sh start.sh
[+] Running 63/31
✔ bind_front 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 24.7s
✔ bind_proxy 18 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 63.7s
✔ bind_mysql 14 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 74.5s
✔ bind_backend 5 layers [⣿⣿⣿⣿⣿] 0B/0B Pulled 56.0s
✔ bind9 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 27.0s
[+] Running 6/6
✔ Network app_mynet Created 0.2s
✔ Container app-bind_mysql-1 Started 0.4s
✔ Container app-bind9-1 Started 0.1s
✔ Container app-bind_backend-1 Started 0.0s
✔ Container app-bind_front-1 Started 0.1s
✔ Container app-bind_proxy-1 Started 0.2s

第一次启动需pull镜像,时间久一点。

查看容器启动状态

代码语言:bash
复制
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d40d04593625 registry.cn-hangzhou.aliyuncs.com/darry/bind_proxy:v1 "/entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, 22/tcp, 0.0.0.0:443->443/tcp app-bind_proxy-1
696dd06e5b4e registry.cn-hangzhou.aliyuncs.com/darry/bind_front:v1 "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 80/tcp, 0.0.0.0:9091->9091/tcp app-bind_front-1
80eb68220fc3 registry.cn-hangzhou.aliyuncs.com/darry/bind:v1 "docker-entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp, 953/tcp app-bind9-1
133d74406e11 registry.cn-hangzhou.aliyuncs.com/darry/bind_backend:v1 "/entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:9090->9090/tcp app-bind_backend-1
1e388216d4bd registry.cn-hangzhou.aliyuncs.com/darry/bind_mysql:v1 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp app-bind_mysql-1

由于是测试域名,按照官网提示,添加如下3个记录到hosts文件

代码语言:dos
复制
C:>type Windows\System32\drivers\hosts
系统找不到指定的文件。

C:>type Windows\System32\drivers\etc\hosts

Copyright (c) 1993-2009 Microsoft Corp.

This is a sample HOSTS file used by Microsoft TCP/IP for Windows.

This file contains the mappings of IP addresses to host names. Each

entry should be kept on an individual line. The IP address should

be placed in the first column followed by the corresponding host name.

The IP address and the host name should be separated by at least one

space.

Additionally, comments (such as these) may be inserted on individual

lines or following the machine name denoted by a '#' symbol.

For example:

102.54.94.97 rhino.acme.com # source server

38.25.63.10 x.acme.com # x client host

localhost name resolution is handled within DNS itself.

127.0.0.1 localhost

::1 localhost

192.168.3.68 talknow-tech.com www.talknow-tech.com api.talknow-tech.com

测试

采用google浏览器,直接打开 http://talknow-tech.com

采用默认帐号进入admin/admin1111mm

界面很简洁,没有多余的页面,非常清晰。

注册新用户

注册一个新用户(yanglitu/1@qwWWqqq)进入,添加域名和记录。

添加域名

添加解析记录

添加解析记录时再配置token(默认的token有效期是10年)

查看解析结果

代码语言:dos
复制
C:>nslookup -qt=soa abc.com 192.168.3.68
服务器: UnKnown
Address: 192.168.3.68

abc.com
primary name server = ns1.talknow-tech.com
responsible mail addr = info.abc.com
serial = 2024060100
refresh = 86400 (1 day)
retry = 86400 (1 day)
expire = 86400 (1 day)
default TTL = 86400 (1 day)

C:>nslookup -qt=a www.abc.com 192.168.3.68
服务器: UnKnown
Address: 192.168.3.68

名称: www.abc.com
Address: 1.1.1.1

解析api token测试

除通过web方式修改解析记录值以外,bind-webadmin还提供了3种方式来修改解析记录值,适应不同场景。

例如json方式

代码语言:bash
复制
# curl -XPOST "http://talknow-tech.com/updatejson" -d '{
"data":"9.9.9.9",
"token":"5HXUtJTM5Hm2w4fIiB/ViDfgx0OhuYfQWuNrwzKVgCvrv4fz4dxXJpGsCVF0BvYD8+0nVoCtuJX8tYbywP8BhgCrmGHFWxXzOwpxxBLXdvFt0oL9MGj8g1m5mtXC0Llp"
}
'

返回

{"info":"ok"}

查看结果

代码语言:dos
复制
C:>nslookup -qt=a  www.abc.com 192.168.3.68
服务器: UnKnown
Address: 192.168.3.68

名称: www.abc.com
Address: 9.9.9.9

后续

通过体现bind webadmin的功能,感觉它非常不错,可以很轻松创建一套自己的动态域名系统。

为每一位DNS爱好者提供了一种拥有自己独特DNS系统的可能性。

今天测试到这里吧,下一步将bind-webadmin部署在公网上,创建一套像 https://mm-dns.com 一样的真正的外部DNS系统。

在后续部署中可能还会有其它问题,到时还需要向开发者发邮件请教。