参考

https://blog.csdn.net/esonbest1234/article/details/50729532 核心参考
https://blog.csdn.net/charleslei/article/details/41154139 DNS扫盲
https://www.cnblogs.com/winstom/p/11806962.html 配置文件参考
https://blog.csdn.net/bbwangj/article/details/82079405
https://linux.cn/article-4735-1.html

这几个问题是上面一篇文章问的,所以我学习了一下dns的部分概念,在上一篇博客中均有答案。

什么是 DNS 的授权模式 是怎样进行的

请解释 zone 和 domain 的差别。

什么是 DNS 正解和反解
正向解析:从域名解析到IP
反向解析:从IP解析到域名

什么是 DNS 的查询模式﹖查询过程是怎样进行的﹖
迭代、递归

请解释 DNS cache 的作用和它对查询流程的影响。


使用BIND提供
自定义内网域名服务

BIND简介

现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Internet Systems Consortium)编写和维护。
BIND支持先今绝大多数的操作系统(Linux,UNIX,Mac,Windows)
BIND服务的名称称之为named
DNS默认使用UDP、TCP协议,使用端口为53(domain),953(mdc,远程控制使用)

BIND安装

使用系统:centos 7
image.png
这里可以还源,如果有代理可以不换,上代理一把梭
命令一把梭 :yum install -y bind bind-chroot bind-utils
其中bind-chroot和bind-utils是bind的相关包。
bind-chroot 是通过相关文件封装在一个伪根目录内,已达到安全防护的目的,一旦程序被攻破,将只能访问伪根目录内的内容,而不是真实的根目录。
chroot相关介绍:https://blog.csdn.net/guodongsoft/article/details/52549573
image.png

BIND的配置

1、BIND配置文件保存在两个位置:
/etc/named.conf - BIND服务主配置文件
/var/named/ - zone文件(域的dns信息)
image.png
如果安装了bind-chroot(其中chroot是 change root 的缩写),BIND会被封装到一个伪根目录内,配置文件的位置变为:
/var/named/chroot/etc/named.conf - BIND服务主配置文件
/var/named/chroot/var/named/ - zone文件
image.png
2、BIND安装好之后不会有预制的配置文件,但是在BIND的文档文件夹内(/usr/share/doc/bind-9.11.4),BIND为我们提供了配置文件模板,我们可以直接拷贝过来:
cp -R /usr/share/doc/bind-*/sample/var/named/* /var/named/chroot/var/named/
同时将named.conf 拷贝到这个目录下
cp -p /etc/named.conf /var/named/chroot/etc/named.conf
还需要在 bind chroot 目录中创建 bind 的相关文件,并对锁定文件设置为可写

  1. touch /var/named/chroot/var/named/data/cache_dump.db
  2. touch /var/named/chroot/var/named/data/named_stats.txt
  3. touch /var/named/chroot/var/named/data/named_mem_stats.txt
  4. touch /var/named/chroot/var/named/data/named.run
  5. mkdir /var/named/chroot/var/named/dynamic
  6. touch /var/named/chroot/var/named/dynamic/managed-keys.bind
  7. chmod -R 777 /var/named/chroot/var/named/data
  8. chmod -R 777 /var/named/chroot/var/named/dynamic

3、配置BIND服务的主配置文件(/var/named/chroot/etc/named.conf),命令:
vim /var/named/chroot/etc/named.conf
因为我们需要配置成为内网DNS,所有需要编辑两处
在 IPV4监听处,配置为本机IP。
另外允许查询的机器需要修改为 any;这里同样可以指定网段,如172.16.1.1/16。
image.png

4、 在配置文件最下方加上自己想要部署的区域
image.png

5、随后在 /var/named/chroot/var/named 路径下新建 venustest.com.zone 文件,复制一份named.localhost
image.png

6、修改venustest.com.zone 配置文件 加入自己想加入的A记录(解析记录)
image.png

7、将named 服务 以 bind-chroot 启动

  1. /usr/libexec/setup-named-chroot.sh /var/named/chroot on
  2. systemctl stop named
  3. systemctl disable named
  4. systemctl start named-chroot
  5. systemctl enable named-chroot
  6. ps -ef |grep named

image.png
8、一切就绪之后设置为本地dns服务器。访问域名 或者 dig、nslookup 都能验证
image.png
image.png

配置从服务器

在新的服务器上,同样的流程安装到第三步。
4、 在从服务 named.conf 上配置从服务器的信息

  1. zone "venustest.com" IN {
  2. type slave; //当前服务器类型为 slave
  3. masters { 172.16.50.215; }; // 当前区域内 master primary 服务器是谁
  4. file "slaves/venustest.com.zone"; // 通过区域传送下载的文件存放在哪个路径
  5. };

随后需要修改一下 primary 服务器的 named.conf
在options 的文件中加上 allow-transfer {172.16.50.216; };
这里 216 是从服务器的IP地址。

  1. options {
  2. listen-on port 53 { 172.16.50.215; };
  3. listen-on-v6 port 53 { ::1; };
  4. directory "/var/named";
  5. dump-file "/var/named/data/cache_dump.db";
  6. statistics-file "/var/named/data/named_stats.txt";
  7. memstatistics-file "/var/named/data/named_mem_stats.txt";
  8. recursing-file "/var/named/data/named.recursing";
  9. secroots-file "/var/named/data/named.secroots";
  10. allow-query { any; };
  11. allow-transfer {172.16.50.216; };

因为bind是用named 用户组内 用户启动的。
所以我们需要将 /var/named/chroot/var/named 配置属于 named 用户组,配置之前他属于 root
chown named /var/named/chroot/var/named/slaves

  1. /usr/libexec/setup-named-chroot.sh /var/named/chroot on
  2. systemctl stop named
  3. systemctl disable named
  4. systemctl start named-chroot
  5. systemctl enable named-chroot
  6. ps -ef |grep named

启动之后 区域数据文件 就通过 域传送 传送过来了

  1. [root@localhost slaves]# pwd
  2. /var/named/chroot/var/named/slaves
  3. [root@localhost slaves]# ll
  4. 总用量 12
  5. -rw-r--r--. 1 root root 56 9 26 10:45 my.ddns.internal.zone.db
  6. -rw-r--r--. 1 root root 56 9 26 10:45 my.slave.internal.zone.db
  7. -rw-r--r--. 1 named named 346 9 26 10:59 venustest.com.zone
  8. [root@localhost slaves]#

本地我们再测试一下

  1. [root@localhost slaves]# dig oa.venustest.com
  2. ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> oa.venustest.com
  3. ;; global options: +cmd
  4. ;; Got answer:
  5. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23241
  6. ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
  7. ;; OPT PSEUDOSECTION:
  8. ; EDNS: version: 0, flags:; udp: 4096
  9. ;; QUESTION SECTION:
  10. ;oa.venustest.com. IN A
  11. ;; ANSWER SECTION:
  12. oa.venustest.com. 86400 IN A 172.16.50.134
  13. ;; AUTHORITY SECTION:
  14. venustest.com. 86400 IN NS venustest.com.
  15. ;; ADDITIONAL SECTION:
  16. venustest.com. 86400 IN AAAA ::1
  17. venustest.com. 86400 IN A 127.0.0.1
  18. ;; Query time: 0 msec
  19. ;; SERVER: ::1#53(::1)
  20. ;; WHEN: 9 26 11:15:32 CST 2021
  21. ;; MSG SIZE rcvd: 119
  22. [root@localhost slaves]#

到这儿就OK啦。