首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自建内部dns管理系统开发

自建内部dns管理系统开发

作者头像
以谁为师
发布于 2023-09-12 01:39:35
发布于 2023-09-12 01:39:35
73200
代码可运行
举报
运行总次数:0
代码可运行

     BIND(Berkeley internet Name Daemon)也叫做NAMED,是现今互联网上使用最为广泛的DNS 服务器程序,本项目旨在更简单的维护我们内部的dns系统。

环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
数据库: mysql5.6
应用: bind-9.11.2
环境: python3., django3

0x01 安装数据库

  1. 安装mysql数据库
  2. 执行sql 建表语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use mysql
create database bind9; -- 创建库
CREATE USER  'admin'@'%' identified by 'pass123456';  -- 创建用户
GRANT ALL PRIVILEGES ON bind9.*  TO 'admin'@'%' WITH GRANT OPTION; --  数据库赋权 ;WITH GRANT OPTION 选项表示可以将自己拥有的权限授权给别人,可不加
flush privileges; -- 刷新权限

0x02 web 管理平台部署

容器方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker run --name bind9 -d \
 --restart=always \
 -p 8000:8000 \
 -e DB_HOST=172.16.0.181 \
 -e DB_PORT=3306 \
 -e DB_USER=admin \
 -e DB_PASSWORD='pass123456' \
 -e DB_NAME=bind9 \
 lghost/bind9

本地部署

  1. 创建项目
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 -m venv env
source  env/bin/activate
# 配置虚拟环境

pip  install -i http://mirrors.aliyun.com/pypi/simple  --trusted-host mirrors.aliyun.com  -r requirements.txt
# 安装pip包
  1. 数据库连接配置: `bind9/website/settings.py`
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DB_HOST = os.getenv('DB_HOST', '192.168.0.181')
DB_NAME = os.getenv('DB_NAME', 'bind9')
DB_USER = os.getenv('DB_USER', 'admin')
DB_PASSWORD = os.getenv('DB_PASSWORD', 'pass123456')
DB_PORT = os.getenv('DB_PORT', 3306)
# 以上替换成实际连接帐号,也可在容器中传入变量

本地方式启动 web

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sh run.sh
# 启动脚本

0x03 部署 bind9 dns

安装依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y perl-devel openssl-devel bind-utils

安装 bind9

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget  -c http://ftp.isc.org/isc/bind9/9.11.2/bind-9.11.2.tar.gz
# 下载地址

cd bind-9.11.2/
./configure --prefix=/usr/local/bind/ \
--with-dlz-mysql=/usr/local/mysql \
--enable-threads=no --with-openssl=no \
--disable-ipv6 --enable-largefile \
--disable-openssl-version-check
make && make install
# 编译安装 ; 类似yum安装mysql的指定路径 --with-dlz-mysql=/usr

cd /usr/local/bind/sbin/named/etc
wget -c ftp://ftp.internic.net/domain/named.root
/usr/local/bind/sbin/rndc-confgen -r /dev/urandom -a

mkdir -p /usr/local/bind/var/{logs,zones}
# 创建logs目录
ln -s /usr/local/bind/sbin/named /bin/
#  软链接

bind 配置

/usr/local/bind/sbin/named/etc/named.conf 此处主要添加实际的数据库权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// acl白名单
acl trust-lan {
        10.0.0.0/8;
        172.16.0.0/16;
        192.168.0.0/16;
        127.0.0.1;
};

# 通信通道,以访问named统计信息
statistics-channels {
    inet 127.0.0.1 port 8653 allow { 127.0.0.1; };
};



// 全局配置,所有配置都要以分号结尾
options {


    // 开启监听53端口,any表示接受任意ip连接
    listen-on port 53 { any; };
    zone-statistics yes;
    tcp-clients 50000;
    dnssec-enable no;
    dnssec-validation no;
    datasize unlimited;
    stacksize unlimited;

    // 允许用户发起递归查询的地址范围
    allow-query { trust-lan; };
    // 允许哪些主机从服务器接受传送
    allow-transfer { 172.20.10.61;};
    directory "/usr/local/bind/var/";
    // named进程的pid
    pid-file "named.pid";

    // 设置转发dns服务器地址
    forwarders {
      223.5.5.5;
      114.114.114.114;
      8.8.8.8;
      };

    // 允许递归查询
    recursion yes;

    max-cache-size 60%;
    };

// 根域名
zone "." IN {
       type hint;
       file "/usr/local/bind/etc/named.root";
};

logging {
    channel bind_log {
        file "/usr/local/bind/var/logs/bind.log" versions 3 size 100m;
        severity debug;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    channel error_log {
        file "/usr/local/bind/var/logs/error.log" versions 10 size 32m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    channel query_log {
        file "/usr/local/bind/var/logs/query.log" versions 10 size 32m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    category default { bind_log; };
    category queries { query_log; };
};

dlz "My zone" {
   database "mysql
   {host=192.168.0.110 dbname=bind9 ssl=false port=3306 user=root pass=xxxxxx}
   {select zone from dns_zones where zone='$zone$'}
   {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"')
        when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum)
        else data end from dns_records LEFT JOIN dns_zones ON dns_records.zone_id = dns_zones.id WHERE dns_zones.status=1 and dns_zones.zone='$zone$' and dns_records.host='$record$'}";
};
// 添加自己的数据库连接信息

启动 bind dns 服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf -g
# 指定配置文件和开启调试
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pkill named # 结束进程

useradd  -s  /sbin/nologin  named
chown  -R named:named /usr/local/bind/
# 设置普通用户运行服务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat > /etc/systemd/system/named.service <<EOF
[Unit]
Description=Internet domain name server
After=network.target

[Service]
ExecStart=/usr/local/bind/sbin/named -f -u named -4 -n 2
ExecReload=/usr/local/bind/sbin/rndc reload
ExecStop=/usr/local/bind/sbin/rndc stop

[Install]
WantedBy=multi-user.target
Alias=bind.service
# 启动文件
EOF
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl daemon-reload
# 载入配置
systemctl start named
# 启动服务

0x04 web 默认地址和密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://主机ip:8000
# 帐号:admin 密码:admin123456

0x05 性能问题

如何提升查询自定义记录速度?

1.添加数据库索引 2.提升mysql数据库本身性能

如何测试压测bind9性能?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd bind-9.11.2/contrib/queryperf/
make
# 编译生成文件

queryperf -d input_file -s server
# input_file读取的文件列表,格式为: www.rootman.cn A
# server 为bind服务器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh
var=1
while [ $var -le 10000 ]
do
echo "www.rootman.cn A " >> test.txt
var=$(($var + 1 ))
done
# shell 循环生成1000条记录供测试
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android 9.0适配及部分新特性介绍
在最开始针对速贷进行Android9.0版本的适配时,我使用的是真机是vivo X21A,将targetSdkVersion升到28,运行发现网络请求全报400 Bad Request,查阅了网上针对android9.0网络请求问题的解决方案以及其他的一些迁移到Android9.0需注意的点(下文会讲到),做了些适配和调整,发现仍有问题,通过抓包也并没有发现问题的原因所在。随后试了下模拟器以及借来的google pixel(9.0)真机运行了下,能正常使用,并没有发现什么问题,于是猜想是机子本身系统的问题。
用户2802329
2018/12/10
3.5K0
Android 9.0适配及部分新特性介绍
QQ 音乐 Android 吃 Pie 之路
Android P 这次有很多行为变更,其中不乏一些需要亟需适配的变更。
QQ音乐技术团队
2018/08/31
3.7K5
QQ 音乐 Android 吃 Pie 之路
Android P 适配指南
Google自 android L (5.0) 以来就持续对安装系统进行 安全 以及 性能上的升级,此次的 android P (9.0)也不例外, 更大程度上对之前一些版本一些警告的具体落实,无论你的 Target Api 是否是 28 都将受到影响。
用户1269200
2018/10/08
3.7K0
Android P 适配指南
非 SDK 接口常见问题 | Android 开发者 FAQ Vol.13
常规问题 Q1: 什么是非 SDK 接口? A:非 SDK 接口指不在官方 Android SDK 涵盖范围内的 Java 字段和方法。此类接口是 SDK 的内部实现细节,可能随时会被修改,且不对开发者另行通知。 常规问题 Q2 : Android P 在非 SDK 接口使用限制方面采取了哪些举措? A:谷歌正在逐步限制非 SDK 接口的使用:针对不同接口采取不同形式的限制 (详情请参照条目 “应用运行时,我应该如何检测非 SDK 接口的使用?” )。若您正在使用非 SDK 接口进行开发,请特别注意限制对应
Android 开发者
2018/06/20
1.5K0
API level targeting to 28,准备好了吗?
小编负责的地图手表项目,和Google合作,需要尽快完成targetsdk升级的适配测试工作。
用户5521279
2019/09/29
1.5K0
API level targeting to 28,准备好了吗?
Android P专区免费开放 -- 同样的Android,不同的体验
2018年3月8日,Google推出了Android P Preview版本,并提供官方镜像下载。
WeTest质量开放平台团队
2018/10/29
1.3K0
Android 9 Pie 兼容性常见问题及注意事项
使用了系统的 ClassLoader 加载 org.apache.http.* 的库
Android 开发者
2018/09/30
1.6K0
Android 9 Pie 兼容性常见问题及注意事项
基于Google动态化方案的组件化演进
国内Android动态化方案已经蓬勃发展数年之久,在React Natvie、Flutter这些跨平台方案未出现之前,类似Atlas、Replugin、DLA等Android动态化方案在业界独领风骚。在国内动态化方案也分为两个流派:组件化与插件化。比如Atlas自称为组件化方案,另外诸如Replugin、DroidPlugin等称为插件化方案。本文不具体说明组件化与插件化区别相关介绍文章已多入牛毛,这里就不再赘述。
用户1907613
2018/07/25
2.5K0
基于Google动态化方案的组件化演进
Android 各版本特性
5.0中使用了recyclerview代替了listview,它具有高度解耦,可以自定义样式,提供ItemAnimator,ItemDecoration,LayoutLinearLayout实现丰富多样的效果,但也有缺点,比如需要自定义列表分割线,列表点击事件也需要自己实现,列表分隔线通过继承recyclerview的ItemDecoration方法
Yif
2019/12/26
1.6K0
另一种绕过 Android P以上非公开API限制的办法
去年发布的 Android P上引入了针对非公开API的限制,对开发者来说,这绝对是有史以来最重大的变化之一。前天 Google 发布了 Android Q 的 Beta 版,越来越多的 API 被加入了黑名单,而且 Google 要求下半年 APP 必须 target 28,这意味着现在的深灰名单也会生效;可以预见,在不久的将来,我们要跟大量的 API 说再见了。
weishu
2020/01/20
2.8K0
Android P专区免费开放 -- 同样的Android,不同的体验
原文链接:http://wetest.qq.com/lab/view/376.html
WeTest质量开放平台团队
2018/04/09
4.5K4
Android P专区免费开放 -- 同样的Android,不同的体验
Android 9.0系统新特性,对刘海屏设备进行适配
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户1158055
2019/11/28
1K0
Android开发笔记(一百七十四)图像解码器ImageDecoder
早期的Android只支持三种图像格式,分别是JPEG、PNG和GIF,虽然这三类图片都能在ImageView上显示,但对于GIF格式来说,图像视图仅能显示动图的初始画面,无法直接播放动画效果。此外,由于JPEG、PNG和GIF三兄弟历史悠久,当时的图像压缩算法不尽完美,并且手机摄像头的分辨率越来越高,导致一张高清照片动辄几M乃至十几M大小,使得手机的存储空间越发吃紧,这也要求更高效的压缩算法。 目前智能手机行业仅剩安卓和iOS两大阵营,为了争夺移动互联网时代的技术高地,两大阵营的盟主纷纷推出新的图像压缩算法,安卓阵营的谷歌推出了WebP格式,而iOS阵营的苹果推出了HEIF格式。尽管WebP与HEIF出自不同的厂商,但它俩都具备了下列的优异特性: 1、支持透明背景;(JPEG不支持透明背景) 2、支持动画效果;(JPEG和PNG不支持动画效果) 3、支持有损压缩;(PNG和GIF不支持有损压缩,因此它们的图片体积较大) 正因为WebP与HEIF如此优秀,所以它们在手机上愈加流行,从Android9开始便支持浏览这两种格式的图片,从Android10开始更允许将拍摄的照片保存为HEIF格式(同时需要硬件支持)。ImageDecoder正是Android9推出的新型图像解码器,它不但兼容常规的JPEG和PNG图片,还适配GIF、WebP、HEIF的动图效果,可谓新老图片类型一网打尽。利用图像解码器加载并显示图片的步骤分为以下三步: 1、调用ImageDecoder的createSource方法,从指定地方获得数据源; 2、调用ImageDecoder的decodeDrawable方法,从数据源解码得到Drawable类型的图形信息; 3、调用图像视图的setImageDrawable,设置图像视图的图形对象; 其中第一步的createSource方法允许从多处来源读取图像信息,包括但不限于: 1、来自存储卡的File对象; 2、来自系统相册的Uri对象; 3、来自资源图片的图形编号; 4、从输入流获取的字节数组; 举个例子,现在准备通过ImageDecoder加载相册中的某张图片,此时从系统媒体库得到Uri类型的图片路径,则详细的图像加载代码示例如下:
aqi00
2022/01/05
1.8K0
Android开发笔记(一百七十四)图像解码器ImageDecoder
Android 14 Developer Preview一览
不久之前,Google公开了Android 14的首个Developer Preview版本。
用户1158055
2023/10/18
8150
Android 14 Developer Preview一览
ADB 操作命令详解及用法大全(四)
可以查看 Android 设备系统属性之外,还可以设置系统属性,设置系统属性的基本命令格式是:
雷子
2024/04/18
8340
ADB 操作命令详解及用法大全(四)
Android12,你的适配开始了吗
Android 12 开发者预览版计划从 2021 年 2 月开始启动,到向 AOSP 和 OEM 提供最终的公开版本时结束,目前应该已经到beta3阶段了,看看官方里程碑时间轴,你的适配工作开始了吗
Android扫地僧
2021/04/26
4.5K0
Android12,你的适配开始了吗
Android 9.0 强势来袭,带来了哪些新特性?
谷歌今 天全量对外发布 Android 9(API级别28) 版本,吓得我赶快去官网学习一波,今天带大家展望9.0的新特性。Android 9 为用户和开发人员引入了强大的新功能。今天重点介绍新增的功能。
开发者技术前线
2020/11/23
4.1K0
android刘海屏适配(刘海屏或圆角适配)
其中就加入了刘海屏相关的API。其相关行为与功能变更也是非常多的,从其变更的趋势及功能来看,google在进一步的收紧权限。
全栈程序员站长
2022/07/25
2.5K0
android刘海屏适配(刘海屏或圆角适配)
如何让一套代码完美适配各种屏幕?
区别于iOS,android设备有不同的分辨率大小以及不同厂商的系统,目前市场的分辨率可以看下相关统计。
CRMEB商城源码
2022/07/19
1.4K0
Android 11 开发者常见问题 | FAQ・第一期
Q: Android 11 的分区存储是强制的吗?如果 targetSdkVersion 低于 Android 10,运行在 Android 11 的手机上,分区存储特性还生效吗?
Android 开发者
2020/05/27
2.3K0
Android 11 开发者常见问题 | FAQ・第一期
相关推荐
Android 9.0适配及部分新特性介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档