DNS(Domain Name System),即域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。DNS服务器的作用就是就好比生活中的电话簿、114查号台一样,为各种网络程序找到对应目标主机的IP地址或对应的主机域名。
部署DNS主从服务器能有更好的容错能力,在主服务器崩溃的情况下,能使用从服务器来解析域名,从服务器还能减轻主服务器的负载。
主从同步的原理:从服务器会监听主服务器的 TCP 53 端口,它会隔一段时间去探测主配置文件中的序列号,如果主端序列号更新后从端探测到会将主端内容同步到本地,主每次修改配置文件必须修改一下序列号,让序列号大于原来的序列号,主从同步主要根据序列号的变化。
系统:centos6.5
主服务器:192.168.30.60 vm96-yw-65-test-3060
从服务器:192.168.30.59 vm99-lz-65-test-3059
关闭selinux和iptables或者添加安全规则,不然主从不能进行同步。
yum install -y bind bind-utils bind-chroot
- bind是主程序
- bind-utils是工具包,包括dig、nslookup等NDS命令
- bind-chroot为bind提供一个伪装的根目录以增强安全性(将“/var/named/chroot/”文件夹作为BIND的根目录)
- /etc/named.conf,/etc/named.rfc1912.zones是主配置文件
- /var/named/named.ca是根区域解析库文件
- /var/named/named.localhost, /var/named/named.loopback 是本机和环回地址的解析库文件
- rndc—remote name domain controller这是一个辅助管理工具,默认情况下与BIND安装在同一主机,而且只能通过127.0.0.1连接named进程,监听的端口号是TCP/953。
[root@vm96-yw-65-test-3060 ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; ##修改为any,表示允许所有网段的主机。为安全考虑也可以改成自己所在的内网网段
#listen-on-v6 port 53 { ::1; }; ##选择注释掉这一行,注释与否均可,这是监听ipv6的端口
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; }; ##改为any,表示接受所有网段
recursion yes; ##不修改,这个选项控制是否开启服务器的递归查询功能
dnssec-enable no; ##这部分是设置DNSSEC的。把它关掉,默认为yes。
dnssec-validation no; ##关掉,默认为yes。
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
只修改option段,其余段不变。options是全局配置,logging是日志配置,最后是区域解析库配置以及所包含的区域解析库文件配置。
在文件末尾添加一个正向解析区域和一个反向解析区域
[root@vm96-yw-65-test-3060 ~]# vim /etc/named.rfc1912.zones
zone "weli.com" IN {
type master; ###定义区域类型,type可选值为:hint(根的)|master(主的)|slave(辅助的)|forward(转发)
file "weli.com.zone";
allow-transfer { 192.168.30.59; }; ##指定允许转发的目标主机,即从服务器
};
zone "30.168.192.in-addr.arpa" IN {
type master;
file "2.zone";
allow-transfer { 192.168.30.59; };
};
修改完成后,使用named-checkconf检查named.conf和named.rfc1912.zones两个文件,检查是否有语法错误,如果没有任何输出表明文件配置正确。
[root@vm96-yw-65-test-3060 ~]# named-checkconf
你的解析文件需要跟你在/etc/named.rfc1912.zones中添加的文件名字要一样,我的是weli.com.zone和2.zone
正向解析文件
[root@vm96-yw-65-test-3060 ~]# cd /var/named/
[root@vm96-yw-65-test-3060 named]# vim weli.com.zone
$TTL 600
@ IN SOA dns1.weli.com. mail.weli.com. (
2018080728 ##serial,序列号,每次修改解析记得修改它让它大于原来的序列号
2H ## refresh,设置的更新周期
10M ## retry,更新失败时重试的周期
1W ## expire,过期时间
1D ## minimum,主服务器挂后,从服务器至多工作的时间
)
@ IN NS dns1.weli.com.
@ IN NS dns2.weli.com.
@ IN MX 10 mail.weli.com.
dns1 IN A 192.168.30.60
dns2 IN A 192.168.30.59
mail IN A 192.168.30.60
www IN A 192.168.30.60
注:这个文件里所有的域名结尾的点号一定不能省略。
反向解析文件
[root@vm96-yw-65-test-3060 named]# vim 2.zone
$TTL 600
@ IN SOA dns1.weli.com. mail.weli.com. (
2018080722;
2H;
10M;
1W;
1D;
)
IN NS dns1.weli.com.
IN NS dns2.weli.com.
60 IN PTR www.weli.com.
60 IN PTR mail.weli.com.
60 IN PTR dns1.weli.com.
59 IN PTR dns2.weli.com.
解析文件添加正常,记得修改权限,不然可能无法正常使用
[root@vm96-yw-65-test-3060 named]# chown root:named weli.com.zone
[root@vm96-yw-65-test-3060 named]# chown root:named 2.zone
添加完毕,可以使用named-checkzone检查解析文件的正确性,显示OK即为正常可以使用。
[root@vm96-yw-65-test-3060 named]# named-checkzone "weli.com" weli.com.zone
zone weli.com/IN: loaded serial 2018080728
OK
[root@vm96-yw-65-test-3060 named]# named-checkzone "30.168.192.in-addr.arpa" 2.zone
zone 30.168.192.in-addr.arpa/IN: loaded serial 2018080722
OK
概念介绍:
- 时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
- 区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。
- $TTL表示宏定义,TTL(Time- To-Live),dns记录在本地DNS服务器上保留的时间
- @符号可代表区域文件/etc/named.conf里面定义的区域名称,即:”weli.com.”。
- NS(Name Server):名称服务器,用来标示一个域的服务器名称
- MX(Mail eXchanger):邮件交换器
添加形式:ZONE NAME TTL IN MX pri(级别) VALUE
优先级:0-99,数字越小级别越高- A(address):记录主机名称为IPv4
- PTR(pointer):反向解析 指针记录
- CNAME(Canonical NAME):别名记录
添加样式:www2.magedu.com IN CNAME www.magedu.com.
至此,DNS主服务器配置成功。可以使用dig命令测试能否正常工作。
## dig -t 测试正向解析
[root@vm96-yw-65-test-3060 named]# dig -t A web.weli.com @192.168.30.60
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -t A web.weli.com @192.168.30.60
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 1287
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;web.weli.com. IN A
;; AUTHORITY SECTION:
weli.com. 600 IN SOA dns1.weli.com. mail.weli.com. 2018080728 7200 600 604800 86400
;; Query time: 1 msec
;; SERVER: 192.168.30.60#53(192.168.30.60)
;; WHEN: Thu Aug 9 15:16:22 2018
;; MSG SIZE rcvd: 76
## dig -x 测试反向解析
[root@vm96-yw-65-test-3060 named]# dig -x 192.168.30.59 @192.168.30.60
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -x 192.168.30.59 @192.168.30.60
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25290
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;59.30.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
59.30.168.192.in-addr.arpa. 600 IN PTR dns2.weli.com.
;; AUTHORITY SECTION:
30.168.192.in-addr.arpa. 600 IN NS dns2.weli.com.
30.168.192.in-addr.arpa. 600 IN NS dns1.weli.com.
;; ADDITIONAL SECTION:
dns1.weli.com. 600 IN A 192.168.30.60
dns2.weli.com. 600 IN A 192.168.30.59
;; Query time: 0 msec
;; SERVER: 192.168.30.60#53(192.168.30.60)
;; WHEN: Thu Aug 9 15:17:06 2018
;; MSG SIZE rcvd: 136
通常在应用中,DNS的反向解析并不是很重要,可以不配置,当服务器中有域名作为邮件服务器时,此时可以配置反向解析,因为邮件中过滤垃圾邮件的技术通常是解析邮箱地址,如果IP地址不能反解成一个域名则视为垃圾邮件。
yum install -y bind bind-utils bind-chroot
修改下面三行即可
[root@vm99-lz-65-test-3059 ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; ##考虑安全可只本机监听
......
dnssec-enable no;
dnssec-validation no;
}
在文件末尾添加一个正向解析区域和一个反向解析区域
[root@vm99-lz-65-test-3059 ~]# vim /etc/named.rfc1912.zones
zone "weli.com" IN {
type slave;
masters { 192.168.30.60; }; ##主服务器的IP
file "slaves/weli.com.zone"; ##同步过来的文件存放位置
};
zone "30.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.30.60; };
file "slaves/2.zone";
};
修改完成后,使用named-checkconf检查named.conf和named.rfc1912.zones两个文件,检查是否有语法错误,如果没有任何输出表明文件配置正确。
[root@vm99-lz-65-test-3059 ~]# named-checkconf
[root@vm99-lz-65-test-3059 ~]# /etc/init.d/named start
启动后可以看到/var/named/slaves下出现主服务器上的解析文件,表示已经同步过来了。如果不行,在主服务器上重启下服务再观察。
当你修改了主服务器上的解析文件,并修改了序列号后,它不会立刻同步到从服务器上,是根据你/etc/named.rfc1912.zones中设置的刷新时间来判断什么时候同步,此时你想马上同步过去,就需要重启named服务或者reload一下named服务,这里,教大家使用rndc来重新加载配置。
rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作。
使用rndc可以在不停止DNS服务器工作的情况进行数据的更新,使修改后的配置文件生效。在实际情况下,DNS服务器是非常繁忙的,任何短时间的停顿都会给用户的使用带来影响。因此,使用rndc工具可以使DNS服务器更好地为用户提供服务。
自建conf文件,先删除初始的key文件,不然会报错
[root@vm96-yw-65-test-3060 ~]# rm -f /etc/rndc.key
[root@vm96-yw-65-test-3060 ~]# rndc-confgen -r/dev/urandom >/etc/rndc.conf
[root@vm96-yw-65-test-3060 ~]# cat /etc/rndc.conf
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "7oiMvt8PJLJUWCyyJXlLZw==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "7oiMvt8PJLJUWCyyJXlLZw==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
将上面生成的conf文件中的部分写入到/etc/named.conf中,记得去掉注释
[root@vm96-yw-65-test-3060 ~]# vim /etc/named.conf
.......
zone "." IN {
type hint;
file "named.ca";
};
key "rndc-key" {
algorithm hmac-md5;
secret "7oiMvt8PJLJUWCyyJXlLZw==";
};
controls {
inet 0.0.0.0 port 953 ##改为0.0.0.0允许所有管理DNS
allow { 192.168.30.59; 192.168.30.60; 127.0.0.1; } keys { "rndc-key"; }; ##allow中限定管理DNS的IP
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
将主服务器上创建的秘钥复制过来放在从服务器的/etc/rndc.key中,注释或删除掉原来的秘钥
[root@vm99-lz-65-test-3059 ~]# vim /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "7oiMvt8PJLJUWCyyJXlLZw==";
};
[root@vm99-lz-65-test-3059 ~]# /etc/init.d/named restart
[root@vm99-lz-65-test-3059 ~]# rndc -s 192.168.30.60 status
version: 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6
CPUs found: 8
worker threads: 8
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
当主DNS服务器上的解析文件修改后,只需执行rndc reload就可以重新加载配置文件,从服务器就能立刻更新解析文件。
语法:rndc [-b source-address] [-c config-file] [-k key-file] [-s server] [-p port] {command}
rndc -h 获取帮助
reload #重新装载配置文件及区域解析库文件
reload zone #只装载指定区域解析库文件
refresh zone #维护
retransfer zone #在不检查序列号的情况下直接传送一个区域数据文件
notify zone #重新通知区域数据文件
reconfig #只重新装载配置文件及新增的区域
querylog #启用或关闭查询日志,默认关闭
stop #将更新信息发送给服务器,然后关闭DNS服务器
trace level #指明调试级别,不跟数字逐级增加,可以明确指定(如trace 3)
notrace #关闭调试
flush #清除服务器缓存