DNS主从复制及区域传送
DNS:Domain Name System 域名系统
DNS是由解析器和域名服务器组成的。
域名服务器是指保存有该网络中所有的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
DNS使用TCP与UDP端口号都是53,只要使用UDP,服务器之间备份是用tcp连接
DNS解析查询主要有两者:递归查询(进行一次查询就能得到最终结果)
迭代查询(需要进行多次查询,才能得到最终结果)
互联网上的应用方式一般是:本地递归,互联网部分迭代。所有DNS都不知道其他DNS在哪里,但都知道根在哪里,
本地主机向本地DNS递归,本地DNS出去迭代查询后向本地返回最终结果。
DNS常见的记录类型:
A记录: 由主机名解析IP地址
PTR记录:由IP地址解析主机名
NS记录: 用来指定本地的域名服务器(有主,有辅)
MX记录: 用来指定本地的邮件服务器
CNAME: 用来指定一个主机的别名
SOA: 起始授权记录,用来说明本域的主域名服务器
区域传送:从域名服务器每隔一段时间要去主域名服务器上去查询更新,以保证数据的一致性。这个过程叫区域传送。
区域传送过程使用TCP协议 ,53号端口。
区域传送有两种类型:
增量区域传送:ixfr
完全区域传送:axfr
实验环境:
Master Dns Server:CentOS 6.4(2.6.32-358.el6.x86_64)IP:192.168.28.128 hostname:www.ajj.com
Slave Dns Server:CentOS 6.4(2.6.32-358.el6.x86_64)IP:192.168.28.129
Domain name:ajj.com
需要安装的软件:bind
在连网的环境下直接下载安装:yum install -y bind
首先要在两台虚拟机上把防火墙关闭掉,因为iptables会影响到区域传送,主从复制实现不了。
在命令行输入:service iptables stop(我个人觉得可能版本的问题,有些版本是不用关的,也可能是网络问题吧)
开始配置DNS实验:
我们安装好bind包后进入DNS的主配置文件:
options {
listen-on port 53 { any; };//将127.0.0.1修改为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;
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";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "ajj.com" IN {#定义正向区域
type master;#指定为主dns
file "ajj.com";#定义正向资源记录文件名
allow-transfer { 192.168.28.129; };#允许将更新的文件传送到从dns上,ip是从dns地址
};
zone "28.168.192.in-addr.arpa" IN {#定义反向区域
type master;#指定为主dns
file "28.168.192.in-addr.arpa";#定义反向资源记录文件名
allow-transfer { 192.168.28.129; };#允许将更新的文件传送到从dns上,ip是从dns地址
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
编辑正向解析资源记录:
[root@localhost named]# vim /var/named/ajj.com
$TTL 1D
@ IN SOA @ rname.invalid. (
2013070611 ; serial
#每次更新后服务器都将此号码更改,从服务器若查询到该号码改变就想服务器请求更新。
1D ; refresh#从服务器的更新时间
1H ; retry#从服务器若更新失败后的重试时间
1W ; expire#重试多久后就宣告失败不再更新
3H ) ; minimum#若主服务器找不到对应的请求,允许客户端再次查询的时间
@ NS ns1.ajj.com.#域名服务器
NS slave.ajj.com.#域名服务器
ns1 IN A 192.168.28.128#域名到ip记录
slave.ajj.com. IN A 192.168.28.129#域名到ip记录
编辑正向解析资源记录:
[root@localhost named]# vim 28.168.192.in-addr.arpa
$TTL 1D
@ IN SOA @ rname.invalid. (
2013070612 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ns1.ajj.com.
@ NS slave.ajj.com.
128 IN PTR www.ajj.com.#由ip到域名
129 IN PTR slave.ajj.com.#由ip到域名
修改主从DNS SERVER的/etc/resolv.conf
主dns上
[root@localhost named]# vim /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 192.168.28.128
nameserver 192.168.28.129
从dns上
[root@localhost slaves]# vim /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 192.168.28.129
nameserver 192.168.28.128
我在配置的时候第一次重启出现
[root@localhost ~]# service named restart
Stopping named: [ OK ]
Generating /etc/rndc.key:
这里我们需要执行[root@localhost ~]# rndc-confgen -r /dev/urandom -a
wrote key file "/etc/rndc.key"
[root@localhost ~]#
[root@localhost ~]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
这样就可以重启成功了。这里要生成一个rndc的密钥,是用来做远程连接用的。
到这里主dns基本配置完成,接下来配置从dns
安装bind和一些基本操作和主的一样
从的只要修改从dns的配置文件就可以了
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;
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";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "ajj.com" IN {#定义正向区域
type slave;#指定为从dns
file "slaves/ajj";#定义正向资源记录文件名
masters { 192.168.28.128; };#定义从dns去ip为192.168.28.128的 主dns上覆制文件
};
zone "28.168.192.in-addr.arpa" IN {#定义反向区域
type slave;#指定为从dns
file "slaves/28.168.192";#定义反向资源记录文件名
masters { 192.168.28.128; };#定义从dns去ip为192.168.28.128的 主dns上覆制文件
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
从dns配置完成接下来测试下
我们来看下从dns上是否将主dns上的资源记录文件复制过来了
[root@localhost ~]# cd /var/named/slaves/
[root@localhost slaves]# ls
28.168.192 ajj
[root@localhost slaves]# cat ajj
$ORIGIN .
$TTL 86400; 1 day
ajj.comIN SOAajj.com. rname.invalid. (
2013070611 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NSns1.ajj.com.
NSslave.ajj.com.
$ORIGIN ajj.com.
ns1A192.168.28.128
slaveA192.168.28.129
[root@localhost slaves]# cat 28.168.192 $ORIGIN . $TTL 86400; 1 day 28.168.192.in-addr.arpaIN SOA28.168.192.in-addr.arpa. rname.invalid. ( 2013070612 ; serial 86400 ; refresh (1 day) 3600 ; retry (1 hour) 604800 ; expire (1 week) 10800 ; minimum (3 hours) ) NSns1.ajj.com. NSslave.ajj.com. $ORIGIN 28.168.192.in-addr.arpa. 128PTRwww.ajj.com. 129PTRslave.ajj.com. |
复制成功,表示任务基本完成了。