bind webadmin 动态DNS自助系统 使用体验

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环境。

# wget https://bind-webadmin.com/dw/bind-webadmin.v0.1.tar.gz
# tar zxvf bind-webadmin.v0.1.tar.gz
# cd bind-webadmin.v0.1
# sh install.sh  /bindwebadmin  # 格式: sh install.sh  /install_dir 
                                # 安装目录为 /install_dir
                                # 书写格式: 以 / 开头,且不能以 / 为结尾
                                # 例如:
                                #    /abc/123    正确
                                #    /abc/123/   错误
                                # 若不写明安装目录,则默认安装目录为 /app , 如下。
                                # sh install.sh

# tree /bindwebadmin            # 安装在 /bindwebadmin 目录。在安装前需保证本宿主中没有该目录。安装过程中会创建该目录。
/bindwebadmin
├── bind                        # bind9配置文件。容器第一次被创建时,会修改named.conf文件。
│   ├── named.ca
│   ├── named.conf              # bind9主配置文件。在容器启动后,若修改此文件,需重启容器。
│   ├── named.empty
│   ├── named.localhost
│   ├── named.loopback
│   ├── named.rfc1912.zones
│   ├── redirect.db
│   ├── rndc.conf
│   └── rndc.key
├── cert                        # 证书目录
│   ├── dhparams.pem
│   ├── fullchain.pem
│   └── privkey.pem
├── docker-compose.yml          # docker compose 配置文件.容器间调用采用的是容器名称,不要更改此文件中的容器名称。
├── env.txt                     # 主配置文件(环境变量)。供各个容器初始化时统一调用。仅第一次创建容器时生效。 
├── mysql/                      # mysql数据目录。当容器第一次创建时,该目录会被写入数据库初始化数据。
└── server                      # 后台配置。当容器第一创建时,系统自动修改app.conf。
    ├── app.conf                # 在容器启动后,若修改此文件,需重启容器。
    └── lisence.txt             # 授权配置文件

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

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

env.txt修改如下

# 提示
# 各个容器会启动时读取如下值并到更新自己的相应配置中。

# NS_DOMAIN值必须与bind_backend中的配置文件app.conf中的ns变量值相同。
# Note:
# - 此参数为核心配置
# - 此时 NS_DOMAIN 值不能配置为 test.io 和 example.com ,主要原因是这两个域名已被系统默认写入数据库,供 demo 用户测试使用。
# - 支持子域名配置,如 NS_DOMAIN='diy.talknow-tech.com', 但不建议使用。
NS_DOMAIN='talknow-tech.com'

# bind webadmin服务器IP,如下两种情况,二选一。
# 情况一:当配置为公共DNS服务时,将下面的NS_IP改为当前bind webadmin服务器的公网NAT映射IP
# 情况二: 仅配置为私有DNS时,将下面的NS_IP改为当前bind webadmin服务器的私有ip
# 此参数为核心配置
NS_IP=192.168.3.14

# ns域名中的相关A记录值
IP_FRONT_orgin_A=${NS_IP}
IP_FRONT_DNS_A=${NS_IP}
IP_FRONT_WWW_A=${NS_IP}
IP_API_A=${NS_IP}
IP_NS1_A=${NS_IP}
IP_NS2_A=${NS_IP}

# 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:9090
#API_URL_SSL=http://192.168.3.7:9090

#若采用本系统的api接口,此值为
# API_URL=http://api.${NS_DOMAIN}
# 若有证书,需配置为
# API_URLs=https://api.${NS_DOMAIN}
#API_URL=http://192.168.3.7:9090
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年=1000*60*60*24*365*1=31536000000
TTLApiToken=315360000000

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

主要参数如下

  • NS_DOMAIN='talknow-tech.com'
  • NS_IP=192.168.3.14,当配置为公共DNS服务时,将NS_IP改为当前bind webadmin服务器的公网NAT映射IP。当仅配置为私有DNS时,将的NS_IP改为当前bind webadmin服务器的私有ip

docker compose方式安装

# cd /bindwebadmin
# docker compose up -d
[+] 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镜像,时间久一点。

查看容器启动状态

# 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

测试

将测试机中的网络配置中将DNS一项改为当前bind webadmin服务器的IP


image.png
C:\Users\Administrator>nslookup
Address:  192.168.3.1

> server 192.168.3.14        # bind webadmin服务器的ip
默认服务器:  [192.168.3.14]
Address:  192.168.3.14

> baidu.com
服务器:  [192.168.3.14]
Address:  192.168.3.14

非权威应答:
名称:    baidu.com
Addresses:  39.156.66.10
          110.242.68.66

> dns.talknow-tech.com
服务器:  [192.168.3.14]
Address:  192.168.3.14

名称:    dns.talknow-tech.com
Address:  192.168.3.14

> talknow-tech.com
服务器:  [192.168.3.14]
Address:  192.168.3.14

名称:    talknow-tech.com
Address:  192.168.3.14

> api.talknow-tech.com
服务器:  [192.168.3.14]
Address:  192.168.3.14

名称:    api.talknow-tech.com
Address:  192.168.3.14

>

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

1719654653451-b9cfa63a1f4d3ebe60788d9fb948fbcc.png

采用默认帐号进入admin/admin1111mm
界面很简洁,没有多余的页面,非常清晰。

image.png

注册新用户

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

1719654653451-b9cfa63a1f4d3ebe60788d9fb948fbcc.png

添加域名

1719654653451-b9cfa63a1f4d3ebe60788d9fb948fbcc.png

添加解析记录

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


1719654653451-b9cfa63a1f4d3ebe60788d9fb948fbcc.png

查看解析结果

C:\>nslookup -qt=soa abc.com 192.168.3.14
服务器:  UnKnown
Address:  192.168.3.14

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.14
服务器:  UnKnown
Address:  192.168.3.14

名称:    www.abc.com
Address:  1.1.1.1

解析api token测试

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

例如json方式

# curl -XPOST "http://talknow-tech.com/updatejson" -d '{
  "data":"9.9.9.9",
  "token":"5HXUtJTM5Hm2w4fIiB/ViDfgx0OhuYfQWuNrwzKVgCvrv4fz4dxXJpGsCVF0BvYD8+0nVoCtuJX8tYbywP8BhgCrmGHFWxXzOwpxxBLXdvFt0oL9MGj8g1m5mtXC0Llp"
}
'
# 返回
{"info":"ok"}

查看结果

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

名称:    www.abc.com
Address:  9.9.9.9

后续

通过体现bind webadmin的功能,感觉它非常不错,可以很轻松创建一套自己的动态域名系统。
为每一位DNS爱好者提供了一种拥有自己独特DNS系统的可能性。

今天测试到这里吧,下一步将bind-webadmin部署在公网上,创建一套像 https://mm-dns.com 一样的真正的外部DNS系统。
在后续部署中可能还会有其它问题,到时还需要向开发者发邮件请教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容