域名的分级,一般分为: 主机名.三级域名.二级域名.顶级域名. 。注意了,. 表示根域。如下图所示
image.png
域名查询的过程
举例:解析 www.stanford.com
①、先查询本地缓存,如果本地缓存中有记录直接返回
②、如果本地缓存没有,则查询本地 DNS 服务器,如果本地 DNS 服务中有记录,则返回
③、如果本地 DNS 服务器中没有, 则会发送请求到 根服务器中查询,如果 根服务器中有记录则直接返回
④、如果根服务器没有,则那 根服务器会将它所管理的 顶级域名(com)对应的 IP地址返回
⑤、步骤④中返回了 顶级域名(com)的ip地址,本地DNS 服务器会逐个到这些 顶级域名(com)去到,看看有没有记录。
⑥、如果顶级域名也没有,那就到顶级域名下的二级域名中查找。依次下去直到找到为止
⑦、如果找到了,本地DNS服务器会将结果缓存起来。
图解展示:
image.png

安装 DNS 服务器

  1. yum -y install bind
  2. yum -y install bind-chroot
  3. yum -y install bind-utils

bind 软件包:主程序包提供了 DNS 服务,bind是 DNS协议的一种实现
bind-chroot 软件包:主要使得 bind 软件运行在 chroot 模式下,这样 bind 运行在相对路径的根路径,而不是 Linux 真正的根路径。例如:操作系统的根目录是 / , 而装了 bind-chroot 后 bind软件运行的根目录就是 /var/named/chroot。 如果被人通过 DNS 服务入侵了,那他也只能访问 /var/named/chroot 目录下的文件。其他
目录的文件他就没法访问。
bind-utils 软件包:提供了 DNS 查询工具,如 dig、host、nslookup。

DNS配置文件说明

没装bind-chroot,主配置文件

主配置文件:/etc/named.conf
区域文件:/var/named/ 目录下
装了bind-chroot, bind-chroot改变我们的根路径(原来是 /, 现在的根是 /var/named/chroot)
主配置文件:/var/named/chroot/etc/named.conf
区域文件:/var/named/chroot/var/named/ 目录下

主配置文件

创建主配置文件

手工创建 name.conf 主配置文件

  1. touch /var/named/chroot/etc/named.conf
  2. chmod 640 /var/named/chroot/etc/named.conf
  3. chown root.named /var/named/chroot/etc/named.conf

image.png
除了手工创建 name.conf 主配置文件的方式,我们还可以拷贝 /etc/named.conf 文件到
/var/named/chroot/etc/ 目录下,然后对其进行更改。采用如下命令

  1. cp -p /etc/named.conf /var/named/chroot/etc/

编辑主配置文件

正面解析 demo

编辑 主配置文件

  1. vim /var/named/chroot/etc/named.conf

文件内容为:

  1. options {
  2. listen-on port 53 { any; };
  3. directory "/var/named";
  4. };
  5. // 定义根域
  6. // 用于 本地DNS 向根服务器递归查询
  7. zone "." IN {
  8. type hint;
  9. // 保存 DNS根服务器地址
  10. file "named.ca";
  11. };
  12. //定义一个主域
  13. zone "abc.com" IN {
  14. type master;
  15. // 指定区域文件名
  16. file "abc.com.zone";
  17. };

区域文件

创建区域文件

手工创建区域文件 abc.com.zone

  1. touch /var/named/chroot/var/named/abc.com.zone
  2. chmod 640 /var/named/chroot/var/named/abc.com.zone
  3. chown root.named /var/named/chroot/var/named/abc.com.zone

除了手工创建区域文件外,我们还可以拷贝区域文件模板,在此基础上进行修改

  1. cp -p /var/named/named.localhost /var/named/chroot/var/named/abc.com.zone

编辑区域文件

  1. vim /var/named/chroot/var/named/abc.com.zone

文件内容如下:

  1. $TTL 1D
  2. @ IN SOA dns1.abc.com. rname.invalid. (
  3. 0 ; serial
  4. 1D ; refresh
  5. 1H ; retry
  6. 1W ; expire
  7. 3H
  8. ) ; minimum
  9. NS dns1.abc.com.
  10. dns1 A 192.168.0.241
  11. www A 192.168.0.100
  12. news CNAME www

语法检查

主配置文件语法检查

  1. named-checkconf /var/named/chroot/etc/named.conf

区域文件语法检查

拿域名为 abc.com 举例

  1. named-checkzone abc.com /var/named/chroot/var/named/abc.com.zone

named-chroot服务相关命令

  1. systemctl start named-chrooot # 启动
  2. systemctl restart named-chrooot # 重启
  3. systemctl status named-chrooot # 查看状态
  4. systemctl enable named-chroot ##设置开机启动

报错

image.png
原因是我们在 /var/named/chroot/etc/named.conf 主配置文件中配置了根域(named.ca),在/var/named/chroot/var/named/ 目录下 找不到 named.ca,因此报错。解决方法:

  1. cp -p /var/named/named.ca /var/named/chroot/var/named/

测试

启动 named-chroot 服务

  1. systemctl start named-chroot

关闭防火墙、Selinux

image.png

云服务器上开放端口

直接把 udp 和 tcp 的 53 号端口开放

配置 DNS 设置

使用的是虚拟机中的 linux 做客户端,需要配置这台 linux 的dns,连接上云服务器(124.70.178.21)的DNS 服务器

  1. vim /etc/resolv.conf

image.png

域名解析

在虚拟机的linux,使用 nslookup 测试域名解析是否正确
image.png

存在的问题

我们可以看到此时 解析自己编写的域名记录是没有问题了,但解析外网的记录就无法解析。如图:
image.png

解决方法

编辑主配置文件(/var/named/chroot/etc/named.conf),添加转发设置。
当我们本地 DNS 服务器无法解析的时候,就会将请求转发给外部 DNS 服务器解析
image.png
再次测试:
image.png

小总结

正向解析小总结

没有安装 named-chroot

主配置文件:/etc/named.conf
区域文件存放在:/var/named/
这些文件的 权限 640,所属用户 root ,所属组 named
服务名 named , named服务的启动 、状态、停止命令:

  1. systemctl start named
  2. systemctl status named
  3. systemctl stop named
  4. systemctl enable named # 服务的开机启动

安装 named-chroot

主配置文件: /var/named/chroot/etc/named.conf
区域文件存放在:/var/named/chroot/var/named/
这些文件的 权限 640,所属用户 root ,所属组 named
服务名 named-chroot , named-chroot服务的启动 、状态、停止命令:

  1. systemctl start named-chroot
  2. systemctl status named-chroot
  3. systemctl stop named-chroot
  4. systemctl enable named-chroot # 开机启动

主配置文件 named.conf

  1. options {
  2. listen-on port 53 { any; }; // 监听IPv4 53端口, any表示 允许任何人连接
  3. directory "/var/named"; // 指定区域文件存放的路径
  4. allow-query { any; }; // #指定允许哪些主机可以进行普通的DNS查询,可以是关键字:any/localhost/none,也可以是IPV4,IPV6地址
  5. recursion yes; //开启递归查询,默认值是 yes
  6. forward first;
  7. forwarders {
  8. 223.5.5.5;
  9. 223.6.6.6;
  10. 8.8.8.8;
  11. };
  12. };
  13. // 定义根域
  14. // 用于 本地DNS 向根服务器递归查询
  15. zone "." IN {
  16. type hint;
  17. // 保存 DNS根服务器地址
  18. file "named.ca";
  19. };
  20. //定义一个主域
  21. zone "abc.com" IN {
  22. // 类型为master
  23. type master;
  24. // 指定区域文件名
  25. file "abc.com.zone";
  26. };
  27. zone "baidu.com" IN {
  28. type master;
  29. // 指定区域文件
  30. file "baidu.com.zone";
  31. };

区域文件

拿 abc.com.zone 文件举例:
image.png

文件语法检查

主配置文件

  1. named-checkconf /var/named/chroot/etc/named.conf

区域文件:

  1. named-checkzone abc.com /var/named/chroot/var/named/abc.com.zone

反向解析

即通过对 ip 地址得到域名
之前的正向解析 www.abc.com -> 得到 192.168.0.100
反向解析 192.168.0.100 -> 得到 www.abc.com

主配置文件

主配置文件添加反向解析zone

编辑主配置文件

  1. vim /var/named/chroot/etc/named.conf

在最后添加反向解析的内容:

  1. // 定义一个反向解析,网段反写
  2. zone "0.168.192.in-addr.arpa" IN {
  3. type master;
  4. file "192.168.0.arpa";
  5. };

反向解析区域文件

创建反向解析的区域文件,修改所属用户和组,文件的权限。

  1. touch /var/named/chroot/var/named/192.168.0.arpa
  2. chown root.named /var/named/chroot/var/named/192.168.0.arpa
  3. chmod 640 /var/named/chroot/var/named/192.168.0.arpa

编辑区域文件

  1. vim /var/named/chroot/var/named/192.168.0.arpa

其内容如下:

  1. $TTL 1D
  2. 0.168.192.in-addr.arpa. IN SOA dns1.abc.com. rname.invalid. (
  3. 0 ; serial
  4. 1D ; refresh
  5. 1H ; retry
  6. 1W ; expire
  7. 3H ) ; minimum
  8. NS dns1.abc.com.
  9. 100 PTR www.abc.com.

测试

image.png