Domain Name Server
监听tcp53和udp53端口。把一种名称解析为另一种名称,字串型名称与数据型名称。解析时把用户提供的名称,查询解析库,得到另外一名称。查询,把解析后的名称返还用户。
查询分为两种
存储名称与地址对应表格式。
文本文件,对大量数据处理难以应付。但在bind中速度是最快的,因为bind会把文本文件加载为数据库放在内存中。
关系型数据库,由于有索引,对大量请求比文本存储性能好。
LDAP:lightweight directory access protocol,工作于tcp389端口。比关系型数据库快速更快。
组织域:.com .rog .net .mil .edu .gov .info .cc
国家域:.cn .us .tw .hk .jp
反向域: .in-addr.arpa
区域解析库:
资源记录类型
SOA: start of authority ,起始授权记录,一个区域文件只能有一个。当前区域主DNS的fqdn.
NS:name server , 可以有多个,每个负载一个领域
MX:mail exchange 邮件交换器,指定本域的邮件服务器。可以有多个,每个服务器有优先级,(0-99),数据越小优先级越高
A:fqdn与ip对应 , 专用于正向解析库
AAAA:fqdn与ipv6对应,专用正向解析库。
CNAME:canonical name,正式名称。
PTR: ip与fqdn对应,专用反向解析库
ttl值: 指定本次解析返还给请求者后,请求者最多可以缓存时间。如果不写,则使用默认。
查询过程
hosts --> local dns cache --> dns --> dnscache --> dns迭代查询
DNS服务器类型
主dns服务器,是本域的权威服务器。
从dns服务器,间断性的向其它dns服务器同步区域数据(一般是主服务器),同步的过程叫区域传送。
zone tracser, 解析库文件同步过程,区域传送,使用tcp协议53端口传送,以保证传输的区域文件可靠性。 两种机制:从服务器会周期性检查更新,和主服务器端更新后通知从服务器。
完全区域传送:axfr 一般从服务器第一次向主服务器同步,会同步全部区域数据。
增量区域传送:ixfr 有了全部区域文件后,只同步区域文件更新过的数据。
缓存dns服务器
转发dns服务器
服务脚本:/etc/rc.d/init.d/named
主配置文件:/etc/named.com
bain的主程序: /usr/sbin/named
/usr/sbin/named -u named :使用named用户启动named进程,只有管理员才可以启动。只有管理员才可以使用小于1024端口。
检测主配置文件是否有语法错误命令: /usr/sbin/named-checkconf
检测区域配置文件是否有语法错误命令: /usr/sbin/named-checkzone
区域文件索引:/etc/named.rfc1912.zones
区域解析库文件:/var/named/zone结尾的文件。
解析localhost为127.0.0.1区域配置文件:/var/named/named.localhost
解析127.0.0.1为localhost区域配置文件:/var/named/named.loopback
从服务器同步的区域文件在:/var/named/slaves
==================================================================
安全特性
==================================================================
服务进程以系统用户身份运行,用户名:named
可以运行于chroo模型下,即工作于jail环境。运行在假根下。/var/named/chroot/
区域传送安全限制
bind内置acl
allow-transfer { none;|any;|等 }
none:不让任何人同步
any:任何人都可以同步
local:本机
localnet:本机所在的网络
自定义acl
acl "名字" { 算定义acl,此为资源统一管理,以方便在下面配置中调用。
ip;
ip; ip格式 192.168.1.1;
network; 网络格式 172.16.0.0/16;
};
allow-query { ip;|!ip; }; 定义只有花括号中的ip可以请求此dns服务器。ip前面加!表示取反,除了此ip其它ip都可以请求查询。
allow-recursion { ip; }; 递归白名单,只有在花括号中的ip才给递归查询。花括号中必须包括当前主机。可以写自定义白明单。
===================================================================
相关命令
===================================================================
安装程序包与查看DNS运行状态
-----------------------------------------------------------------------------------------------------------------
使用service服务控制脚本查看
[root@wukui ~]# service named status 查看dns服务运行状态
version: 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 版本信息,在redhat系统上编译
CPUs found: 4 CPU个数
worker threads: 4 工作线和有多少个
number of zones: 19 有多少个区域
debug level: 0 测试级别有没有打开,比日志记录更详细,测试时使用
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF 查询日志是没有打开,打开后客户端每次查询请求都会记录于/var/log/messages。一般不开,急剧影响性能。
recursive clients: 0/0/1000 递归客户没数量
tcp clients: 0/100 有没有从服务器复制区域
server is up and running 服务运行状态
named (pid 2826) is running... 服务进程的pid
使用rndc命令查看,显示与上条命令一样。
# rndc status
-----------------------------------------------------------------------------------------------------------------
测试命令
-----------------------------------------------------------------------------------------------------------------
host
-t:指定资源记录类型与名称
# host -t A www.wukui.net 172.16.2.10 指定解析A记录,www.wukui.net,使用172.16.2.10这台DNS
[root@wukui named]# host -t NS wukui.net 172.16.2.10 通过172.16.2.10查看wukui.net这个域的NS是谁
# [root@wukui named]# host -t NS wukui.net 172.16.2.10 查看wukui.net域的邮件服务器
nslookup
server ip : 指定dns服务器ip
set type={A|SOA|NS|MX}
dig
# dig -t MX -trace wukui.net @172.16.2.10 此命令可以跟踪指定dns迭代查询过程
# dig -t AXER baidu.com @8.8.8.8 此命令可以拿到baidu.com域的完整dns数据库,前提对方允许。
dig -t TYPE name @server
rndc 控制dns服务,可以远程控制,端口为tcp953。出于安全性考虑,一般不允许远程控制。rndc控制dns服务通过交换密钥验证。
reload :重新装载主配置文件和各区域解析库,可以装载单个区域解析库。
reconfig:重读主配置文件。
status:查看dns服务工作状态。
flush:清空所有已缓存的查询信息。
retransfer :重新同步区域解析文件。从服务器执行。
notify :重新给从服务器发送通知。主服务器执行。
stop:停止dns服务。
querylog:启用或禁用查询日志。启用后,任何查询请求都会被记录下来,日志文件在/var/log/messages。此功能只能在调试时使用,否则会极大降低服务器性能。
===========================================================
主配置文件解释 /etc/named.conf
===========================================================
acl "名字" { 算定义acl,此为资源统一管理,以方便在下面配置中调用。
ip;
ip; ip格式 192.168.1.1;
network; 网络格式 172.16.0.0/16;
};
options { 全局配置段,在此配置对全局生效。有些特性可以写到区域选项中,可以准确定义区域工作特性。
listen-on port 53 { 127.0.0.1; }; 监听的端口和ipv4地址,如果127.0.0.1只能为自己服务。
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 { localhost; }; 允许为那些主机访问
recursion yes; 是否允许递归查询,给所有人递归。
forward {only;|first;}; 开启转发模式,only如果递归到指定服务器没有查到,自己不再查询。first,如果递归到指定服务器没有查到,自己开始迭代查询。
forwarders { ip; }; 开启转发模式后,请求转发到那个服务器上。
allow-recursion { ip或自定义acl }; 定义那些主机可以请求查询。
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";
};
include "/etc/named.rfc1912.zones"; 此文件中为区域配置
include "/etc/named.root.key"; 设定主本配置文件还包括的配置文件
=================================================================
主配置文件之区域定义文件解释 /etc/named.rfc1912.zones
================================================================
zone "localhost.localdomain" IN { 正向区域写法:定义区域名
type {master|slave|forward|hint}; 设置区域类型,(hint用来定义根)
file "named.localhost"; 区域解析库文件名
allow-update { none; }; ddns安全特性,只有{}中的ip的dhcp服务器才可以通知dns更新区域解析库。这里还可以写密钥,密钥方式更安全。
allow-transfer { 172.16.2.12; }; 只允许172.16.2.12这个ip可以同步区域数据。本机都不可以。如没有此项所有人都可以同步。
};
zone "16.172.in-addr.arpa." IN { 反向区域写法
type master; 设置区域类型
file "172.16.2.zone"; 区域解析库文件名
};
zone "wukui.net" IN { 转发服务器写法。这里定义wukui.ne域内的主机转发
type forward; 标记为转发类型
forward only;|first; 转发类型
forwarders { ip; }; 转发到那个ip
};
====================================================================
区域数据库正向解析文件格式和反向文件解释
====================================================================
名称解析ip
-----------------------------------------------------------------------------------------------------------------
$TTL 1D 定义客户端缓存时长 ,单位,时,天,周
$ORIGIN wukui.net. 此变量定义了,如果下面的fqdn名称使用了简写,简写后的名称会自动跟上wukui.net.
@ IN SOA @ ns.wukui.net. wukui.gmail.com ( (当前区域名称,@为简写)(IN固定格式)(标记此区域为起始授权)(当前区域主DNS) (管理员邮箱,@用点代替)
0 ; serial 当前区域数据库序例号,最多十位数字
1D ; refresh 向主DNS同步数据库的时间
1H ; retry 连接主DNS不成功后每隔多少时间再联系
1W ; expire 最多重试时间。
3H ) ; minimum 未查询到的条目缓存时间,在此期间不会再次查询此主机名。
IN NS ns.wukui.net. 指定本域的dns服务器,可以有多个。(ns.wukui.net.为全部名称,也可以写成ns。)
IN MX 10 mail .wukui.net. 指定本域的邮件服务器,并指优先级,直小越优先。
fly.wukui.net. IN NS ns.fly.wukui.net. 子域授权,指定fly.wukui.net.子域NS记录。可以简写。
ns IN A 172.16.2.10 指定ns服务器地址,一定要指定。
ns.fly IN A 192.168.1.20 指定子域的ns服务器ip地址。
www IN A 8.8.8.8 设定www主机对就的A记录。
mail IN A 10.0.0.1 一个名称对应多个ip为了使用dns做负载均衡
ftp IN A 172.16.0.1
pop IN CNAME mail.wukui.net. 设定pop是mail的正式名称,mail.wukui.net。可以简写为mail
------------------------------
ip解析名称
------------------------------
$TTL 1D
$ORIGIN 2.16.172.in-addr.arpa. 如果下面的ip有简写,自动补上此串
@ IN SOA @ ns.wukui.net. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.wukui.net.
10.2 IN PTR wukui.wukui.net. ip与fqdn(必须写完整)的对应。这里写成10.2是因为主配置文件中zone "16.172.in-addr-arpa"已经定义了此ip的前缀。
15.2.16.172.in-addr.arpa. IN PTR WWW.WUKUI.NET (15.2.16.172.in-addr.arpa. 为ip的全写)
====================================================================
DNS主从同步
====================================================================
主从同步的前题
---------------------------------------------
1,时间同步,主从两台服务器的时间必须要统一,可以使用ntp协议完成。
# ntpdate 172.16.0.1 向ntp服务器同步时间
# crontab -e 为了保证以后时间统一,做定时任务,每隔3分钟就同步一次时间。
*/3 * * * * /sbin/ntpdate 172.16.0.1 &> /dev/null
2,bind的使用版本,从服务器版本要与主服务器一样或者比主服务器的版本高。二者相同最好。
3,需要在域名注册商再添加一个NS记录,以便互联网上的主机通过父域可以找到它。
4,在主dns服务器的区域配置文件中加入从服务器的NS记录,并定义从服务器的ip。
------------------------------------------------
区域文件定义
zone "区域名" IN { 指定区域名称 type slave; 指定本工作模式 file "slaves/区域文件名"; 指定同下来的数据文件名,rpm包安装后一般为/var/named/slaves。专存放同步过来的数据文件。 masters { 172.16.0.1; 172.16.100.1; }; 指定同步的服务器,一般是主服务器,(可以为从服务器)。如果指定多个,第一个联系为上会找第二个同步。 };
--------------------------------------------
====================================================================
bind view , 视图,根据客户端的来源不同,将同一个名称解析至不同的ip。智能DNS。判断顺序自上而下匹配,需要本机解析的区域定义都需要放在视图中(包括点区域定义),
-----对查询请求的地址归类-------
acl "名称" { 把访问客户端分类,比如这里电信一类 172.16.0.0/16; }; acl "unicom" { 第二类客户端, 192.168.0.0/24; }; -------定义视图---------------------- view "名称" { 匹配第一个视图 match-clients { acl;或ip; }; zone "wukui.net" IN { type master; file "区域库文件路径"; }; 区域二................ }; view "名称二" { 匹配第二个视图 match-clients { acl;或ip; }; zone "wukui.net" IN { type master; file "区域库文件路径"; }; 区域二................ }; view "名称二" { 如果上两个视图匹配不到,默认匹配此视图 zone "wukui.net" IN { type master; file "区域库文件路径"; }; 区域二................ };
==================================================================
配置正向反向解析DNS,并配置从服务器。两台服务器时间必须一样。
1,配置主配置文件,加入正向解析与反向解析,并且设定只允许本机与从服务器可以请求
2,配置解析库文件。位于/var/named/。并在此文件中指明第二个服务器的NS记录与A记录。
3,配置从dns服务器,把test.com区域同步到本机
4,使用客户端测试
在主dns/etc/named.rfc1912.zones文件中定义正反向区域
zone "test.com." IN { type master; file "test.com.zone"; allow-update { none; }; allow-transfer { 192.168.0.20; }; }; zone "16.172.in-addr.arpa" IN { type master; file "16.172.zone"; allow-transfer { 192.168.0.20; }; };
区域解析库文件/var/named/test.com.zone
$TTL 1D @ IN SOA ns.test.com. admin.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns IN NS ns2 ns IN A 172.16.2.10 ns2 IN A 192.168.0.20 www IN A 172.16.0.1
区域解析库文件/var/named/16.172.zone
$TTL 1D @ IN SOA @ ns.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns.test.com. IN NS ns2.test.com. 10.2 IN PTR ns.test.com.
从服务器配置文件中写入(/etc/named.rfc1912.zones)
zone "test.com" IN { type slave; file "slaves/test.com.zone"; masters { 172.16.2.10; }; }; zone "16.172.in-addr.arpa" IN { type slave; file "slaves/16.172.zone"; masters { 172.16.2.10; }; };
两台服务器重启服务,配置完成,
============================================================
子域授权,test.com授权给192.168.0.20为hello.test.com的ns服务器
1,父域服务器授权给子域,
2,子域服务器配置子域解析文件和解析库。
1,配置父域服务器解析库,添加子域服务器的NS记录,并且指定子域的dns服务器为192.168.0.20。在/var/named/test.com.zone文件中加入。
hello IN NS ns3.hello.test.com. ns3.hello.test.com. IN A 192.168.0.20
2,子域dns服务器在/etc/named.rfc1912.zones文件中加入
zone "hello.test.com" IN { type master; file "hello.test.com.zone"; };
配置子域解析库文件/var/named/hello.test.com.zone
$TTL 1D @ IN SOA ns.hello.test.com. admin.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns IN MX 10 www ns IN A 192.168.0.22 www IN A 192.168.2.22
配置完成。
===================================================================
bind视图配置,根据客户端的ip不一样,返还给客户端的ip不同。a区的客户机请求www.test.com解析为192.168.0.1。b区的客户机请求www.test.com解析的ip为172.16.0.1。
配置大体过程:
1,配置/etc/named.conf定义alc,关闭安全传输功能。
2,配置/etc/named.rfc1912.zones ,定义三个view,第一个解析a区域,第二个解析b区域,第三个解析其它。在view中定义match-clients和为此网络解析的区域。
3,配置区域解析数据文件/var/named/test.com.zone.a和/var/named/test.com.zone.b。
4,客户端配置dns为172.16.2.10,设置ip为192.168.0.100测试,设置ip为172.16.2.100测试,是否把www.test.com解析到定义好的ip。
主配置文件如下。/etc/named.conf------------------------------------------------
acl "b" { 自定义acl,b区 172.16.0.0/16; }; acl "a" { 自定义acl,a区 192.168.0.0/24; }; options { 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"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; include "/etc/named.rfc1912.zones";
主配置区域文件/etc/named.rfc1912.zones------------------------------
view "192.168.0.0" { 第一个视图区,给acl定义a网络的主机解析 match-clients { a; }; acl列表a中的主机匹配此视频 zone "test.com" { type master; file "test.com.zone.a"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "wukui.net" IN { type master; file "wukui.net.zone"; allow-transfer { 172.16.2.12; }; }; zone "16.172.in-addr.arpa." IN { type master; file "172.16.2.zone"; }; };
//-------------------------------------------------------------------------------
view "172.16.0.0" { 第二个视图区,给acl定义的b网络主机解析 match-clients { b; }; 定义匹配b网络 zone "test.com" { type master; file "test.com.zone.b"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "wukui.net" IN { type master; file "wukui.net.zone"; allow-transfer { 172.16.2.12; }; }; zone "16.172.in-addr.arpa." IN { type master; file "172.16.2.zone"; }; };
//-------------------------------------------------------------------------------
view "other" { 为除了a和b的网络解析,这些请求是内网主机,所以只给内网主机服务。
zone "." IN { type hint; file "named.ca"; }; zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "wukui.net" IN { type master; file "wukui.net.zone"; allow-transfer { 172.16.2.12; }; }; zone "16.172.in-addr.arpa." IN { type master; file "172.16.2.zone"; }; };
区域库文件配置----------------------------
[root@wukui ~]# cat /var/named/test.com.zone.a
$TTL1D @ IN SOA ns.test.com. admin.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns IN MX 1 mail ns IN A 172.16.2.10 mail IN A 172.16.2.10 wwwI N A 192.168.0.1
[root@wukui ~]# cat /var/named/test.com.zone.b $TTL 1D @ IN SOA ns.test.com. admin.test.com. ( 2014080601 1H 5M 7W 1D ) IN NS ns IN MX 1mail ns IN A 172.16.2.10 mail IN A 172.16.2.20 www IN A 172.16.0.1
===================================================================
完成!!