CentOS6.6下DNS服务器的搭建
Linux下的DNS的软件包为bind,有如下几个软件包:
bind #DNS服务的主程序
bind-utils # 工具,包含dig,nslookup等网络诊断工具。
bind-chroot # 修改named 的root目录,这样named被入侵后,黑客也被限制在指定的目录下,不能切换到/,避免造成更大的破坏。【下面的演示中,为了简单起见就没安装该组件】
# 安装bind软件包
yuminstall bind bind-utils -y
# 查看bind 、bind-utils生成哪些文件(仅列出部分文件)
[root@Master ~]# rpm -ql bind
/etc/named
/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #事先定义好的区域文件
/etc/named.root.key # 实现事物签名的秘钥文件
/var/named # 默认DNS解析记录的数据文件
/var/named/slaves # 从DNS的配置文件目录
[root@Master ~]# rpm -ql bind-utils
/usr/bin/dig # 域信息搜索器
/usr/bin/host
/usr/bin/nslookup
说明:dig(DNS lookup utility)域信息搜索器命令。
dig的常用命令格式:
dig –t 资源记录类型名称@server-ip
dig –x IP @DNS_IP 反向解析
dig –t axfr zone 验证完全区域传送
dig –t ixfr zone 验证增量区域传输(通常需要指定序列号)
named-checkconf工具
格式:named-checkconf [主配置文件]
例如:named-checkconf /var/named/named.conf
named-checkzone工具
格式:named-checkzone <域名> <区域数据文件>
例如:named-checkzone /var/named/
实验一:本地搭建DNS服务器,实现指定域名的解析
vi/etc/named,conf 内容如下:
options { listen-onport 53 { 192.168.2.7; }; # 在本机192.168.2.7的53端口监听 // listen-on-v6 port 53 {::1; }; 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 { 192.168.2.0/24; }; #any表示允许所有,这样会导致网络结构泄露。一般不建议这样设置 #192.168.2.0/24表示网段,192.168.2.112表示指定IP recursion yes; #是否允许为客户机进行递归查询 dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key*/ bindkeys-file"/etc/named.iscdlv.key"; managed-keys-directory"/var/named/dynamic"; }; logging { channel default_debug{ file"data/named.run"; severitydynamic; }; }; zone "." IN { type hint; file""; }; zone "." IN { #区域名称为,后面的配置中就是用@代替这个区域的 typemaster; file".zone"; }; zone "2.168.192.in-addr.arpa" IN { typemaster; file"2.168.192.arpa"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
# 编写名称解析数据文件
cd/var/named/
touch .zone 2.168.192.arpa
chownroot:named /var/named/2.168.192.arpa
chownroot:named /var/named/.zone
chmod644 /var/named/2.168.192.arpa
chmod644 /var/named/.zone
注意:
必须要修改解析库文件的属组为named
,正向解析的文件内容如下:
$TTL 1D @ IN SOA . admin.. ( 2015092010 1M 5M 1H 1D) IN NS ns1.. IN MX 10 mail ns1 IN A 192.168.2.7 mail IN A 192.168.2.7 www IN A 192.168.2.7 www IN A 192.168.2.9 ftp IN CNAME 192.168.2.8 www0 IN CNAME www www1 IN CNAME www
# 说明:上面的www 有2条A记录,DNS解析到192.168.2.7和192.168.2.9,可以达到负载均衡的效果。
正向解析的文件格式如下:
$TTL 1D ;定义TTL为1天
; 必须首先定义一个SOA记录,@代表相应的区域,每个区域数据文件只能有一个SOA。SOA后面跟的是这个区域的授权主机名称,和管理者的邮箱。
@ IN SOA . Admin.. ( # 注意区域地址、管理员邮箱地址 的 点号不能忘掉
20150914027 ; 序列号,该序号不更新的话,任何所做的更改都不会同步到其他DNS服务器上【不超过10位】
1M ; 定义辅助DNS每隔多久检查一次主DNS服务器的版本号
5M ; 同步失败后,再次重试需要的间隔时间
1H ; 过期时间(超过该时间主DNS还没有响应,辅助DNS也停止工作)
1D) ; 否定答案的缓存时长
说明: M分钟、H小时、D天、W周。默认是秒
vi2.168.192.in-addr.arpa,反向解析的文件内容如下:
$TTL 1D @ IN SOA . admin.. ( 2015032312 1M 5M 1H 1D) IN NS ns1.. 7 IN PTR www.. 9 IN PTR www.. 7 IN PTR www0.. 8 IN PTR ftp.. 7 IN PTR mail.. 7 IN PTR www1..
说明
反向区域文件基本结构和正向区域数据文件基本完全相同,只不过这里多出了一个PTR选项。
PTR用来定义一个反向记录,也就是通过IP可以查到对应的域名信息。最后几行的第一列表示是主机的IP地址,只不过省略了网络地址部分,系统会自动补全,如13对应的是192.168.2.13
service named start #启动dns服务器
# dig命令进行访问测试
1.正向解析:
dig -t a www1. @192.168.2.7
dig -t a ftp. @192.168.2.7
2.反向解析
DNS服务器本机上测试
windows7 上测试:
实验二:构建主从DNS服务器,实现指定域名的解析
在实验1的基础上,
修改Master服务器的/etc/named.conf文件,
options { listen-onport 53 { 192.168.2.7; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; allow-query { 192.168.2.0/24; }; recursion yes; ........ zone "." IN { type hint; file""; }; zone "" IN { typemaster; allow-transfer{ 192.168.2.12;}; file".zone"; }; zone "2.168.192.in-addr.arpa" IN { typemaster; allow-transfer{ 192.168.2.12;}; file"2.168.192.arpa"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
vi /var/named/.zone内容如下:
$TTL 1D @ IN SOA . admin.. ( 2015092010 1M 5M 1H 1D) IN NS ns1.. IN NS ns2.. ;Slave也要在这里配置个NS记录 IN MX 10 mail ns1 IN A 192.168.2.7 ns2 IN A 192.168.2.12 ; Slave也要在这里配个A记录 mail IN A 192.168.2.7 www IN A 192.168.2.7 www IN A 192.168.2.9 ftp IN CNAME 192.168.2.8 www0 IN CNAME www www1 IN CNAME www
编辑/var/named/2.168.192.arpa ,内容如下:
$TTL 1D @ IN SOA . admin.. ( 2015032315 1M 5M 1H 1D ) IN NS ns1.. IN NS ns2.. 7 IN PTR www.. 7 IN PTR ns1.. 12 IN PTR ns2.. 9 IN PTR www.. 7 IN PTR www0.. 7 IN PTR www1.. 8 IN PTR ftp.. 7 IN PTR mail..
# 配置SlaveDNS服务器
vi/etc/named.conf
options { listen-onport 53 { 192.168.2.12; }; # 本机地址 directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; allow-query { 192.168.2.0/24; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key*/ bindkeys-file"/etc/named.iscdlv.key"; managed-keys-directory"/var/named/dynamic"; }; logging { channel default_debug{ file"data/named.run"; severitydynamic; }; }; zone "." IN { type hint; file""; }; zone "." IN { typeslave; masters{ 192.168.2.7; }; file"slaves/.zone"; }; zone "2.168.192.in-addr.arpa" IN { typeslave; masters{ 192.168.2.7; }; file"slaves/2.168.192.arpa"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
servicenamed restart # 重启named服务即可
ls/var/named/slaves # 查看目录下是否同步到了dns数据库文件,正常同步后,目录下应该有类似下图的2个文件生成。
# 如果无法正常工作,请tail查看日志 :tail -n 50 /var/log/messages | grep named
补充:
Slave端DNS服务首次启动,可以先执行一次dig axfr @192.168.2.7,完全区域传输一下解析文件。
# 然后在slave上执行dig命令测试
# 修改主配置,查看从能同步
修改下Master的解析库文件(修改主的解析条目的时候,必须一并将serial改大些,否则Slave检测到serial数值未变大,不会更新)
然后再在Slave上执行rndc reload,发现Slave的解析库文件内容也同步了,说明主从同步实验成功。
# 还可以将Master的服务暂时停掉,测试slave能否工作:
dig -t a www1. @192.168.2.12
如下图,dig命令仍然返回结果,说明我们的slave在工作中:
实验三:缓存DNS服务器的搭建
缓存服务器的构建,比较简单,就是在最原始的配置文件中修改:
listen-onport 53 { ***.***.***.***; };
allow-query { ** };
然后在options {};容器里面加入forwarders { IP(这是主域名服务器的ip地址);};
例如:
options { listen-on port 53 {***.***.***.***; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; allow-query { **; }; recursion yes; forwarders{192.168.2.7;192.168.2.12; }; #格式: forwarders{ IP(这是主域名服务器的ip地址);}; ....下面都是最原始的文件named.conf ...... }
然后执行service named start即可。
实验四:单台DNS构建分离解析
# 配置过程中主从+分离解析一直出现问题。因此这里先以单台DNS构建分离解析。
Client_1:192.168.2.10/24
Client_2:192.168.2.11/24
DNS_Server:192.168.2.7/24
具体操作如下:
vi /etc/named.conf 编辑内容如下:
options { listen-on port 53 {192.168.2.7; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; allow-query { 192.168.2.0/24; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key*/ bindkeys-file"/etc/named.iscdlv.key"; managed-keys-directory"/var/named/dynamic"; }; logging { channel default_debug{ file"data/named.run"; severitydynamic; }; }; view "local" { match-clients {192.168.2.10; }; # 客户端地址是192.168.2.10的匹配local规则 zone "." IN { type hint; file ""; }; zone "." IN { type master; file".zone.local"; }; zone "2.168.192.in-addr.arpa" IN { type master; file"2.168.192.arpa.local"; }; }; view "others" { match-clients { any; }; # 客户端地址非192.168.2.10的匹配others规则 zone "." IN { type hint; file""; }; zone "." IN { type master; file".zone.others"; }; zone "2.168.192.in-addr.arpa" IN { zone "2.168.192.in-addr.arpa" IN { type master; file"2.168.192.arpa.others"; }; }; # include "/etc/named.rfc1912.zones"; # 注释掉这一行 include "/etc/named.root.key";
# 配置区域解析文件
cd/var/named/
# 简单起见,我先只配置了最基本的www解析
# 配置匹配local的解析文件:
.local
$TTL 86400 @ IN SOA . admin.. ( 2015092019 1M 5M 1H 1D) IN NS ns1.. ns1 IN A 192.168.2.7 www IN A 192.168.2.9
vi2.168.192.arpa.local
$TTL 1D @ IN SOA . admin.. ( 2015032315 1M 5M 1H 1D) IN NS ns1.. 7 IN PTR ns1.. 9 IN PTR www..
# 配置匹配others的解析文件:
.others
$TTL 86400 @ IN SOA . admin.. ( 2015092019 1M 5M 1H 1D) IN NS ns1.. ns1 IN A 192.168.2.7 www IN A 192.168.2.3
vi2.168.192.arpa.others
$TTL 1D @ IN SOA . admin.. ( 2015032315 1M 5M 1H 1D) IN NS ns1.. 7 IN PTR ns1.. 3 IN PTR www..
chownroot:named 2.168.192.arpa* .zone* #修改数据文件的属组
named-checkconf # 检查下语法
rndcreload # 重启named服务
# 在不同的客户端进行访问测试
在Client1和Client2上执行dig -t A
结果如下图,可以看到不同IP访问相同的域名,会自动转到不同的IP上。