如何在 Linux 环境下配置 DNS 域名解析服务

2018 年 12 月 10 日 Linux爱好者

(给Linux爱好者加星标,提升Linux技能


作者:Jake Tian(本文来自作者投稿,简介见末尾)



DNS系统的作用


DNS系统在网络中的作用就是维护着一个地址数据库,其中记录了各种主机域名与IP地址的对应关系,以便为客户程序提供正向或反向的地址查询服务,即正向解析与反向解析。


  • 正向解析:根据域名查IP地址,即将指定的域名解析为相对应的IP地址。

  • 反向解析:根据IP地址查域名,即将指定的IP地址解析为相对应的域名。


DNS系统的类型


  • 缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。

  • 主域名服务器:维护某一个域名DNS区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器、官方服务器。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。

  • 从域名服务器:与主域名服务器提供完全相同的DNS域名服务,通常用于DNS服务器的热备份。


Bind不是唯一能够提供域名服务的DNS服务程序,可以运行在大多数Linux和UNIX主机中。官方:https://www.isc.org/


Bind服务控制


bind软件包安装完毕以后,会自动增加一个名为named的系统服务,通过脚本文件/etc/init.d/named或service工具都可以控制DNS域名服务的运行。默认监听端口:53


安装步骤如下:


准备工作:首先开启两台服务器,配置静态IP地址,关闭防火墙和selinux并查看系统中所包含bind的rpm包。


1)bind:提供了域名服务的主要程序及相关文件

2)bind-utils:提供了对DNS服务器的测试工具程序,如nslookup等。

3)bind-libs:提供了bind。bind-utils需要使用的库函数

4)bind-chroot为bind服务提供了一个伪装的根目录,已提供安全性。


默认已经安装了bind-utils和bind-libs,所以只需要安装bind和bind-chroot即可。


[root@localhost Packages]# mkdir /media/cdrom
[root@localhost Packages]# mount /dev/cdrom /media/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost Packages]# cd /media/cdrom/Packages/
[root@localhost Packages]# ls | grep "^bind"
bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
bind-dyndb-ldap-2.3-5.el6.x86_64.rpm
bind-libs-9.8.2-0.17.rc1.el6_4.6.i686.rpm
bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
[root@localhost Packages]
[root@localhost Packages]# rpm -qa | grep "^bind"
bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64
bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64
[root@localhost Packages]# rpm -ivh bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm 
warning: bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
  1:bind                   ########################################### [100%]
[root@localhost Packages]# rpm -ivh bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm 
warning: bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
  1:bind-chroot            ########################################### [100%]
[root@localhost Packages]#


修改主配置文件先备份


主配置文件named.conf通常位于/etc/目录下,在named.conf文件中,主要包括全局配置、区域配置两个部分,每一条配置记录的行尾以分号“;”表示结束,以“#”号或“//”开始的部分表示注释文字。


全局配置参数包括“option { };”的大括号中,可以设置监听的地址和端口、区域数据文件存放的目录、允许哪些客户机查询等。


区域配置参数使用“zone ...... { };”的配置格式,一台DNS服务器可以为多个区域提供解析,因此在named.conf文件中也可以有很多个zone配置段。


每个zone区域都是可选的,包括根域、回环域、反向域,具体根据实际需要而定,zone配置部分的“IN”关键字也可以省略。


反向区域的名称由倒序的网络地址和“.in-addr.arpa”组合而成。


file配置项用于指定实际的区域数据文件,文件名称由管理员自行设置。


区域配置中的部分参数也可以放在全局配置中。


touch named.beifen

cp named.conf named.beifen


[root@localhost etc]# vim /etc/named.conf 
options {
directory "/var/named";            #定义区域数据文件的默认存储位置  
};

zone "jt.com" IN {                #正向区域
   type master;                                   #类型为master(主服务器)  
   file "jt.com.zone";           #区域数据文件名为jt.com
   allow-update { none; };
};

zone "3.168.192.in-addr.arpa" IN {  #反向区域
       type master;                                      #类型为master(主服务器)
       file "192.168.3.arpa";     #区域数据文件名为192.168.3.arpa
};


修改区域文件


cd /var/named


[root@localhost named]# vim jt.com.zone
$TTL 86400     //TTL配置用于设置默认生存周期。即缓存解析结果的有效时间。
@ SOA jt.com. admin.jt.com. (  //SOA记录部分用于设置区域名称,管理邮箱,以及为从域名服务器指定更新参数。
       20181202 //更新序列号
       4H    //刷新时间:重新下载数据的间隔
       30M   //重试延时:下载失败后的重试间隔
       12H   //失效时间:超过该时间仍无法下载则放弃
       1D   //无效解析记录的生存周期
)


@       IN      NS      jt.
www     IN      A       192.168.3.111 #这里要写DNS服务器的IP地址,也可以是主机名。
hhh     IN      A       192.168.3.112

[root@localhost named]# vim 192.168.3.arpa
$TTL 86400
@ SOA jt.com. admin.jt.com. (
       20181202 //更新序列号
       4H     //刷新时间:重新下载数据的间隔                    
       30M     //重试延时:下载失败后的重试间隔
       12H     //失效时间:超过该时间仍无法下载则放弃
       1D     //无效解析记录的生存周期
)
       IN      NS                      jt.
111     IN      PTR                     www.jt.com.
112     IN      PTR                     hhh.jt.com.


在/etc/resolv.conf文件中“服务地址”改为本地IP,配置完成后,用named-checkconf检查,启动named服务,并进行验证域名解析(正向和反向)


[root@localhost named]# vim /etc/resolv.conf 

# Generated by NetworkManager
domain localdomain
search localdomain
nameserver 192.168.3.111
[root@localhost named]# named-checkconf -z /etc/named.conf 
zone jt.com/IN: loaded serial 20181202
zone 3.168.192.in-addr.arpa/IN: loaded serial 20181202
[root@localhost named]# service named start
Generating /etc/rndc.key:                                  [确定]
启动 named:                                               [确定]
[root@localhost named]# nslookup www.jt.com
Server:    192.168.3.111
Address:  192.168.3.111#53

Name:  www.jt.com
Address: 192.168.3.111
[root@localhost named]# nslookup hhh.jt.com
Server:    192.168.3.111
Address:  192.168.3.111#53

Name:  hhh.jt.com
Address: 192.168.3.112

[root@localhost named]# nslookup 192.168.3.111
Server:    192.168.3.111
Address:  192.168.3.111#53

111.3.168.192.in-addr.arpa  name = www.jt.com.

[root@localhost named]# nslookup 192.168.3.112
Server:    192.168.3.111
Address:  192.168.3.111#53

112.3.168.192.in-addr.arpa  name = hhh.jt.com.

[root@localhost named]#


在从域名服务器上进行配置


[root@localhost named]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.3.111 jt
192.168.3.110 python


修改区域文件


cd /var/named


[root@localhost named]# vim 192.168.3.arpa 
$TTL 86400
@ SOA jt.com. admin.jt.com. (
       20181202
       4H
       30M
       12H
       1D
)
       IN      NS                     
jt.
       IN      NS                     python.
1111     IN      PTR                     www.jt.com.
1112     IN      PTR                     hhh.jt.com.
[root@localhost named]# vim jt.com.zone 
$TTL 86400
@ SOA jt.com. admin.jt.com. (
       20181202
       4H
       30M
       12H
       1D
)

@       IN      NS     jt.
@       IN      NS     python.
www     IN      A       192.168.11.111
hhh     IN      A       192.168.11.112


修改/etc/resolv.conf,并将主域名服务器和从域名服务器进行添加。


[root@localhost named]# vim /etc/resolv.conf 
# Generated by NetworkManager
domain localdomain
search localdomain
nameserver 192.168.3.111
nameserver 192.168.3.110


在从服务器添加配置文件


[root@localhost named]# vim /etc/named.conf 

options {
directory "/var/named";                                          
};
zone "jt.com" IN {                
   type slave;                               
   masters { 192.168.3.111; };
   file "slaves/jt.com.zone"
};
zone "3.168.192.in-addr.arpa" IN { 
       type slave;
       masters { 192.168.3.111; }
       file "slaves/192.168.3.arpa";
};


在从服务器上启动服务,查看是否同步。


[root@localhost slaves]service named restart
停止 named:.                                              [确定]
启动 named:                                               [确定]
[root@localhost slaves]ls
192.168.3.arpa  jt.com.zone


注意:关闭防火墙和selinux


验证结果:


在主服务器上停止named服务,用nslookup检查解析是否已经更改到从服务器。


在主服务器上开启named服务,用nslookup检查解析是否已经更改到主服务器。


[root@localhost slaves]nslookup www.jt.com
Server:    192.168.3.111
Address:  192.168.3.111#53

Name:  www.jt.com
Address: 192.168.3.111
[root@localhost slaves]service named stop
停止 named:.                                              [确定]
[root@localhost slaves]nslookup www.jt.com
Server:    192.168.3.110
Address:  192.168.3.110#53

Name:  www.jt.com
Address: 192.168.3.111
[root@localhost slaves]service named start
启动 named:                                               [确定]
[root@localhost slaves]nslookup www.jt.com
Server:    192.168.3.111
Address:  192.168.3.111#53

Name:  www.jt.com
Address: 192.168.3.111

[root@localhost slaves]#



【本文作者】


Jake Tian:一名热爱 Linux 技术的爱好者,现任职于一家互联网企业,在个人公众号“IT行业技术圈” 分享 Linux 及其他领域方面的技术文章。



推荐阅读

(点击标题可跳转阅读)

DNS 解析器比较:Google、CloudFlare、Quad9

在 Linux 上用 DNS 实现简单的负载均衡

Linux DNS 服务器安装、配置和维护



看完本文有收获?请分享给更多人

关注「Linux 爱好者」加星标,提升Linux技能

登录查看更多
0

相关内容

域名系统(英文: Domain  Name  System, DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
MIT新书《强化学习与最优控制》
专知会员服务
275+阅读 · 2019年10月9日
社区分享|如何让模型在生产环境上推理得更快
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
Kong 1.1 带来声明式配置与无数据库部署模式
开源中国
8+阅读 · 2019年3月28日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
12+阅读 · 2018年9月5日
Arxiv
7+阅读 · 2018年6月1日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
MIT新书《强化学习与最优控制》
专知会员服务
275+阅读 · 2019年10月9日
相关资讯
社区分享|如何让模型在生产环境上推理得更快
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
Kong 1.1 带来声明式配置与无数据库部署模式
开源中国
8+阅读 · 2019年3月28日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Top
微信扫码咨询专知VIP会员