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/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
修改如下
# 提示# 各个容器会启动时读取如下值并到更新自己的相应配置中。# 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=3306MYSQL_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:9090SSL=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: [email protected]'#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=31536000000TTLApiToken=315360000000#前端所有cookie的TTL值#1天:60*60*1000*24TTLCookie=86400000
docker compose方式安装
# 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镜像,时间久一点。
查看容器启动状态
# 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文件
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年)
查看解析结果
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方式
# 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.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系统。
在后续部署中可能还会有其它问题,到时还需要向开发者发邮件请教。
版权归原作者 Darry Guo 所有, 如有侵权,请联系我们删除。