关于后端:使用bind搭建内网dns服务

46次阅读

共计 4137 个字符,预计需要花费 11 分钟才能阅读完成。

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…

https://downloads.isc.org/isc…

我这边是 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.16.30.x64.zip

本地解压后,cmd 里执行:

留神啊,如果不通,多半是 udp 53 端口被防火墙拦挡了。

重要文档

如果心愿理解更多配置文件选项:https://downloads.isc.org/isc…

yum 装置 bind:https://copr.fedorainfracloud…

bind 相干文档:https://www.isc.org/bind/

参考文档

https://blog.csdn.net/weixin_…

https://blog.csdn.net/u011288…

本文由 mdnice 多平台公布

正文完
 0