使用bind搭建内网dns服务
dns服务端方案简介
dns服务有什么用呢,尤其是内网的dns服务,其实用处还蛮大的,我见过的典型使用,是数据库跨机房多活。
如某mysql主机搭建在深圳机房,为了保证高可用,那我们可以给这台主库,维护多个深圳同城的跨机房半同步备机,在异地如上海还可以维护一个异步备机。当主机出问题时候,我们可以切换到备机去,而切换了之后,ip肯定就变了,此时就不得不要求客户端修改ip,非常麻烦。
一个可选的方案就是,给客户端服务提供一个域名,客户端服务通过域名获取对应的ip,然后再去和该ip建立连接。当数据库发生主备切换时,只需要修改dns服务端,把域名对应的ip进行修改,同时通知客户端服务进行重连(重连时就可以取到最新的ip),这样的话,不就可以做到数据库容灾切换,且不需要业务方修改配置了吗?
在这其中呢,有个关键的组件,就是搭建私有的内网dns服务器。
dns服务的开源实现,有两个,一个是bind,一个是dnsmasq,前者比较重,专注于dns这块,后者则是相对轻量一些,所以呢,如果需要极高稳定性,建议还是使用重量级的bind。
今天呢,其实就是简单介绍下bind的安装、内网域名配置等等,细节还是比较多,因此记录一下。
安装&配置
安装其实有两种方法,一种是通过源码包编译安装,一种是使用yum包管理器,我这边之前实践是用的源码包方式,确实相对繁琐一点,不过也还行;以后可以再稍微说下yum包的方式。
源码包下载及安装
https://downloads.isc.org/isc/bind9/cur/
https://downloads.isc.org/isc/bind9/cur/9.18/
我这边是9.18版本,下载bind-9.18.4.tar.xz后,rz上传到了我的服务器上。(wget也ok)
tar -xvf bind-9.18.4.tar.xz
cd bind-9.18.4/
// 建议一定要加上prefix哈,不然相关文件会散落各处
./configure --prefix=/usr/local/bind9 --disable-doh
// 接下来,可能会提示一些依赖包不存在,此时需要yum 安装
yum search libuv
yum install libuv
yum install libuv-devel
yum search libnghttp2
yum install libnghttp2
yum search libpcap
yum install libpcap
yum install libcap-devel
由于大家的机器环境各不相同,可能有些依赖已经有了,不需要装;或者是还缺更多依赖,这种时候就拿着错误去百度吧;另外,我个人习惯yum安装前,先查一下,看看是个什么包。
configure完成后,就执行
make && make install
此时,可以去看看prefix目录下,是什么情况:
[root@VM-0-6-centos bind9]# pwd
/usr/local/bind9
[root@VM-0-6-centos bind9]# ll
total 28
drwxr-xr-x 2 named named 4096 Jul 3 11:50 bin
drwxr-xr-x 2 named named 4096 Jul 3 14:42 etc
drwxr-xr-x 10 named named 4096 Jul 3 11:50 include
drwxr-xr-x 3 named named 4096 Jul 3 11:50 lib
drwxr-xr-x 2 named named 4096 Jul 3 15:45 sbin
drwxr-xr-x 3 named named 4096 Jul 3 11:50 share
drwxr-xr-x 3 named named 4096 Jul 3 12:12 var
创建专属用户(可选步骤)
建了个专门的named用户
groupadd -g 53 -r named
useradd -u 53 -s /sbin/nolgin -r named -g named
如果使用了named用户,所以要保证prefix目录下的文件、目录的权限匹配,我习惯了root用户,操作完了后
chown -R named:named /usr/local/bind9
全局选项配置文件修改
我们现在需要先创建一个主要的配置文件,这个配置文件里会有很多选项。
/usr/local/bind9/sbin/rndc-confgen > /usr/local/bind9/etc/rndc.conf
cd /usr/local/bind9/etc/
// 下面这条命令的意思是,取最后的10行,然后取这10行中的前9行,再去掉每一行前面的\#符号,大家可以分步执行看看结果
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf
此时,named.conf这个配置文件的最最基本配置就有了,大致如下:

在这个之外,我们还可以再配置一些option选项,比如我这边最终的配置文件如下:
key "rndc-key" {
algorithm hmac-sha256;
secret "RCTpzylRQeSrU5dPwypdzOJ0eeWNUYGt0csRFbISaU0=";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
options {
# 运行时数据的目录
directory "/usr/local/bind9/var/run";
# pid文件
pid-file "named.pid";
recursion yes;
allow-query { any; };
# 监听53端口
listen-on port 53 { any; };
# 除了本地配置的域名,其他都转发dns查询到如下dns服务器
forwarders {
114.114.114.114;
8.8.8.8;
};
forward only;
# 禁用安全检查,否则dns查询会失败
dnssec-validation no;
};
# 自定义的域名的所在文件
include "/usr/local/bind9/etc/named.user.zones";
自定义内网域名的配置文件
我们打开named.user.zones文件看看:
zone "nx.com" IN {
type master;
# 文件名为nx.com,那么全路径在哪里呢,就是上面文件中的options.directory那个路径
file "nx.com";
allow-update { none; };
};
zone "dump.com" IN {
type master;
file "dump.com";
allow-update { none; };
};
这里配置了两个随便写的域名。那么,有人会继续问,怎么没看到域名相关的A记录之类的dns记录呢?
大家看下上面注释哈,真正的dns记录那些,在file那个属性中配置,全路径在哪里呢,就是上面文件中的options.directory那个路径。
[root@VM-0-6-centos run]# pwd
/usr/local/bind9/var/run
[root@VM-0-6-centos run]# ll
total 24
-rw-r--r-- 1 root root 534 Jul 3 16:08 dump.com
-rw-r--r-- 1 named named 221 Jul 3 14:26 managed-keys.bind
-rw-r--r-- 1 named named 1818 Jul 3 14:26 managed-keys.bind.jnl
drwxr-xr-x 2 named named 4096 Jul 3 16:08 named
-rw-r--r-- 1 named named 6 Jul 3 16:25 named.pid
-rw-r--r-- 1 root root 463 Jul 3 12:55 nx.com
这边给大家看看dump.com文件的内容:
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.2
## 前面几行呢,我也没做深入研究,建议生产部署的时候,再研究该选项,我们部署着玩,可以先只看下面几行
nameserver.dump.com. IN A 127.0.0.3
test1.dump.com. IN A 127.0.0.5
test2 IN A 127.0.0.8
可以看到,上文的最后三行,格式比较乱,但大致是三条A记录;格式乱不影响,因为它应该是按照空格来分开的。
前台方式运行bind
/usr/local/bind9/sbin/named -u named -g
运行后,记得观测是否报错。

有报错的话,基本对应的域名就解析不了了。
此时,我们ps看一下进程:
[root@VM-0-6-centos work-file.git]# ps -ef|grep named
named 28891 2019 0 16:15 pts/1 00:00:00 sbin/named -u named -g
ok,已经运行起来了,此时可以用dig命令来进行测试:
# @符号后面跟该dns服务的ip或域名,端口默认为udp 53,如果dns服务部署在云端服务器,然后测试如果在pc,可能要注意云服务器放行相关防火墙端口
dig nameserver.dump.com @localhost


后台运行
/usr/local/bind9/sbin/named -u named -c /usr/local/bind9/etc/named.conf
在windows pc上安装dig命令,测试效果
https://downloads.isc.org/isc/bind9/cur/9.16/
本地解压后,cmd里执行:

注意啊,如果不通,多半是udp 53端口被防火墙拦截了。
重要文档
如果希望了解更多配置文件选项:https://downloads.isc.org/isc/bind9/9.18.4/doc/arm/html/chapter3.html#introduction
yum安装bind:https://copr.fedorainfracloud.org/coprs/isc/bind/
bind相关文档:https://www.isc.org/bind/
参考文档
https://blog.csdn.net/weixin_45756094/article/details/122011509
https://blog.csdn.net/u011288801/article/details/106736607/
本文由mdnice多平台发布
使用bind搭建内网dns服务的更多相关文章
- bind搭建内网DNS服务器架构(主从、子域授权、DNS转发器)
实验目的 模拟企业DNS服务架构服务器及原理 实验环境准备 实验架构图 实验设备 DNS服务器4台 主服务器master(centos8):IP_192.168.100.30, 从服务器slave(r ...
- 使用dnsmasq快速搭建内网DNS
背景介绍公司有一批测试服务器,之间希望通过自定义的域名进行访问,这样比较方便,但每个人每台机器都维护一个hosts的话会非常麻烦,于是想搭建一个内部的DNS服务器,对自定义的域名进行解析,同时缓存公网 ...
- Centos7搭建内网DNS服务器
一.配置阿里云yum源 执行脚本配置阿里云的yum源,已配置yum源的可以忽略 #!/bin/bash # ******************************************** ...
- dns服务之bind配置内网解析部分子域名,其它子域名转发
bind配置内网解析部分子域名,其它子域名转发.以下以m.xxx.com和admin.xxx.com由内网dns解析,其它*.xxx.com转发给外网dns解析为例配置.文件/etc/named.co ...
- 云计算之路-试用Azure:搭建自己的内网DNS服务器
之前我们写过一篇博文谈到Azure内置的内网DNS服务器不能跨Cloud Service,而我们的虚拟机部署场景恰恰需要跨多个Cloud Service,所以目前只能选择用Azure虚拟机搭建自己的内 ...
- Django + Apache + 树莓派 搭建内网微信公众号服务器
其实早在微信开放公众号开发平台时就想弄一个自己的公众号服务器,奈何对web服务器搭建和开发一窍不通,只是注册了一下开发者帐号,并没有采取行动,万恶的拖延症. 前一年,开始接触python,打开了神奇世 ...
- Centos下内网DNS主从环境部署记录
一.DNS是什么?DNS(Domain Name System),即域名系统.它使用层次结构的命名系统,将域名和IP地址相互映射,形成一个分布式数据库系统. DNS采用C-S架构,服务器端工作在UDP ...
- 用 ROS 做内网DNS服务器
转载:http://iliuyong.iteye.com/blog/1035692 用 ROS 做内网DNS服务器方法:1.ROS 设置IP ->DNS 选择"static" ...
- 搭建内网Yum源
搭建内网yum源 阅读(2,238) 一:因内网服务器 众多,当统一安装一些比较大的rpm的时候全部从外网下载就比较慢,而且还占用了一定的出口流量,因此在内网部署了一台yum服务器,将阿里云的epel ...
- frp + nginx 配置多人共用的http 内网穿透服务
来源:简书 https://www.jianshu.com/p/c9d7527d607b 一. 前言 frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp ...
随机推荐
- Java开发面试--群面专区
目录 一.群面背景 二.群面流程 三.群面角色 四.群面细节 五.群面礼仪 六.群面话术 七.个人演讲 八.群面题型 群面也称无领导小组~ 候选人们被要求在一个相对自由的环境中展示他们的能力,并在没有 ...
- Vue之仿百度搜索框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CSP 初赛复习
想要做一些不需要思考也算不得摆烂的事,但发现很难找到符合上述要求的学习内容. 突然想到还剩两天就 CSP 初赛了.虽然在 LN 想过不了初赛纯属搞笑,但为了不让自己的分数太难看还是简单复习一下. 没有 ...
- eclipse安装velocity插件(转)
http://www.jspxcms.com/knowledge/46.html http://blog.csdn.net/superbeck/article/details/5721382 插件地址 ...
- php开发之文件上传的实现
前言 php是网络安全学习里必不可少的一环,简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中,文件的功能是必不可少,比如我们在论坛的头像想更改时就 ...
- baby_web
点开页面获得提示 根据提示,访问index.php,但是会自己跳转到1.php 这时候抓包修改才ok才能定位到index.php
- 为React Ant-Design Table增加字段设置
最近做的几个项目经常遇到这样的需求,要在表格上增加一个自定义表格字段设置的功能.就是用户可以自己控制那些列需要展示. 在几个项目里都实现了一遍,每个项目的需求又都有点儿不一样,迭代了很多版,所以抽时间 ...
- 提高cin cout的速度
ios::sync_with_stdio(false) :用来关闭iostream与stdio的同步,从而提高 cin cout 的效率,但是就不能再用 scanf printf 了,因为不关闭之前 ...
- 编程技巧 --- VS如何调试.Net源码
引言 如题,在VS中如何调试 .Net 源码呢? 一般来说,VS2022,都是默认启用 F12 转到定义能够看到源码,如果大家发现自己无法使用 F12 查看源码,可以在 "工具" ...
- 12k Star、40万+开发者信赖的开源商城系统
前几天,有位读者问我有没有什么优秀的国产开源电商平台,他要拿来接单赚外快.我一听这话,精神头就来了. 所以,今天 HelloGitHub 就给大家找来了一款自用.二开都很方便的国产开源商城系统--CR ...