5.1、DNS简介
DNS服务可以为用户提供域名和IP之间的自动转换。通过DNS,用户只需输入机器的域名即可访问相关的服务,而无需使用那些难以记忆的IP地址。DNS帮助用户在互联网上寻找路径,在互联网上的每一个计算机都拥有一个唯一的地址,称作'IP地址'。由于IP地址是一串数字,难以记忆,而DNS允许用户使用一串有意义的字符串'即域名'取代,由域名转换成相应IP地址的这个过程称为域名解析。
DNS域名又称为DNS命名空间,它是以层次树状结构进行管理的,其最顶层是根域。根域在整个DNS命名空间是唯一的,而根域下可以分为多个子域,每个子域又可以分为多个子域。例如,Internet命名空间具有多个顶级域名(top-level domain names,TLD),如org,net,com等。而cn顶级域名又可以有多个子域,如edu、net、org和com等。
一个完整的域名由顶级域以及各子域的名称所组成,各部分之间用圆点'.'分隔开来。其中最后一个 '.'称为根域,可省略,其左边部分称为顶级域名;第二个点'.'的左边部分称为二级域名(SLD);二级域左边部分称为三级域名;以此类推。例如www.sina.com.cn.中cn是一级域名,com是二级域名,sina是三级域名。全球一共有13个根域,其IP地址分别是:
[root@mylinux ~]# dig ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.3 <<>> ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11096 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 15 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 66583 IN NS e.root-servers.net. . 66583 IN NS f.root-servers.net. . 66583 IN NS b.root-servers.net. . 66583 IN NS a.root-servers.net. . 66583 IN NS m.root-servers.net. . 66583 IN NS i.root-servers.net. . 66583 IN NS k.root-servers.net. . 66583 IN NS j.root-servers.net. . 66583 IN NS d.root-servers.net. . 66583 IN NS c.root-servers.net. . 66583 IN NS l.root-servers.net. . 66583 IN NS g.root-servers.net. . 66583 IN NS h.root-servers.net. ;; ADDITIONAL SECTION: a.root-servers.net. 3580244 IN A 198.41.0.4 b.root-servers.net. 3576238 IN A 192.228.79.201 c.root-servers.net. 3580290 IN A 192.33.4.12 d.root-servers.net. 3575852 IN A 199.7.91.13 e.root-servers.net. 3523146 IN A 192.203.230.10 f.root-servers.net. 3590994 IN A 192.5.5.241 g.root-servers.net. 3549348 IN A 192.112.36.4 h.root-servers.net. 3586059 IN A 198.97.190.53 i.root-servers.net. 3534085 IN A 192.36.148.17 j.root-servers.net. 3562264 IN A 192.58.128.30 k.root-servers.net. 3562350 IN A 193.0.14.129 l.root-servers.net. 3534062 IN A 199.7.83.42 m.root-servers.net. 3561115 IN A 202.12.27.33 a.root-servers.net. 3574439 IN AAAA 2001:503:ba3e::2:30 b.root-servers.net. 3565057 IN AAAA 2001:500:84::b ;; Query time: 7 msec ;; SERVER: 10.225.30.181#53(10.225.30.181) ;; WHEN: Tue May 23 20:33:36 2017 ;; MSG SIZE rcvd: 492
Internet域名空间的顶级域是由ICANN(英特网名称与数字地址分配机构)负责管理,这是一个近年来成立的负责管理Internet域名即地址系统的非营利机构。顶级域分为通用和国家两大类。
通用顶级域名 | 说明 | 通用顶级域名 | 说明 |
com | 商业机构 | biz | 商业机构 |
net | 网络服务组织 | name | 个人 |
org | 非营利性组织 | pro | 专用人士 |
edu | 教育机构 | coop | 商业合作社 |
gov | 政府机构 | aero | 航空运输业 |
mil | 军事机构 | museum | 博物馆行业 |
int | 国际组织 | travel | 旅游行业 |
info | 信息行业 | job | 招聘和求职市场 |
除美国以外的国家或地区需要使用国家域名,国家域名使用双字母来进行标识。常见国家顶级域名有
国家顶级域名 | 说明 | 国家顶级域名 | 说明 |
cn | 中国 | jp | 日本 |
hk | 中国香港 | uk | 英国 |
tw | 中国台湾 | kr | 韩国 |
mo | 中国澳门 | de | 德国 |
sg | 新加坡 | fr | 法国 |
us | 美国 | ru | 俄罗斯 |
5.2、DNS工作原理
在DNS出现之前,通常是通过计算机上维护一个hosts文件(/etc/hosts)的方式来实现主机名和IP地址之间的解析。管理员在hosts文件中记录所有需要访问的主机的主机名与IP地址,当需要进行解析的时候系统会自动查询hosts文件,并找出匹配的解析关系。采用这种方式,每台主机上都必须维护一个hosts文件。网络中每增加一台计算机就必须手工修改hosts文件,添加新的计算机主机名和IP地址对应的记录。
随着计算机网络的快速发展,网络中计算机数量随之快速增长,这种依赖hosts文件来实现主机名和IP地址之间解析的方式无法满足网络发展的需求。DNS提供了完整解决方案。
DNS服务器采用C/S方式进行工作。其具体工作流程为:
1、当需要进行DNS解析时,系统会向本地DNS服务器发出解析请求,由本地DNS服务器进行域名和IP地址的解析工作。 2、本地DNS服务器收到用户请求后,则会将自身的DNS数据库进行查找匹配的域名和IP记录。如果找到则把结果返回给客户端并完成解析工作;如果没有找到则把请求转发给根服务器。 3、根域DNS服务器查到所对应顶级域,将结果返回本地DNS服务器;本地DNS服务器根据顶级域地址向顶级域发起请求,顶级域DNS服务器查到二级域对应地址返回给本地DNS服务器;本地DNS服务器根据二级域地址向二级域DNS服务器发送请求,二级域DNS服务器查到三级域对应地址返回给本地DNS服务器;以此类推,直到本地DNS服务器找到最终要解析的域名所对应的IP地址 4、最终本地DNS服务器把结果返回给客户端 5、如果经过查找后依然无法找到所需要的解析记录,则有本地DNS服务器向客户端返回无法解析的错误信息。 |
上面的工作流程为正向解析,即FQDN-->IP,反向解析为IP-->FQND正反向解析是两个不同的名称空间,是两棵不同的解析树;不应该存放同一个数据库。FQDN(Full Qualified Domain Name, 完全限定域名)。
5.3、DNS服务器的安装
bind是一款代码的DNS服务器软件,它是由伯克利大学编写,全名(Berkeley Internet Name Domain)伯克利英特网域名,是目前世界上使用最为广泛的DNS服务器软件。
Centos6.5中自带了bind软件。但是为了使用最新版的bind软件,可以从官方网站http://www.isc.org/上下载该软件软代码进行安装,也可以直接使用yum安装。
[root@mylinux home]# yum install bind -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu.cn * epel: mirrors.tuna.tsinghua.edu.cn * epel-debuginfo: mirrors.tuna.tsinghua.edu.cn * epel-source: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.tuna.tsinghua.edu.cn * updates: mirrors.hust.edu.cn Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 32:9.8.2-0.62.rc1.el6_9.2 will be installed --> Processing Dependency: portreserve for package: 32:bind-9.8.2-0.62.rc1.el6_9.2.x86_64 --> Running transaction check ---> Package portreserve.x86_64 0:0.0.4-11.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================================= Package Arch Version Repository Size ========================================================================================= Installing: bind x86_64 32:9.8.2-0.62.rc1.el6_9.2 updates 4.0 M Installing for dependencies: portreserve x86_64 0.0.4-11.el6 base 23 k Transaction Summary ========================================================================================= Install 2 Package(s) Total download size: 4.0 M Installed size: 7.3 M Downloading Packages: (1/2): bind-9.8.2-0.62.rc1.el6_9.2.x86_64.rpm | 4.0 MB 00:42 (2/2): portreserve-0.0.4-11.el6.x86_64.rpm | 23 kB 00:00 ----------------------------------------------------------------------------------------- Total 87 kB/s | 4.0 MB 00:47 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : portreserve-0.0.4-11.el6.x86_64 1/2 Installing : 32:bind-9.8.2-0.62.rc1.el6_9.2.x86_64 2/2 Verifying : portreserve-0.0.4-11.el6.x86_64 1/2 Verifying : 32:bind-9.8.2-0.62.rc1.el6_9.2.x86_64 2/2 Installed: bind.x86_64 32:9.8.2-0.62.rc1.el6_9.2 Dependency Installed: portreserve.x86_64 0:0.0.4-11.el6 Complete!
启动和关闭bind
安装完成后可以开启bind服务,bind通过named命令进行启动,一般让其后台运行。
[root@mylinux named]# service named start Generating /etc/rndc.key:[ OK ] Starting named: [ OK ] [root@mylinux named]# ss -tunlp | grep :53 #查看DNS监听的端口,默认只监听本机 udp UNCONN 0 0 127.0.0.1:53 *:* users:(("named",1538,512)) udp UNCONN 0 0 ::1:53 :::* users:(("named",1538,513)) tcp LISTEN 0 3 ::1:53 :::* users:(("named",1538,21)) tcp LISTEN 0 3 127.0.0.1:53 *:* users:(("named",1538,20))
5.4、bind服务器配置
bind的主要配置文件包括named.conf和相应的区域文件,bind中各种配置的更改都是通过这个文件完成,修改完成后需要重新启动bind服务使配置生效。其主要配置文件有:
服务脚本:/etc/rc.d/init.d/named 主配置文件:/etc/named.conf, /etc/named.rfc1912.zones(请求注解文档) 区域解析库文件:/var/named/zone_name.zone(至少包含根、本地、回环这三个区域文件) named.ca named.localhost named.loopback |
named.conf配置文件
named.conf是bind的主要配置文件,里面存储了大量的bind自身的设置信息。bind安装完成后并不会自动创建该配置文件,用户需要通过命令手工生成。 默认显示内容为
[root@mylinux etc]# cat name.conf key "rndc-key" { algorithm hmac-md5; secret "9WzbeVyRhvPUak0Irw6pLA=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; [root@mylinux etc]#
named.conf配置文件由配置语句和注释语句组成。每条配置语句以分号';'结尾,多条配置语句组成语句块;注释语句使用两个左斜杠'//'作为注释符。named.conf配置文件所支持的配置语句有:
语句 | 说明 |
acl | 定义一个主机匹配列表,用于访问控制或其它用途 |
controls | 定义rndc工具与bind服务进程的通信 |
include | 把其他文件中的内容包含进来 |
key | 定义加密秘钥 |
logging | 定义系统日志信息 |
lwres | 把named配置为轻量级解释器 |
masters | 定义主域名列表 |
options | 设置全局选项 |
statistics-channels | 定义bind的统计信息的通信通道 |
server | 定义服务器的属性 |
trusted-keys | 定义信任的DNSSEC密钥 |
view | 定义视图 |
zone | 定义区域 |
acl语句,用于定义地址匹配列表,其格式为:
acl string { address_match_element; ... };
bind默认定义了一些地址匹配列表
地址匹配列表 | 说明 |
any | 匹配任何主机 |
none | 不匹配任何主机 |
localhost | 匹配系统上所有网卡的IPv4和IPv6的地址 |
localnets | 匹配任何与系统有接口的主机的IPv4和IPv6的地址 |
controls语句,用于定义rndc工具与bind服务进程的通信,系统管理员可以通过rndc向bind进行发出命令,并接受由bind返回的结果。其格式为:
controls { inet ( ipv4_address | ipv6_address | * ) [ port ( integer | * ) ] allow { address_match_element; ... } [ keys { string; ... } ]; unix unsupported; // not implemented };
include语句,用于把语句中所制定的文件的内容添加进named.conf配置文件中,该语句格式为:
include filename
key语句,用于定义TSIG或命令通道所使用的加密秘钥,其格式为:
key domain_name { algorithm string; secret string; };
option语句,用于设置影响整个DNS服务器的全局选项,该语句在named.conf配置文件中只能出现一次。如果没有设置该语句,bind将使用默认的option值。该语句支持选项非常多,常用选项有:
options { directory quoted_string; forward ( first | only ); forwarders [ port integer ] { ( ipv4_address | ipv6_address ) [ port integer ]; ... }; query-source ( ( ipv4_address | * ) | [ address ( ipv4_address | * ) ] ) [ port ( integer | * ) ]; query-source-v6 ( ( ipv6_address | * ) | [ address ( ipv6_address | * ) ] ) [ port ( integer | * ) ]; statistics-interval integer;
directory选项用于定义服务器的工作目录,在配置文件中所指定的所有相对路径都是相对于该路径来定义的。该目录也是服务器中大部分输出文件(如name.run)的存储位置。系统默认使用'.'(即bind启动的目录)作为工作目录,一般把bind的工作目录设置为/var/named,如
directory '/var/named';
forwarders选项用于指定DNS请求的转发到其他的DNS服务器上,该选项默认为空,也就是不进行转发 。选项值可以是一个IP地址或主机名,也可以是多台主机的列表,如
forwarders {192.168.191.2;192.168.191.100;192.168.191.105;}
forward选项仅在forwarders选项不为空时生效,该选项用于控制DNS服务器的请求转发操作。如果选项为first,则DNS服务器会先把请求转发给forwarders选项中所指定的远端DNS服务器。如果远端DNS服务器无法响应请求,则bind将尝试自行解析该请求;如果选项值为only,则bind至转发请求,并不进行处理。
query-source和query-source-v6选项分别用于设置DNS服务器所使用的IPv4和IPv6的IP地址和端口号。默认端口号为53,如果指定其他端口,将无法与全局的DNS服务器通信。
statistics-interval选项用于指定DNS服务器记录统计信息的时间间隔,单位为分钟,默认为60,最大值为40320,如果选项为0,则服务器不记录统计信息。
server语句,bind有可能与其他的DNS服务器进行通信,但是并非所有的DNS服务器都运行同一个版本的bind。server语句可以设置远程服务器的特征信息,以使双方能够正常通信。该语句的格式为:
server ( ipv4_address[/prefixlen] | ipv6_address[/prefixlen] ) { bogus boolean; edns boolean; edns-udp-size integer; max-udp-size integer; provide-ixfr boolean; request-ixfr boolean; keys server_key; transfers integer; transfer-format ( many-answers | one-answer ); transfer-source ( ipv4_address | * ) [ port ( integer | * ) ]; transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]; support-ixfr boolean; // obsolete };
view语句,该语句可以使bind根据客户端地址来决定需要返回的域名解析结果,也就是说,不同的主机通过同一台DNS服务器对同一个域名解析,会得到不同的解析结果。其格式为:
view string optional_class{ match-clients { address_match_element; ... }; match-destinations { address_match_element; ... }; match-recursive-only boolean; key string { algorithm string; secret string; }; zone string optional_class { ... }; }
每一条view语句定义了一个客户端集合所能看到的视图,如果客户端匹配试图中的match-clients选项所定义的客户端列表,那么bind将根据该视图返回解析结果。例如,希望对内网用户和外网用户进行区分,使他们访问同一个域名时会得到不同的结果。可以使用view语句定义不同的视图,在两个视图中分别定义不同的属性,以达到效果。
view 'internal'{ match-clients { 172.0.0.0/8; }; recursion yes; zone 'example.com'{ type master: file 'example-internal.zone'; }; }; view 'external'{ match-clients { any; }; recursion no; zone 'example.com'{ type master: file 'example-external.zone'; }; };
zone语句,该语句是named.conf文件的核心部分。每一条zone语句定义一个区域,用户可以在区域中设置该区域相关的选项。在bind中可以设置多种类型的区域,如表所示。不同类型的区域,其zone语句的d定义有所不同。
区域类型 | 说明 |
master | 主DNS区域 |
slave | 从DNS区域,由主DNS区域控制 |
forward | 将解析请求转发给其他服务器 |
hint | 根DNS服务器集 |
stub | 与从区域类似,但只保存DNS服务器的名字 |
zone 'domain_name' IN{ type master; file 'path'; }; zone '.' IN{ type hint; file 'path'; };
其中,根域的名称为'.',type选项定义区域的类型,根域所对应的类型代码为hint。file选项定义了该区域所使用的区域文件,在该文件中可以定义与该区域文件相关的各种属性。主DNS区域是bind中最基本的区域类型,它又可以分为正向解析区域和反向解析区域两种。如下面定义了一个域名为test.com的正向解析区域,使用区域文件为test.zone。
zone 'test.com' IN { type master; file 'test.zone'; allow-update {none;}; };
反向解析主区域的例子为:
zone '1.168.192.in-addr.arpa' IN { type master; file 'test.local'; allow-update {none;}; };
检查该配置文件语法错误的命令有:
Service named-checkconfig #检查配置错误 service name-checkzone #检查区域错误
根区域文件named.ca
named.ca是一个特殊的区域文件,该文件中记录了Internet上的根DNS服务器的名称和IP地址。DNS服务器接收到客户端发来的解析请求后,如果在本地找不到匹配的DNS记录,则把请求发送到该文件中所定义的根DNS服务器上进行逐级查找。在该文件中总共定义13个根DNS服务器。
[root@mylinux var]# cat named.ca ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t NS . @a.root-servers.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1193 ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 518400 IN NS e.root-servers.net. . 518400 IN NS h.root-servers.net. . 518400 IN NS l.root-servers.net. . 518400 IN NS i.root-servers.net. . 518400 IN NS a.root-servers.net. . 518400 IN NS d.root-servers.net. . 518400 IN NS c.root-servers.net. . 518400 IN NS b.root-servers.net. . 518400 IN NS j.root-servers.net. . 518400 IN NS k.root-servers.net. . 518400 IN NS g.root-servers.net. . 518400 IN NS m.root-servers.net. . 518400 IN NS f.root-servers.net. ;; ADDITIONAL SECTION: e.root-servers.net. 518400 IN A 192.203.230.10 e.root-servers.net. 518400 IN AAAA 2001:500:a8::e h.root-servers.net. 518400 IN A 198.97.190.53 h.root-servers.net. 518400 IN AAAA 2001:500:1::53 l.root-servers.net. 518400 IN A 199.7.83.42 l.root-servers.net. 518400 IN AAAA 2001:500:9f::42 i.root-servers.net. 518400 IN A 192.36.148.17 i.root-servers.net. 518400 IN AAAA 2001:7fe::53 a.root-servers.net. 518400 IN A 198.41.0.4 a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30 d.root-servers.net. 518400 IN A 199.7.91.13 d.root-servers.net. 518400 IN AAAA 2001:500:2d::d c.root-servers.net. 518400 IN A 192.33.4.12 ;; Query time: 68 msec ;; SERVER: 198.41.0.4#53(198.41.0.4) ;; WHEN: Thu May 25 03:26:39 2017 ;; MSG SIZE rcvd: 508
正向解析区域文件
正向解析区域文件用于映射域名和IP地址,文件中包含该文件区域的所有参数,包括域名,IP地址、刷新时间、重试时间、和超时等。
资源记录(Resource Record, RR)格式:
NAME(类型) [TTL](缓存时长) IN RRT(DNS资源记录类型) VALUE(数据)
1、SOA(Start Of Authority): 起始授权记录,只能有一个
name: 区域名称, 通常可以简写为@,例如:magedu.com.
value: 主DNS服务器的FQDN
注意:SOA必须是区域数据库文件第一条记录
@ 600 IN SOA ns.magedu.com. dnsadmin.magedu.com.( serial number; 序列号,十进制数字,不超过10位,通常使用日期,如2014031001 refresh time ; 刷新时间,即每隔多久到主服务器检查一次 retry time ; 重试时间,应该小于refresh time expire time ; 过期时间 negative answer ttl ;否定答案的ttl )
2、NS(Name Server): ZONE NAME --> FQDN 名称服务器,可以有多个
name: 区域名称,通常可以简写为@
value: DNS服务器的FQDN(可以使用相对名称)
@ 600 IN NS ns
3、MX(Mail eXchanger): ZONE NAME --> FQDN 邮件交换器
name: 区域名称,用于标识smtp服务器
value: 包含优先级和FQDN,优先级:0-99, 数字越小,级别越高;
@ 600 IN MX 10 mail
4、A(address):FQDN-->IPv4 5、AAAA:FQDN-->IPv6
name: FQDN(可以使用相对名称)
value: IP
www 600 IN A 192.168.1.2
6、PTR(pointer):IP-->FQDN只能定义在反向区域数据文件中
name: IP, 逆向的主机地址,例如172.16.100.7的name为7.100,
完全格式为7.100.16.172.in-addr.arpa.
value: FQDN
7.100 600 IN PTR www.maged.com.
7、CNAME(Canonical NAME): FQDN-->FQDN别名记录
name: FQDN
value: FQDN
ftp IN CNAME www
一个完整的正向解析区域文件:
$TTL 1D @ IN SOA test.com. root.test.com.( 0 1D 1H 1W 3H ) IN NS dns.test.com. IN MX 10 mail1.test.com. IN MX 10 mail2.test.com. www IN A 192.168.1.101 mail1 IN A 192.168.1.102 mail2 IN A 192.168.1.103 dns IN A 192.168.1.104
反向解析区域文件
用于定义IP地址到域名的解析,它采用与正向解析文件类似的选项和格式。但由于是进行反向解析,所以该文件是使用PTR指针记录,而不是主机记录。下面是一个反向解析的例子
$TTL 86400 @ IN SOA test.com. root.test.com.( 20031001 7200 3600 43200 86400 ) IN NS dns.test.com. 101 IN PTR www.test.com. 102 IN PTR mail1.test.com. 103 IN PTR mail2.test.com. 104 IN PTR dns.test.com.
DNS服务器类型
主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理维护; 从DNS服务器:从主DNS服务器或其它的从DNS服务器那里“复制”(区域传递)一份解析库; 序列号:解析库的版本号;前提:主服务器解析库内容发生变化,其序列递增; 刷新时间间隔:从服务器从主服务器请求同步解析库的时间间隔; 重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔; 过期时长:从服务器始终联系不到主服务器时,从服务器角度,停止提供服务。 缓存名称服务器:非权威答案。 |
主从服务器同步的方式:
域:Domain(逻辑概念)区域:Zone(物理概念)
区域传送:
全量区域传送:传送整个解析库。AXFR
增量区域传送:传递解析库变化的那部分内容。IXFR
rndc命令
rndc: Remote Name Domain Controller远程管理BIND的工具,默认与bind安装在一起,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能。监听端口(953/tcp)。
rndc与bind通过密钥进行连接互信。
rndc: 持有一半密钥,保存于rndc的配置文件中
BIND:持有一半密钥,保存于主配置文件中
rndc的配置文件/etc/rndc.conf
在CentOS或RHEL系统中配置文件为: 密钥文件/etc/rndc.key
命令格式:rndc COMMAND
reload: 重载主配置文件和区域解析库文件 reload zone: 重载区域解析库文件 retransfer zone: 手动启动区域传送过程,而不管序列号是否增加; notify zone: 重新对区域传送发通知; reconfig: 重载主配置文件 querylog: 开启或关闭查询日志; trace: 递增debug级别; trace LEVEL: 指定使用的级别 flush: 清空服务器的缓存 flushname name: 清空指定名称相关的缓存 |
5.5、各种DNS服务器的配置方法
缓存名称服务器
缓存名称服务器配置十分简单,只需要通过yum安装后,对主配置文件进行一些修改即可。
[root@mylinux named]# vim /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 port 53 { 0.0.0.0; }; 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 // dnssec-validation yes; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; .... [root@mylinux named]# service named restart #重启服务 Stopping named: [ OK ] Starting named: [ OK ] [root@mylinux named]# dig -t A www.baidu.com @192.168.191.128 #测试解析结果 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t A www.baidu.com @192.168.191.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55532 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 5 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 1200 IN CNAME www.a.shifen.com. www.a.shifen.com. 300 IN A 111.13.100.91 www.a.shifen.com. 300 IN A 111.13.100.92 ;; AUTHORITY SECTION: a.shifen.com. 1200 IN NS ns4.a.shifen.com. a.shifen.com. 1200 IN NS ns3.a.shifen.com. a.shifen.com. 1200 IN NS ns5.a.shifen.com. a.shifen.com. 1200 IN NS ns2.a.shifen.com. a.shifen.com. 1200 IN NS ns1.a.shifen.com. ;; ADDITIONAL SECTION: ns5.a.shifen.com. 1200 IN A 119.75.222.17 ns3.a.shifen.com. 1200 IN A 61.135.162.215 ns2.a.shifen.com. 1200 IN A 180.149.133.241 ns4.a.shifen.com. 1200 IN A 115.239.210.176 ns1.a.shifen.com. 1200 IN A 61.135.165.224 ;; Query time: 1102 msec ;; SERVER: 192.168.191.128#53(192.168.191.128) ;; WHEN: Thu May 25 21:12:03 2017 ;; MSG SIZE rcvd: 260
主DNS服务器
配置主DNS服务器时,需要在主配置文件中定义区域,以及配置解析数据库文件。
[root@mylinux named]# vim /etc/named.rfc1912.zones 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 "mylinux.com" IN { ;添加的区域mylinux.com type master; file "mylinux.com.zone"; allow-update { none; }; }; "/etc/named.rfc1912.zones" 46L, 1022C written [root@mylinux named]# named-checkconf /etc/named.rfc1912.zones #检查配置文件是否错误 [root@mylinux named]# vim /var/named/mylinux.com.zone #解析数据库文件 $TTL 1D @ IN SOA test.com. root.test.com.( 0 1D 1H 1W 3H ) @ IN NS dns @ IN MX 10 mail1 @ IN MX 10 mail2 dns IN A 192.168.1.104 www IN A 192.168.1.101 mail1 IN A 192.168.1.102 mail2 IN A 192.168.1.103 "mylinux.com.zone" 15L, 269C written [root@mylinux named]# named-checkzone @ /var/named/mylinux.com.zone #检查数据解析是否错误 zone ./IN: loaded serial 0 OK [root@mylinux named]# service named restart #重启服务 Stopping named: [ OK ] Starting named: [ OK ] [root@mylinux named]# dig -t A www.mylinux.com @192.168.191.128 #测试解析结果 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t A www.mylinux.com @192.168.191.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12794 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.mylinux.com. IN A ;; ANSWER SECTION: www.mylinux.com. 86400 IN A 192.168.1.101 ;; AUTHORITY SECTION: mylinux.com. 86400 IN NS dns.mylinux.com. ;; ADDITIONAL SECTION: dns.mylinux.com. 86400 IN A 192.168.1.104 ;; Query time: 1 msec ;; SERVER: 192.168.191.128#53(192.168.191.128) ;; WHEN: Thu May 25 21:39:52 2017 ;; MSG SIZE rcvd: 83 [root@mylinux named]# dig -t A mail1.mylinux.com @192.168.191.128 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t A mail1.mylinux.com @192.168.191.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37024 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;mail1.mylinux.com. IN A ;; ANSWER SECTION: mail1.mylinux.com. 86400 IN A 192.168.1.102 ;; AUTHORITY SECTION: mylinux.com. 86400 IN NS dns.mylinux.com. ;; ADDITIONAL SECTION: dns.mylinux.com. 86400 IN A 192.168.1.104 ;; Query time: 0 msec ;; SERVER: 192.168.191.128#53(192.168.191.128) ;; WHEN: Thu May 25 21:40:37 2017 ;; MSG SIZE rcvd: 85 [root@mylinux named]# dig -t A mail2.mylinux.com @192.168.191.128 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t A mail2.mylinux.com @192.168.191.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41030 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;mail2.mylinux.com. IN A ;; ANSWER SECTION: mail2.mylinux.com. 86400 IN A 192.168.1.103 ;; AUTHORITY SECTION: mylinux.com. 86400 IN NS dns.mylinux.com. ;; ADDITIONAL SECTION: dns.mylinux.com. 86400 IN A 192.168.1.104 ;; Query time: 0 msec ;; SERVER: 192.168.191.128#53(192.168.191.128) ;; WHEN: Thu May 25 21:40:48 2017 ;; MSG SIZE rcvd: 85 [root@mylinux named]#
反向解析
反向解析区域名称一般以in-addr.arpa结尾,例如172.16.100.-->100.16.172.in-addr.arpa.
[root@mylinux named]# vim /etc/named. named.conf named.iscdlv.key named.root.key named.confbak named.rfc1912.zones [root@mylinux named]# vim /etc/named.rfc1912.zones 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 "mylinux.com" IN { type master; file "mylinux.com.zone"; allow-update { none; }; }; zone "100.168.192.in-addr.arpa" IN { #定义反向区域 type master; file "100.168.192.arpa"; "/etc/named.rfc1912.zones" 51L, 1127C [root@mylinux named]# named-checkconf #检查配置文件 [root@mylinux named]# vim 100.168.192.arpa #定义反向区域数据文件 $TTL 1D @ IN SOA mylinux.com. root.mylinux.com.( 0 1D 1H 1W 3H ) @ IN NS dns.mylinux.com. 1 IN PTR www.mylinux.com. 3 IN PTR mail1.mylinux.com. 4 IN PTR mail2.mylinux.com. 2 IN PTR dns.mylinux.com. "100.168.192.arpa" 13L, 259C written [root@mylinux named]# named-checkzone "100.168.192.in-addr.arpa" 100.168.192.arpa zone 100.168.192.in-addr.arpa/IN: loaded serial 0 #检查数据区域文件语法错误 OK [root@mylinux named]# service named reload #重载服务 Reloading named: [ OK ] [root@mylinux named]# dig -x 192.168.100.1 @192.168.191.128 #测试解析结果 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -x 192.168.100.1 @192.168.191.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35918 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;1.100.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 1.100.168.192.in-addr.arpa. 86400 IN PTR www.mylinux.com. ;; AUTHORITY SECTION: 100.168.192.in-addr.arpa. 86400 IN NS dns.mylinux.com. ;; ADDITIONAL SECTION: dns.mylinux.com. 86400 IN A 192.168.1.104 ;; Query time: 0 msec ;; SERVER: 192.168.191.128#53(192.168.191.128) ;; WHEN: Thu May 25 22:33:34 2017 ;; MSG SIZE rcvd: 107 [root@mylinux named]# dig -x 192.168.100.2 @192.168.191.128 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -x 192.168.100.2 @192.168.191.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42216 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;2.100.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 2.100.168.192.in-addr.arpa. 86400 IN PTR dns.mylinux.com. ;; AUTHORITY SECTION: 100.168.192.in-addr.arpa. 86400 IN NS dns.mylinux.com. ;; ADDITIONAL SECTION: dns.mylinux.com. 86400 IN A 192.168.1.104 ;; Query time: 0 msec ;; SERVER: 192.168.191.128#53(192.168.191.128) ;; WHEN: Thu May 25 22:33:42 2017 ;; MSG SIZE rcvd: 103 [root@mylinux named]# dig -x 192.168.100.3 @192.168.191.128 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -x 192.168.100.3 @192.168.191.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27136 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;3.100.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 3.100.168.192.in-addr.arpa. 86400 IN PTR mail1.mylinux.com. ;; AUTHORITY SECTION: 100.168.192.in-addr.arpa. 86400 IN NS dns.mylinux.com. ;; ADDITIONAL SECTION: dns.mylinux.com. 86400 IN A 192.168.1.104 ;; Query time: 0 msec ;; SERVER: 192.168.191.128#53(192.168.191.128) ;; WHEN: Thu May 25 22:33:46 2017 ;; MSG SIZE rcvd: 109
主从DNS服务器的配置
1、从服务器应该为一台独立的名称服务器 2、主服务器的区域解析库中必须有一条NS记录指向从服务器 3、从服务器主需要定义区域,而无需提供解析库文件,库文件放在/var/named/slaves/目录中 4、主服务器需要允许从服务器做区域传送 |
从服务器的配置
[root@localhost ~]# vim /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 { 192.168.191.128; 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; // // 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 { any; }; #允许查询 recursion yes; // dnssec-enable yes; // dnssec-validation yes; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; logging { "/etc/named.conf" 43L, 1005C written [root@localhost ~]# service named restart #启动服务 Stopping named: [ OK ] Starting named: [ OK ] [root@localhost ~]# ss -tunlp | grep :53 #查看监听端口 udp UNCONN 0 0 192.168.191.129:53 *:* users:(("named",1432,513)) udp UNCONN 0 0 127.0.0.1:53 *:* users:(("named",1432,512)) udp UNCONN 0 0 ::1:53 :::* users:(("named",1432,514)) tcp LISTEN 0 3 ::1:53 :::* users:(("named",1432,22)) tcp LISTEN 0 3 192.168.191.129:53 *:* users:(("named",1432,21)) tcp LISTEN 0 3 127.0.0.1:53 *:* users:(("named",1432,20)) [root@localhost ~]# vim /etc/named.rfc1912.zones #定义从服务器配置文件 // named.rfc1912.zones: // // Provided by Red Hat caching-nameserver package // // ISC BIND named zone configuration for zones recommended by // RFC 1912 section 4.1 : localhost TLDs and address zones // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt // (c)2007 R W Franks // // See /usr/share/doc/bind*/sample/ for example named configuration files. // 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 "mylinux.com" IN { #从服务器域文件 type slave; masters { 192.168.191.128;}; file "slaves/mylinux.com.zone"; "/etc/named.rfc1912.zones" 48L, 1080C written [root@localhost ~]# service named start Starting named: named: already running[ OK ]
在主DNS服务器中必须要有从服务器的NS记录,才会通知从服务器读取数据,否则不会通知。
[root@mylinux named]# service named reload #重载DNS主服务器 Reloading named: [ OK ] [root@mylinux named]# tail /var/log/messages #查看日志信息 May 25 23:15:25 mylinux named[2037]: received control channel command 'reload' May 25 23:15:25 mylinux named[2037]: loading configuration from '/etc/named.conf' May 25 23:15:25 mylinux named[2037]: using default UDP/IPv4 port range: [1024, 65535] May 25 23:15:25 mylinux named[2037]: using default UDP/IPv6 port range: [1024, 65535] May 25 23:15:25 mylinux named[2037]: sizing zone task pool based on 8 zones May 25 23:15:25 mylinux named[2037]: Warning: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones May 25 23:15:25 mylinux named[2037]: reloading configuration succeeded May 25 23:15:25 mylinux named[2037]: reloading zones succeeded May 25 23:15:25 mylinux named[2037]: zone mylinux.com/IN: loaded serial 3 May 25 23:15:25 mylinux named[2037]: zone mylinux.com/IN: sending notifies (serial 3)
查看从服务器是否读取到数据
[root@localhost slaves]# cat /var/named/slaves/mylinux.com.zone $ORIGIN . $TTL 86400 ; 1 day mylinux.com IN SOA mylinux.com. root.mylinux.com. ( 3 ; serial 86400 ; refresh (1 day) 3600 ; retry (1 hour) 604800 ; expire (1 week) 10800 ; minimum (3 hours) ) NS dns.mylinux.com. NS dns2.mylinux.com. MX 10 mail1.mylinux.com. MX 10 mail2.mylinux.com. $ORIGIN mylinux.com. dns A 192.168.1.104 dns2 A 192.168.191.129 mail1 A 192.168.1.102 mail2 A 192.168.1.103 www A 192.168.1.101
子域授权
在父域的资源记录文件中添加如下项:授权的子区域名称;子区域的名称服务器;子区域的名称服务器的IP地址:
mylinux.com. IN NS ns.mylinux.com. (授权的子域服务器名称) mylinux.com. IN NS ns2.mylinux.com. ns.mylinux.com. IN A 192.168.100.1 (子域服务器的IP地址) ns2.mylinux.com. IN A 192.168.100.2
转发服务器
被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行。
全部转发,凡是对非本机所负责的区域请求,都进行转发给指定服务器
配置文件中添加配置: options { forward only|first; forwarders { IP; }; }
区域转发,仅转发对特定的区域的请求至服务器
配置文件中添加区域配置: zone "特定区域" IN { type forward; forwarders { IP; } forward only|first; }
视图
内网: server1.company.com 172.20.1.1 server2.company.com 172.20.1.2 server3.company.com 172.20.1.3 server4.company.com 172.20.1.4 外网: ftp.company.com 61.124.100.1 www.company.com 61.124.100.2 mail.company.com 61.124.100.3 |
配置如图所示的网络DNS网络拓扑结构,内网用户可以使用正向解析所有内网计算机以及外网的服务器,反向解析内网服务器,允许递归查询;外用用户只能正向解析外网服务器,不能解析内网服务器,不允许使用递归查询。使用视图时,就必须所有的zone都归类到view中。
配置区域文件
[root@mylinux ~]# vim /etc/named.rfc1912.zones view "internal" { match-clients {172.20.1.0/24; }; recursion yes ; zone "localhost" IN { type master; file "localhost-internal.zone"; allow-update {none;}; }; zone "0.0.127.in-addr.arpa" IN { type master; file "localhost-internal.arpa"; allow-update { none;} ; }; zone "company.com" IN { type master; file "company-internal.zone"; allow-update {none;}; }; zone "1.20.127.in-addr.arpa" IN { type master; file "company-internal.arpa"; allow-update { none;} ; }; }; view "external" { match-clients { any; }; recursion no ; zone "." IN { type hint; file "root.ca"; }; zone "company.com" IN { type master; file "company-external.zone"; allow-update { none; }; }; }; [root@mylinux ~]# named-checkconf
localhost-internal.zone数据解析文件
[root@mylinux named]# vim localhost-internal.zone $TTL 86400 @ IN SOA localhost. root.localhost( 42 3H 15M 1W 1D ) @ 1D IN NS dns.localhost. dns 1D IN A 127.0.0.1 [root@mylinux named]# named-checkzone 'localhost' /var/named/localhost-internal.zone zone localhost-internal/IN: loaded serial 42 OK
localhost-inter.arpa反向解析文件
[root@mylinux named]# vim localhost-internal.arpa $TTL 86400 @ IN SOA localhost. root.localhost( 42 3H 15M 1W 1D ) @ 1D IN NS localhost. 1 1D IN PTR localhost. [root@mylinux named]# named-checkzone '0.0.127.in-addr.arpa' /var/named/localhost-internal.arpa zone 0.0.127.in-addr.arpa/IN: loaded serial 42 OK
company-internal.zone解析文件
[root@mylinux named]# vim company-internal.zone $TTL 1D @ IN SOA company.com. root.company.com. ( 1054654658 3H 5M 1W 1D) IN NS dns.company.com. IN MX 5 mail.com.com. ftp IN A 61.124.100.1 www IN A 61.124.100.2 mail IN A 61.124.100.3 dns IN A 172.20.1.11 servel1 IN A 172.20.1.1 servel2 IN A 172.20.1.2 servel3 IN A 172.20.1.3 servel4 IN A 172.20.1.4 "company-internal.zone" [New] 17L, 403C written [root@mylinux named]# named-checkzone 'company.com' /var/named/company-internal.zone zone company-internal/IN: loaded serial 1054654658 OK [root@mylinux named]#
company-internal.arpa反向解析文件
[root@mylinux named]# vim company-internal.arpa IN MX 5 mail.com.com. ftp IN A 61.124.100.1 www IN A 61.124.100.2 mail IN A 61.124.100.3 dns IN A 172.20.1.11 servel1 IN A 172.20.1.1 servel2 IN A 172.20.1.2 servel3 IN A 172.20.1.3 1 IN PTR server1.company.com. $TTL 1D @ IN SOA company.com. root.company.com. ( 1054654658 3H 5M 1W 1D) @ IN NS dns.company.com. 1 IN PTR server1.company.com. 2 IN PTR server2.company.com. 3 IN PTR server3.company.com. 4 IN PTR server4.company.com. 11 IN PTR dns.company.com. "company-internal.arpa" 13L, 256C written [root@mylinux named]# named-checkzone '1.20.127.in-addr.arpa' /var/named/company-internal.arpa zone 1.20.127.in-addr.arpa/IN: loaded serial 1054654658 OK
company-external.zone解析文件
[root@mylinux named]# vim company-external.zone $TTL 1D @ IN SOA company.com. root.company.com. ( 1054654658 3H 5M 1W 1D) IN NS dns.company.com. IN MX 5 mail.com.com. ftp IN A 61.124.100.1 www IN A 61.124.100.2 mail IN A 61.124.100.3 dns IN A 172.20.1.11 "company-external.zone" 13L, 263C written [root@mylinux named]# named-checkzone 'company-external' /var/named/company-external.zone zone company-external/IN: loaded serial 1054654658 OK
重启即可测试:
[root@mylinux named]# service named restart Stopping named: [ OK ] Starting named: [ OK ]
转载于:https://blog.51cto.com/yinsuifeng/1929562