自己搭建DNS服务器--基于Centos

DNS简介

DNS(Domain Name System, 域名系统),一种因特网通信协议的名称,它基于伯克利大学开发出的一套阶层式管理主机名对应IP的软件BIND,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

这个阶层式管理软件采用目录树结构,类似Linux文件系统,顶层是root根服务器,然后第二次是.com.edu.gov.mil.org.net这些常见的,其代表意思分别如下:

名称代表意义
com公司、行号、企业
org组织、机构
edu教育单位
gov政府单位
net网络、通信
mil军事单位

DNS协议运行在UDP协议之上,因此使用的53号端口,当没有办法查询到完整的信息时,就会再次以TCP协议来查询,因此,防火墙需要放行TCP、UDP的53号端口,端口号可以在/etc/services文件查看到:
/etc/services

DNS的正解、反解

  • 正解: 从主机名查询到IP的流程
  • 反解: 从IP反解析到主机名的流程(使用到这个功能,这个IP拥有者才可以)

一个正解或一个反解可以称为一个Zone。因为根域是root,因此一台正解DNS服务器,有两个Zone:其一就是root(.)代表的Zone->hint,其二就是关于自己域的正解Zone。

常用命令: dig与whois
dig

以主机www.linjk.cn为例:
这里写图片描述
命令输出主要有2部分:
* QUESTION SECTION
显示所要查询的内容,这里我是需要查询www.linjk.cn的IP地址,所以后面有一个A
* ANSWER SECTION
刚刚我查询的返回结果,A结果为182.254.229.254

如果需要反解一个IP地址对应得主机名,如下操作:
这里写图片描述
因为这个IP地址是云服务提供商给我分配的,不被我拥有,所以无法查询到结果。

whois

当我们想要查询某个域是被谁管的,也就是注册这个域名的用户的相关信息,不过,因为这个命令输出信息较详细,为了保护用户隐私,命令输出结果不见得完全正确,仅供参考。查询命令如下:
这里写图片描述
注意,不要有主机名www,我们是去查主机名的上一层:域。

DNS的客户端配置文件resolv.conf

resolv.conf文件是ISP的DNS服务器IP记录处,我使用的Mac电脑的这个文件内容如下:
这里写图片描述
这里指定了我这台电脑解析主机名时去哪台DNS服务器查,也可以配置多一个,如增加一个通用的DNS服务器:nameserver 168.95.1.1,但是建议不要设置超过3个,在网络出现问题,电脑会向每台DNS服务器发出连接请求而每次连接都有timeout时间的等待从而导致浪费很多时间,一般两个就可以了。

这里看到第10行,说明该文件是自动生成的,因为我电脑使用的DHCP方式上网,因此系统会主动使用DHCP服务器传来的数据进行系统配置文件的修订,因此,这种情况如果自己增加了一个服务器,可能会被刷新掉,可以告诉系统不要使用DHCP传来的值进行设置。

DNS服务器搭建

上面介绍了DNS的一些简单概念与命令,现在就开始搭建它吧。按照我的国际惯例,都是全新安装一个最小化的Linux系统,从零开始配置,系统就使用Centos7吧,安装方式采用最小化安装,实际使用过程中缺啥包再安装就是了:
这里写图片描述
这个过程对于学习过Linux的人来说都不难了,过程就不截图了,自个安装就ok了,安装完后,为了操作方便,使用ssh登录方式进行操作:
这里写图片描述
习惯性的,安装完系统后,首先执行sudo yum update进行系统软件更新先,另外,还需要备份系统关键命令和一些防火墙配置,这里只是演示DNS服务器的搭建,这些就略过了。

前面说到,DNS只是一种协议,真正提供服务的是bind软件,因此,现在来安装它:
sudo yum install bind-utils bind bind-chroot
为了提高安全性,通过bind-chroot来指定bind程序的根目录,centos6.x版本以上,目录为/var/named/chroot:
这里写图片描述
安装后有几个目录或文件是需要记得的:
* /etc/named.conf: 主配置文件
* /etc/sysconfig/named: 配置是否启动chroot及额外的参数
* /var/named: 数据库文件存放目录,存放主机名对应ip的文件
* /var/run/named: named程序执行时pid-file文件存放目录(在ubuntu系统中,目录为/run/named)

知道了这几个重要配置文件和目录后,下面开始配置:
* 主配置文件named.conf

修改配置文件前一个重要习惯是先复制一份,这样改错了方便恢复。
这里写图片描述

修改/etc/named.conf文件为如下所示:
这里写图片描述
重点说明
21行: 该设置值与Master/Slave DNS服务器之间的数据库传送有关,如果暂时没有Slave服务器,不要开启。
29~32行,这里增加一个centos.linjk的Zone,指定了其类型和zone file文件名称为named.centos.linjk,这里配置其为master DNS服务器。

接着新建并配置named.centos.linjk这个zone file文件,其路径位于/var/named:
这里写图片描述
重点说明
1行: 为了简化每笔RR记录的设置,将TTL挪到最前面统一设置,这里设置DNS缓存在对方服务器的时间为600秒
3行:DNS服务器名称
4行:DNS服务器的IP
7~9行:因为192.168.1.112这台主机有多个用途,这里根据CNAME别名配置了多个主机名指向同一个IP
10~11行:这里配置一个域名对应多个IP

后面根据实际需要,增加主机名到IP的映射即可,格式为[主机名] IN A [IP地址]

  • 反解配置,这里我暂时没用到,就不管先,用到再配置
    • N/A.

配置完成后,现在来启动:
这里写图片描述
再看看端口信息:
这里写图片描述

如果命令netstat没找到,安装net-tools包即可(也可用ss -lnt命令)。

接着看看日志,出现如下错误信息:
这里写图片描述
因为127.0.0.1的我没配置,所以问题不大,暂时不解决。下面看看解析的结果:
这里写图片描述
对比刚刚的zone file文件named.centos.linjk,可以看到主机名和IP映射都是对的。

注意:这里的dig命令我加了@192.168.1.112来指定使用指定DNS服务器来进行解析,否则会默认使用/etc/resolv.conf配置的来解析,另外也可以把192.168.0.112这台机加到/etc/resolve.conf里,这样就不用加参数了。

最后还有两点需要注意:
1. 默认DNS服务器监听在53端口,很明显,这是通用的一个协议,在网络上其他DNS主机监听到你有数据库需要更新的话,就会给你同步数据,造成网络带宽占用增加,我曾经就试过,因此,需要更改默认监听端口,这样就没事了,如下13和14行:
这里写图片描述

此时,如果使用dig命令,还需指定端口信息,加-p参数:

这里写图片描述

  1. 当添加或修改主机名到IP映射后,需要修改SOA的第三个参数,也就是201706xxx这个参数,然后重新启动named, 这样Slave DNS服务器才会及时更新

到这里,一个很基本的DNS服务器就搭建完成了,当然,还有很多事情要做,这里仅仅测试,就不做了,例如:
- 为了不间断提供DNS服务,最好需要2台DNS服务器来提供查询功能,且它们最好分散在不同IP,这样不会因网络中断造成影响
- 通常会配置一台主Master,1台或1台以上Slave DNS服务器

这些用到再查看文档自己配置即可,也不是很难。

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在CentOS 7上搭建DNS服务器,你可以按照以下步骤进行操作: 1. 安装BIND软件包: 在终端中执行以下命令来安装BIND软件包: ``` sudo yum install bind bind-utils ``` 2. 配置主配置文件: 编辑`/etc/named.conf`文件,该文件是BIND的主配置文件。你可以使用任何文本编辑器打开该文件,并进行以下配置: ```bash options { listen-on port 53 { any; }; listen-on-v6 port 53 { any; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; }; zone "example.com" IN { type master; file "/var/named/example.com.zone"; allow-update { none; }; }; ``` 这里使用了一个名为"example.com"的示例域名,你可以根据需要修改为你自己的域名。 3. 创建区域文件: 创建一个区域文件来存储DNS记录。在终端中执行以下命令来创建该文件: ```bash sudo nano /var/named/example.com.zone ``` 在打开的文件中,添加以下示例配置: ```bash $TTL 86400 @ IN SOA ns1.example.com. root.example.com. ( 2018010101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum @ IN NS ns1.example.com. @ IN A 192.168.1.100 ns1 IN A 192.168.1.100 www IN A 192.168.1.101 ``` 4. 设置文件权限和SELinux策略: 执行以下命令来设置文件权限: ```bash sudo chown named:named /var/named/example.com.zone ``` 执行以下命令来设置SELinux策略: ```bash sudo restorecon -v /var/named/example.com.zone ``` 5. 启动和配置BIND服务: 启动BIND服务并将其设置为开机自启动: ```bash sudo systemctl enable named sudo systemctl start named ``` 6. 配置防火墙规则: 如果系统上启用了防火墙,你需要打开DNS服务器的相关端口。执行以下命令来配置防火墙规则: ```bash sudo firewall-cmd --permanent --add-service=dns sudo firewall-cmd --reload ``` 现在,你已经在CentOS 7上成功搭建DNS服务器。你可以根据自己的需求添加更多的记录到区域文件中,并在客户端上配置DNS服务器地址来使用它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值