一.安装DNS Server
yum -y install bind*
yum -y install bind-utils //nslookup 后面会用到
/etc/init.d/iptables stop //关闭防火墙,或者选择永久关闭防火墙chkconfig iptables off
你也可以选择打开防火墙53端口,记住TCP和UDP都需要
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
安装好之后查看named 服务状态
/etc/init.d/named status
rndc: neither /etc/rndc.conf nor /etc/rndc.key was found
named-sdb 已停
发现缺失文件错误,解决方法如下:输入
rndc-confgen -r /dev/urandom -a
再次启动服务,
/etc/init.d/named start
报如下错误,好事多磨!
rndc: connect failed: 127.0.0.1#953: connection refused
解决方法如下,编辑/etc/named.conf,增加如下内容
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
include "/etc/rndc.key";
chmod 777 /etc/rndc.key
然后再启动named服务,如果出现如下内容,说明服务正常了
二.文件配置
安装完BIND以后,BIND的主要配置文件通常保存在如下两个目录:
/etc/named.conf -BIND服务主配置文件
/var/named/ -域的zone配置文件
由于我是用yum的方式安装bind的,它默认也安装了bind-chroot,于是BIND的主配置文件主被封装到一个伪根目录内,路径为:
/var/named/chroot/etc/named.conf -BIND服务主配置文件
/var/named/chroot/var/named -域的zone配置文件
首先我们来分析named.conf主配置文件
vim /var/named/chroot/etc/named.conf
//全局配置
options {
listen-on port 53 { any; };//把原先的127.0.0.1 修改成any,或者本机IP,如果有多个IP,则每个IP以分号分割
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 { any; };//允许所有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";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
//根域名服务器,当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。
//当DNS服务器处理递归查询时,如果本地区域文件不能进行查询的解析,就会转到根DNS服务器查询
zone "." IN {
type hint;//类型有 hint(表示是互联网中根域名服务器),master(主域名服务器),slave(辅助域名服务器)
file "named.ca";//该文件包含13个根域名服务器地址,可以通过cat /var/named/named.ca 查看
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/rndc.key";
编辑named.rfc1912.zones
vim/var/named/chroot/etc/named.rfc1912.zones首先清空里面的内容,然后增加如下内容
zone "gitsea.com" IN { //正向区域zone
type master;
file "gitsea.com.zone";//文件名
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN { //方向区域zone
type master;
file "gitsea.com.rev"; //文件名
allow-update { none; };
};
配置zone
zone文件的格式比较复杂,包含了一些跟域从服务器同步刷新以及资源记录等信息,如果手动去编写很容易写错,因此我们一般使用默认的 named.localhost 这个文件来作为 zone 文件的模板,通过复制生成我们需要的正向zone和反向zone配置文件
cd /var/named/chroot/var/named
cp -p named.localhost gitsea.com.zone
cp -p named.localhost gitsea.com.rev
gitsea.com.zone配置内容如下
$TTL 1D
@ IN SOA localhost root (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
IN MX 10 mail.gitsea.com.
mail IN A 192.168.1.17
www IN A 192.168.1.168
gitsea.com.rev配置内容如下
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
17 IN PTR mail.gitsea.com.
168 IN PTR www.gitsea.com.
参数说明:
TTL是生存期,单位是秒
SOA资源记录:
每个区在区的开始处都包含了一个起始授权记录(Start of Authority Record),简称SOA记录。SOA定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA记录。
NS资源记录:
名称服务器(NS)资源记录表示该区的授权服务器,它们表示SOA资源记录中指定的该区的主和辅助服务器,也表示了任何授权区的服务器。每个区在区根处至少包含一个NS记录。
PTR资源记录:
相对于A资源记录,指针(PTR)记录把IP地址映射到FQDN。
CNAME资源记录(别名):
规范名字(CNAME)资源记录创建特定FQDN的别名,用户可以使用CNAME记录来隐藏用户网络的实现细节,使连接的客户机无法知道。
MX资源记录(邮件):
邮件交换(MX)资源记录为DNS域名指定邮件交换服务器。邮件交换服务器是为DNS域名处理或转发邮件的主机。处理邮件指把邮件投递到目的地或转交另一不同类型的邮件传送者。转发邮件指把邮件发送到最终目的服务器,用简单邮件传输协议SMTP把邮件发送给离最终目的地最近的邮件交换服务器,或使邮件经过一定时间的排队。
第二行 SOA记录,@取代在/etc/named.conf中指定的域名
SOA段中的数字,分别为:序列号、刷新、重试、过期、生存期
序列号:序列号用于DNS数据库文件的版本控制。每当数据被改变,这个序列号就应该被增加。
刷新:从服务器向主服务器查询最新数据的间隔周期。每一次检查时从服务器的数据是否需要更改,则根据序列号来判别。
重试:一旦从服务器尝试连接主服务器失败,下一次查询主服务器的延迟时间。
过期:如果从服务器无法连通主服务器,则在经过此时间后,宣告其数据过期。
生存期:服务器回答 ‘无此域名’ 的间隔时间。
数字的默认单位为秒。否则:W= 周、D= 日、H= 小时、M= 分钟。
IN 是internet记录
SOA 是SOA 初始化记录,我们说的是初始授权记录.
localhost 是DNS服务器的名称
root 是管理员的邮箱地址
测试:
把另外一台服务器的DNS设置成该DNS服务器IP(我的当前DNS服务器IP为192.168.1.168)
测试方法和结果如下图
说明配置生效.
附:我们在修改配置named.conf 文件和zone文件的时候,很有可能会出错之类的,这个时候我们可以通过借助 named-checkconf 和named-checkzone这两个指令来验证文件配置是否正确
named-checkconf :用来验证named.conf文件,格式:named-checkconf /etc/named.conf 如果无错误信息输出,说明配置正确
named-checkzone: 用来验证zone文件,格式 named-checkzone gitsea.com.zone /var/named/chroot/var/named/payegis.com.zone ,如果正确则会输出OK信息,反之会输出相关的错误信息