首页 > 代码库 > DNS域名服务器
DNS域名服务器
源自《Linux 运维之道》丁一明编著 一书的总结
DNS是Domain Name System(域名系统)的简称,DNS可以为计算机、服务以及接入互联网或局域网的任何资源提供分层的名称解析功能。
域名是分级的,一般为:主机名.三级域名.二级域名.定级域名.。一般最后一个点是不用输入的。一般顶级域名代表国家或组织形式。
域名查询分为递归查询和迭代查询,从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。
安装:
[root@localhost /]# yum -y install bind
[root@localhost /]# yum -y install bind-chroot
[root@localhost /]# yum -y install bind-utils
对于bind而言,/var/named/chroot/目录就是根路径。bind-utils提供了一些DNS查询工具,如:dig、host、nslookup等。
配置文件解析,主配置文件一般为/etc/named.conf文件,但是当安装bind-chroot软件包后,在后面的内容提到的一些路径默认指的是一个虚拟路径,都是相对虚拟根路径而言的,虚拟根路径默认为/var/named/chroot/目录。也就是主配置文件的绝对路径变为/var/named/chroot/etc/named.conf。
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; };
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 { localhost; };
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";
};
//自定义一些主机访问控制列表
acl black{
172.16.0.0/16;
};
acl white{
10.0.0.0/8;
}
//options语句用来定义全局配置选项,在全局配置中至少需要定义一个工作路径,默认的工作路径为/var/named/,具体的常见参数见表8.1
Options{
allow-query {white;};
blackhole{black;};
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
//zone语句用来定义域以及相关选项,该语句的重点有type和file,表8.2为zone语句内常用的选项和描述
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
表8.1
选项 | 描述 |
directory | 设置域名服务器的工作目录,默认为/var/named |
dump-file | 运行rndc dumpdb备份缓存资料后保存的文件路径与名称 |
statistics-file | 运行rndc stats后,统计信息的保存路径与名称 |
listen-on port | 指定监听的IPv4网络接口 |
allow-query | 指定哪些主机可以查询服务器的权威解析记录 |
allow-query-cache | 指定哪些主机可以通过服务器查询非权威解析数据,如递归查询数据 |
blackhole | 设置拒绝那些主机的查询请求 |
recursion | 是否允许递归查询 |
forwards | 指定一个IP地址,所有对本服务器的查询都转发到该IP进行解析 |
max-cache-size | 设置缓存文件的最大容量 |
表8.2
选项 | 描述 |
Type | 设置域类型,类型可以是: Hint:当本地找不到相关解析后,可以查询根域名服务器 Master:定义权威域名服务器 Slave:定义辅助域名服务器 Forward:定义转发域名服务器 |
File | 定义域数据文件,文件保存在directory所定义的目录下 |
Notify | 当域数据资料更新后是否主动通知其他服务器 |
Masters | 定义主域名服务器IP地址,当type设置为slave后该选项才有效 |
Allow-update | 允许那些主机动态更新域数据信息 |
Allow-transfer | 那些从服务器可以从主服务器下在数据文件 |
在BIND软件的主配置中,如果定义了zone语句,还需要额外创建于数据文件,默认与数据文件在/var/named目录下,文件名称有zone语句的file选项设定。
记录类型 | 描述 |
SOA记录 | 域权威记录,说明本机服务器为该域的管理服务器 |
NS记录 | 域名服务器记录 |
A记录 | 正向解析记录,域名到IP地址的映射 |
PTR记录 | 反向解析记录,IP到域名的映射 |
CNAME记录 | 别名记录,为主机添加别名 |
MX记录 | 邮件记录,指定域内的邮件服务器,需要指定优先级 |
常用的配置语句选项说明:
options | 服务器的全局配置选项及一些默认设置 |
view | 定义一个视图 |
zone | 定义一个区域 |
logging | 指定服务器日志记录的内容和日志信息的来源 |
acl | 定义IP地址的访问控制列表 |
include | 加载的文件 |
key | 指定用于识别和授权的密钥信息 |
server | 设置服务器的参数 |
trusted-key | 指定信任的DNSSEC加密密钥 |
type | 定义区域的类型 |
file | 指定一个区域文件 |
directory | 指定区域文件的目录 |
forwarders | 指定请求将被转发到的DNS服务器 |
masters | 指定从服务器所使用的主服务器 |
allow-transfer | 指定允许按受区域传送请求的主机 |
allow-query | 指定允许进行查询的主机 |
notify | 当主区域数据发生变化时,允许通知从服务器 |
controls | 定义rndc命令使用的控制通道 |
部署主域名服务器
服务器ip | 服务器名称 | 功能描述 |
192.168.118.253 | dns1.adc.com | 主域名服务器 |
192.168.118.254 | dns2.adc.com | 从域名服务器 |
192.168.118.100 | Fileserver.abc.com | 文件服务器 |
192.168.118.101 | Printserver.abc.com | 打印机服务器 |
192.168.118.200 | www.abc.com | 网站服务器 |
192.168.118.201 | www.abc.com | 网站服务器 |
192.168.118.25 | mail.abc.com | 邮件服务器 |
192.168.118.20 | ntp.abd.com | 时间服务器 |
先安装:
[root@localhost /]# yum -y install bind
[root@localhost /]# yum -y install bind-chroot
[root@localhost /]# yum -y install bind-utils
在修改配置:
[root@localhost /]# cp /usr/share/doc/bind-9.8.2/sample/etc/named.conf /var/named/chroot/etc/
[root@localhost /]# chown root.named /var/named/chroot/etc/named.conf
[root@localhost /]# gedit /var/named/chroot/etc/named.conf
options
{
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
listen-on port 53 { any; };
allow-query { any; };
allow-query-cache { any; };
recursion yes;
};
acl secondserver{
192.168.118.250;
};
zone "." IN {
type hint;
file "/var/named/named.ca";
};
zone "abc.com" IN{
type master;
allow-transfer { secondserver;};
file "abc.com.zone";
};
zone "168.192.in-addr.arpa" IN{
type master;
allow-transfer{secondserver;};
file "168.192.zone";
};
创建区数据文件
[root@localhost /]# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.ca /var/named/chroot/etc/
[root@localhost /]# chown root.named /var/named/chroot/etc/named.ca
[root@localhost /]# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.localhost /var/named/chroot/var/named/abc.com.zone
[root@localhost /]# chown root.named /var/named/chroot/var/named/abc.com.zone
[root@localhost /]# gedit /var/named/chroot/var/named/abc.com.zone
修改内容
$TTL 1D
@ IN SOA @ rname.invalid. (
10 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1.abc.com.
NS dns2.abc.com.
MX 10 mail.abc.com.
dns1 IN A 192.168.118.253
dns2 IN A 192.168.118.250
ntp.abc.com. IN A 192.168.118.20
mail.abc.com. IN A 192.168.118.25
fileserver IN A 192.168.118.100
Printserver IN A 192.168.118.101
www IN A 192.168.118.200
IN A 192.168.118.201
添加用于方向解析的192.168.zone域数据文件
[root@localhost /]# gedit /var/named/chroot/var/named/192.168.zone
$TTL 1D
@ IN SOA dns1.abc.com. jacob.abc.com. (
10 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1.abc.com.
NS dns2.abc.com.
253.118 IN PTR dns1.abc.com.
254.118 IN PTR dns2.abc.com.
20.118 IN PTR ntp.abc.com.
25.118 IN PTR mail.abc.com.
100.118 IN PTR fileserver.abc.com.
101.118 IN PTR Printserver.abc.com.
200.118 IN PTR www.abc.com.
201.118 IN PTR www.abc.com.
开启tcp的53端口用于主从复制,udp53端口用于数据查询
[root@localhost /]# iptables -I INPUT -p udp --dport 53 -i ACCEPT
[root@localhost /]# iptables -I INPUT -p tcp --dport 53 -i ACCEPT
[root@localhost /]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@localhost /]# chkconfig named on
在ubutu上查询,注意我还没设置默认的dns服务器为192.168.118.253,因此才会出现Non-authoritative answer。
root@ubuntu:/home/tempal# nslookup www.abc.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
www.abc.com canonical name = abc.com.
Name: abc.com
Address: 199.181.132.250
部署从域名服务器可以防止出现单点故障或实现负载均衡。在192.168.118.250中安装:
[root@localhost /]# yum -y install bind
[root@localhost /]# yum -y install bind-chroot
[root@localhost /]# yum -y install bind-utils
在修改配置:
[root@localhost /]# cp /usr/share/doc/bind-9.8.2/sample/etc/named.conf /var/named/chroot/etc/
[root@localhost /]# chown root.named /var/named/chroot/etc/named.conf
[root@localhost /]# gedit /var/named/chroot/etc/named.conf
内容:
options
{
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
listen-on port 53 { any; };
allow-query { any; };
allow-query-cache { any; };
recursion yes;
};
acl secondserver{
192.168.118.250;
};
zone "." IN {
type hint;
file "/var/named/named.ca";
};
zone "abc.com" IN{
type slave;
allow-transfer { secondserver;};
file "abc.com.zone";
};
zone "168.192.in-addr.arpa" IN{
type slave;
allow-transfer{secondserver;};
file "168.192.zone";
};
设置同步文件
最后修改SELinux设置,否则无权限进行同步操作。
[root@test ~]# setsebool -P named_write_master_zones=1
[root@test ~]# mkdir -p /var/named/chroot/var/named/slaves/
[root@test ~]# chown root.named /var/named/chroot/var/named/slaves/
[root@test ~]# chmod 775 /var/named/chroot/var/named/slaves/
[root@test ~]# chkconfig named on