一、前言
DNS 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53(TCP 53端口用于dns服务器自己同步数据,UDP 53端口用于查询解析)。是一个域名服务,应用层协议。
DNS查询原理及名词解释:
dns查询:迭代查询、递归查询
如下图,从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。
总结:
1.递归查询:
一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机;
2.迭代查询(反复查询):
一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;
所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询)”
也就是递归就是交给下一个服务器解决(下一个就相当于客户了,所以他也可以选择去递归,或者迭代)(迭代就是返回给当前的,当前自己再去处理)
递归即递给服务器,所有操作都有服务器来完成。
DNS解析
正向解析区域和反向解析区域
正向解析是将域名映射为IP地址
www.baidu.com --> 202.108.22.5
反向解析是将IP地址映射为域名
202.108.22.5 --> www.baidu.com
注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;
主-从DNS服务器
主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
“复制”操作的实施方式:
序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
否定答案的缓存时长:
主服务器”通知“从服务器随时更新数据;
区域传送:
全量传送:axfr, 传送整个数据库;
增量传送:ixfr, 仅传送变量的数据;
区域(zone)和域(domain):
baidu.com域: FQDN --> IP 正向解析库;区域 IP --> FQDN 反向解析库;区域
区域数据库文件:
资源记录:Resource Record, 简称rr; 记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条; NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的; A: Address, 地址记录,FQDN --> IPv4; AAAA:地址记录, FQDN --> IPv6; CNAME:Canonical Name,别名记录; PTR:Pointer,IP --> FQDN MX:Mail eXchanger,邮件交换器; 优先级:0-99,数字越小优先级越高;
资源记录的定义格式:
语法:name [TTL] IN RR_TYPE value
SOA:
name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称); (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代; (3) (主从服务协调属性的定义以及否定答案的TTL)
例如:
baidu.com. 86400 IN SOA baidu.com. admin.magedu.com. ( 2017010801 ; serial 2H ; refresh 10M ; retry 1W ; expire 1D ; negative answer ttl )
NS:
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
注意:一个区域可以有多个ns记录;
例如:
baidu.com. 86400 IN NS ns1.baidu.com. baidu.com. 86400 IN NS ns2.baidu.com.
MX:
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
例如:
baidu.com. IN MX 10 mx1.baidu.com. baidu.com. IN MX 20 mx2.baidu.com.
A:
name:某FQDN,例如www.baidu.com.
value:某IPv4地址;
例如:
www.baidu.com. IN A 1.1.1.1 www.baidu.com. IN A 1.1.1.2 bbs.baidu.com. IN A 1.1.1.1
AAAA:
name:FQDN value: IPv6
PTR:
name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.; value:FQND 例如: 4.3.2.1.in-addr.arpa. IN PTR www.baidu.com.
CNAME:
name:FQDN格式的别名; value:FQDN格式的正式名字; 例如: web.baidu.com. IN CNAME www.baidu.com.
注意:
(1) TTL可以从全局继承; (2) @表示当前区域的名称; (3) 相邻的两条记录其name相同时,后面的可省略; (4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;
二、安装DNS(bind)服务器
配置好网络和yum源
同步服务器时间
主机及角色分配:
安装软件包,备份配置文件
[root@master ~]# yum -y install bind-utils bind bind-devel [root@master ~]# cp /etc/named.conf /etc/named.conf-bak
配置bind成为主服务器
编辑主配置文件:
vim /etc/named.conf options { listen-on port 53 { 192.168.0.11; 127.0.0.1; }; #或者any // 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 { 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"; };
编辑区域配置文件并配置正向区域文件
DNS zone命名规范:
1.26个英文字母 2.0-9十个数字 3.-(英文连词号) 4.最多63字节长度 如果不符合以上条件bind不支持,如果想要强行使用,在master-view文件上配置 check-names ignore;
[root@master ~]# tail -4 /etc/named.rfc1912.zones #添加一个区域 zone "panwenbin.com" IN { #引号中为自定义名称 type master; #配置类型为master file "panwenbin.com.zone"; #指定文件名称,路径在directory指定的目录下 };
[root@master ~]# cd /var/named/ [root@master named]# vim panwenbin.com.zone $TTL 86400 $ORIGIN panwenbin.com. @ IN SOA ns1.panwenbin.com. admin.panwenbin.com ( 2017112601 1H 5M 7D 1D ) IN NS ns1 #指定该名由哪个DNS服务器来进行解析 IN NS ns2 IN MX 10 mx1 ns1 IN A 192.168.0.11 ns2 IN A 192.168.0.12 mx1 IN A 192.168.0.13 www IN A 192.168.0.11 www IN A 192.168.0.12 ftp IN CNAME www
检查语法
[root@master named]# named-checkconf #检查全部 [root@master named]# named-checkzone "panwenbin.com" /var/named/panwenbin.com.zone #只检查指定zone zone panwenbin.com/IN: loaded serial 2017112601 OK
设置权限(当前用户为root,bind服务器用户为named,所以需要设置named用户对新建立的文件有读取权限)
[root@master named]# chown :named panwenbin.com.zone [root@master named]# chmod 640 panwenbin.com.zone [root@master named]# ll panwenbin.com.zone -rw-r----- 1 root named 288 11月 28 11:35 panwenbin.com.zone
启动服务
[root@master named]# service named start #启动 Generating /etc/rndc.key: [确定] 启动 named: [确定] [root@master named]# netstat -tunlp|grep :53 #检查端口 tcp 0 0 192.168.0.11:53 0.0.0.0:* LISTEN 31056/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 31056/named udp 0 0 192.168.0.11:53 0.0.0.0:* 31056/named udp 0 0 127.0.0.1:53 0.0.0.0:* 31056/named [root@master named]# rndc status #检查状态 version: 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 CPUs found: 1 worker threads: 1 number of zones: 20 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running
测试:
测试工具主要有三个dig host nslookup,具体用法有兴趣可以自己查找资料
[root@master named]# dig -t A www.panwenbin.com @192.168.0.11 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A www.panwenbin.com @192.168.0.11 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13376 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2 #aa代表权威应答 ;; QUESTION SECTION: ;www.panwenbin.com. IN A ;; ANSWER SECTION: www.panwenbin.com. 86400 IN A 192.168.0.11 #解析结果 www.panwenbin.com. 86400 IN A 192.168.0.12 ;; AUTHORITY SECTION: panwenbin.com. 86400 IN NS ns2.panwenbin.com. panwenbin.com. 86400 IN NS ns1.panwenbin.com. ;; ADDITIONAL SECTION: ns1.panwenbin.com. 86400 IN A 192.168.0.11 ns2.panwenbin.com. 86400 IN A 192.168.0.12 ;; Query time: 0 msec ;; SERVER: 192.168.0.11#53(192.168.0.11) ;; WHEN: Tue Nov 28 11:44:36 2017 ;; MSG SIZE rcvd: 135
配置反向区域:
[root@master named]# vim /etc/named.rfc1912.zones [root@master named]# tail -4 /etc/named.rfc1912.zones #在区域配置文件最后添加如下四行 zone "0.168.192.in-addr.arpa" IN { #0.168.192表示解析网段不变的字段,这里是因为实验只解析192.168.0.0网段 type master; file "192.168.0.zone"; };
[root@master named]# vim 192.168.0.zone [root@master named]# cat 192.168.0.zone $TTL 86400 $ORIGIN 0.168.192.in-addr.arpa. @ IN SOA ns1.panwenbin.com. admin.panwenbin.com ( 2017112601 1H 5M 7D 1D ) IN NS ns1.panwenbin.com. IN NS ns2.panwenbin.com. 11 IN PTR ns1.panwenbin.com. 11 IN PTR www.panwenbin.com. 12 IN PTR mx1.panwenbin.com. 12 IN PTR www.panwenbin.com. 12 IN PTR ns2.panwenbin.com.
同样需要配置文件的权限
[root@master named]# chmod 640 192.168.0.zone [root@master named]# chown :named 192.168.0.zone[root@master named]# named-checkconf #检查语法 [root@master named]# rndc reload #启动 server reload successful
日志可以查看/var/log/messages
[root@master named]# tail /var/log/messages Nov 28 11:58:49 localhost named[31056]: received control channel command 'reload' Nov 28 11:58:49 localhost named[31056]: loading configuration from '/etc/named.conf' Nov 28 11:58:49 localhost named[31056]: using default UDP/IPv4 port range: [1024, 65535] Nov 28 11:58:49 localhost named[31056]: using default UDP/IPv6 port range: [1024, 65535] Nov 28 11:58:49 localhost named[31056]: sizing zone task pool based on 8 zones Nov 28 11:58:49 localhost named[31056]: Warning: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones Nov 28 11:58:49 localhost named[31056]: reloading configuration succeeded Nov 28 11:58:49 localhost named[31056]: zone 0.168.192.in-addr.arpa/IN: loaded serial 2017112601 Nov 28 11:58:49 localhost named[31056]: reloading zones succeeded Nov 28 11:58:49 localhost named[31056]: zone 0.168.192.in-addr.arpa/IN: sending notifies (serial 2017112601)
测试是否可以解析:
[root@master named]# host -t ptr 192.168.0.11 192.168.0.11 Using domain server: Name: 192.168.0.11 Address: 192.168.0.11#53 Aliases: 11.0.168.192.in-addr.arpa domain name pointer ns1.panwenbin.com. 11.0.168.192.in-addr.arpa domain name pointer www.panwenbin.com. [root@master named]# dig -x 192.168.0.12 @192.168.0.11 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -x 192.168.0.12 @192.168.0.11 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54159 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;12.0.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 12.0.168.192.in-addr.arpa. 86400 IN PTR ns2.panwenbin.com. 12.0.168.192.in-addr.arpa. 86400 IN PTR mx1.panwenbin.com. 12.0.168.192.in-addr.arpa. 86400 IN PTR www.panwenbin.com. ;; AUTHORITY SECTION: 0.168.192.in-addr.arpa. 86400 IN NS ns2.panwenbin.com. 0.168.192.in-addr.arpa. 86400 IN NS ns1.panwenbin.com. ;; ADDITIONAL SECTION: ns1.panwenbin.com. 86400 IN A 192.168.0.11 ns2.panwenbin.com. 86400 IN A 192.168.0.12 ;; Query time: 0 msec ;; SERVER: 192.168.0.11#53(192.168.0.11) ;; WHEN: Tue Nov 28 12:01:57 2017 ;; MSG SIZE rcvd: 174
三、配置slave服务器及主从同步
检测是否可以和主服务器进行全量区域传送(默认是允许所有,不安全,后面会介绍如何配置只允许指定的主机可以传送)
[root@slave ~]# dig -t axfr panwenbin.com @192.168.0.11 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t axfr panwenbin.com @192.168.0.11 ;; global options: +cmd panwenbin.com. 86400 IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. 2017112601 3600 300 604800 86400 panwenbin.com. 86400 IN NS ns1.panwenbin.com. panwenbin.com. 86400 IN NS ns2.panwenbin.com. panwenbin.com. 86400 IN MX 10 mx1.panwenbin.com. ftp.panwenbin.com. 86400 IN CNAME www.panwenbin.com. mx1.panwenbin.com. 86400 IN A 192.168.0.13 ns1.panwenbin.com. 86400 IN A 192.168.0.11 ns2.panwenbin.com. 86400 IN A 192.168.0.12 www.panwenbin.com. 86400 IN A 192.168.0.11 www.panwenbin.com. 86400 IN A 192.168.0.12 panwenbin.com. 86400 IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. 2017112601 3600 300 604800 86400 ;; Query time: 2 msec ;; SERVER: 192.168.0.11#53(192.168.0.11) ;; WHEN: Tue Nov 28 12:04:20 2017 ;; XFR size: 11 records (messages 1, bytes 281)
安装软件包
[root@slave ~]# yum install bind-utils bind bind-devel -y
编辑主配置文件
options { listen-on port 53 { 192.168.0.12; 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; // dnssec-lookaside auto; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; };
编辑zone配置文件
[root@slave ~]# tail -4 /etc/named.rfc1912.zones type slave; #类型为slave masters { 192.168.0.11; }; #指定master的地址 file "slaves/panwenbin.com.zone"; #指定同步后文件的存放位置 };
启动服务
[root@slave ~]# service named start Generating /etc/rndc.key: [确定] 启动 named: [确定] [root@slave ~]# netstat -tunlp|grep 53
注意:
要想主dns变更时通知从服务器,主dns上正向解析必须配置NS记录指定到从服务器,如当前主dns配置
slave服务器配置完成(仅对panwenbin.com),进行测试
[root@slave slaves]# ll /var/named/slaves #查看主dnszone文件是否传输到slave服务器 总用量 4 -rw-r--r-- 1 named named 491 11月 28 13:27 panwenbin.com.zone
可以查看一下,比我们自己定义的貌似要详细
[root@slave slaves]# cat panwenbin.com.zone $ORIGIN . $TTL 86400 ; 1 day panwenbin.com IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. ( 2017112601 ; serial 3600 ; refresh (1 hour) 300 ; retry (5 minutes) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS ns1.panwenbin.com. NS ns2.panwenbin.com. MX 10 mx1.panwenbin.com. $ORIGIN panwenbin.com. ftp CNAME www mx1 A 192.168.0.13 ns1 A 192.168.0.11 ns2 A 192.168.0.12 www A 192.168.0.11 A 192.168.0.12
现在再测试master服务器变更,slave服务器是否同步
添加一条记录,删除一条记录
删除www对应的192.168.0.12的记录,添加一条pop3的记录,同时手动将序列号+1
重载服务,生产环境不建议restart
[root@master named]# named-checkconf [root@master named]# rndc reload server reload successful [root@master named]# tail /var/log/messages Nov 28 13:43:11 localhost named[31056]: using default UDP/IPv6 port range: [1024, 65535] Nov 28 13:43:11 localhost named[31056]: sizing zone task pool based on 8 zones Nov 28 13:43:11 localhost named[31056]: Warning: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones Nov 28 13:43:11 localhost named[31056]: reloading configuration succeeded Nov 28 13:43:11 localhost named[31056]: reloading zones succeeded Nov 28 13:43:11 localhost named[31056]: zone panwenbin.com/IN: loaded serial 2017112602 Nov 28 13:43:11 localhost named[31056]: zone panwenbin.com/IN: sending notifies (serial 2017112602) Nov 28 13:43:11 localhost named[31056]: client 192.168.0.12#15508: query 'panwenbin.com/SOA/IN' denied Nov 28 13:43:11 localhost named[31056]: client 192.168.0.12#45259: transfer of 'panwenbin.com/IN': AXFR-style IXFR started #开始传输 Nov 28 13:43:11 localhost named[31056]: client 192.168.0.12#45259: transfer of 'panwenbin.com/IN': AXFR-style IXFR ended #结束传输
在slave服务器上查看变更是否同步
[root@slave slaves]# cat /var/named/slaves/panwenbin.com.zone $ORIGIN . $TTL 86400 ; 1 day panwenbin.com IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. ( 2017112602 ; serial 3600 ; refresh (1 hour) 300 ; retry (5 minutes) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS ns1.panwenbin.com. NS ns2.panwenbin.com. MX 10 mx1.panwenbin.com. $ORIGIN panwenbin.com. ftp CNAME www mx1 A 192.168.0.13 ns1 A 192.168.0.11 ns2 A 192.168.0.12 pop3 A 192.168.0.12 #pop3已经同步过来了 www A 192.168.0.11
主从复制注意事项:
1、应当为一台独立的名称服务器 2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器 3、从服务器只需要定义区域,而无需提供解析库文件,解析库文件应当放置在/var/named/slaves目录下 4、主从服务器时间应该同步 5、bind程序应当保持一致,如果不一致,应当从高,主低 6.要想主服务器变更后立即通知从服务器,应当手动将主区域解析库文件的序列号+1
反向区域同步:
配置过程和正向类似,主dns上反向解析必须配置NS记录指定到从服务器地址
从服务器:
[root@localhost ~]# tail -5 /etc/named.rfc1912.zones #添加一个新的zone zone "0.168.192.in-addr.arpa" IN { type slave; masters { 192.168.0.11; }; file "slaves/192.168.0.zone"; };
重载
named-checkconf rndc reload
主服务器变更记录,测试从服务器是否同步 ,此处忽略。每次做完变更后需要手动将序列号+1 !!!
四、子域授权
父服务器配置子域并授权
父服务器新增一个ops.panwenbin.com子域
[root@master named]# cat panwenbin.com.zone $TTL 86400 $ORIGIN panwenbin.com. @ IN SOA ns1.panwenbin.com. admin.panwenbin.com ( 2017112602 1H 5M 7D 1D ) IN NS ns1 IN NS ns2 IN MX 10 mx1 ns1 IN A 192.168.0.11 ns2 IN A 192.168.0.12 mx1 IN A 192.168.0.13 www IN A 192.168.0.11 pop3 IN A 192.168.0.12 ftp IN CNAME www ops IN NS ns1.ops #新增ops.panwenbin.com的NS记录 ns1.opsIN A 192.168.0.13
子服务器:
安装软件包
yum install bind-utils bind bind-devel -y
配置自己为一台主服务器
vim /etc/named.conf #修改options选项 options { listen-on port 53 { 192.168.0.13; 127.0.0.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; // dnssec-lookaside auto; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; };
编辑zone配置文件,添加ops.panwenbin.com zone
[root@sub ~]# tail -4 /etc/named.rfc1912.zones zone "ops.panwenbin.com" IN { type master; file "ops.panwenbin.com.zone"; };
编辑ops.panwenbin.com zone解析库文件
[root@sub ~]# cat /var/named/ops.panwenbin.com.zone $TTL 1D $ORIGIN ops.panwenbin.com. @ IN SOA ns1.ops.panwenbin.com. admin.ops.panwenbin.com. ( 2017112701 1H 10M 7D 1D) IN NS ns1 ns1 IN A 192.168.0.13 www IN A 192.168.0.100 * IN A 192.168.0.100
配置权限
[root@sub ~]# cd /var/named/ [root@sub named]# chmod 640 ops.panwenbin.com.zone [root@sub named]# chown :named ops.panwenbin.com.zone [root@sub named]# named-checkconf [root@sub named]# service named start Generating /etc/rndc.key: [确定] 启动 named: [确定]
测试当前区域 A 记录是否可以解析
[root@sub named]# dig -t A www.ops.panwenbin.com @192.168.0.13 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.ops.panwenbin.com @192.168.0.13 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37694 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.ops.panwenbin.com. IN A ;; ANSWER SECTION: www.ops.panwenbin.com. 86400 IN A 192.168.0.100 ;; AUTHORITY SECTION: ops.panwenbin.com. 86400 IN NS ns1.ops.panwenbin.com. ;; ADDITIONAL SECTION: ns1.ops.panwenbin.com. 86400 IN A 192.168.0.13 ;; Query time: 0 msec ;; SERVER: 192.168.0.13#53(192.168.0.13) ;; WHEN: Tue Nov 28 14:28:23 2017 ;; MSG SIZE rcvd: 89
测试当前区域 NS 记录是否可以解析
[root@sub named]# dig -t NS ops.panwenbin.com @192.168.0.13 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t NS ops.panwenbin.com @192.168.0.13 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48080 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;ops.panwenbin.com. IN NS ;; ANSWER SECTION: ops.panwenbin.com. 86400 IN NS ns1.ops.panwenbin.com. ;; ADDITIONAL SECTION: ns1.ops.panwenbin.com. 86400 IN A 192.168.0.13 ;; Query time: 0 msec ;; SERVER: 192.168.0.13#53(192.168.0.13) ;; WHEN: Tue Nov 28 14:29:25 2017 ;; MSG SIZE rcvd: 69
测试在当前区域解析父域是否成功(失败)
测试在父域解析子域是否成功(失败)
root@master named]# dig -t A www.ops.panwenbin.com @192.168.0.11 +norecurse ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A www.ops.panwenbin.com @192.168.0.11 +norecurse ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 54490 ;; flags: qr aa ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.ops.panwenbin.com. IN A ;; AUTHORITY SECTION: panwenbin.com. 86400 IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. 2017112602 3600 300 604800 86400 ;; Query time: 0 msec ;; SERVER: 192.168.0.11#53(192.168.0.11) ;; WHEN: Tue Nov 28 14:38:52 2017
现在解决这个问题
关闭主域和子域
dnssec-enable no;
dnssec-validation no; 选项
[root@master named]# rndc reload #查询载入服务 server reload successful [root@master named]# dig -t A www.ops.panwenbin.com @192.168.0.11 #再次测试 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A www.ops.panwenbin.com @192.168.0.11 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11860 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.ops.panwenbin.com. IN A ;; ANSWER SECTION: www.ops.panwenbin.com. 86400 IN A 192.168.0.100 ;; AUTHORITY SECTION: ops.panwenbin.com. 86400 IN NS ns1.ops.panwenbin.com. ;; ADDITIONAL SECTION: ns1.ops.panwenbin.com. 86400 IN A 192.168.0.13 ;; Query time: 2 msec ;; SERVER: 192.168.0.11#53(192.168.0.11) ;; WHEN: Tue Nov 28 14:47:09 2017 ;; MSG SIZE rcvd: 89
父可以正常解析子域了
五、bind acl:
把一个或多个地址归并为一个合集,并通过一个统一的名称调用
语法:
acl acl_name { ip; ip; net/prelen; };
示例:
acl mynet { 192.168.0.1/24; };
bind有四个内置的acl:
nome:没有一个主机 any:任意主机 local:本机 localnet:本机IP同掩码运算后得到的网络地址 注意:只能先定义后使用。因此,其一般定义在配置文件中options的前面
访问控制的指令:
allow-query {}; 允许查询的主机,类似于白名单 allow-transfer {};允许区域传送的主机,类似于白名单 allow-recursion {}; 允许递归的主机 allow-update {}; 允许更新区域数据库中的文件
添加一条ACL规则,只允许本机可以查询
rndc reload
使用外部地址无法解析(主服务器上)
[root@master named]# dig -t A www.panwenbin.com @192.168.0.11 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A www.panwenbin.com @192.168.0.11 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 63057 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.panwenbin.com. IN A ;; Query time: 0 msec ;; SERVER: 192.168.0.11#53(192.168.0.11) ;; WHEN: Tue Nov 28 15:43:25 2017 ;; MSG SIZE rcvd: 35
使用1270.0.1解析正常
[root@master named]# dig -t A www.panwenbin.com @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A www.panwenbin.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21222 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.panwenbin.com. IN A ;; ANSWER SECTION: www.panwenbin.com. 86400 IN A 192.168.0.11 ;; AUTHORITY SECTION: panwenbin.com. 86400 IN NS ns1.panwenbin.com. panwenbin.com. 86400 IN NS ns2.panwenbin.com. ;; ADDITIONAL SECTION: ns1.panwenbin.com. 86400 IN A 192.168.0.11 ns2.panwenbin.com. 86400 IN A 192.168.0.12 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Nov 28 15:42:51 2017 ;; MSG SIZE rcvd: 119
注:ACL规则在named.conf中影响全局,在zone中,只影响当前zone
默认任意主机都可以进行区域传送(前面已经测试过了),这是不安全的,所以需要指定允许的主机
定义可以测试的主机:
[root@master named]# vim /etc/named.rfc1912.zones zone "panwenbin.com" IN { type master; file "panwenbin.com.zone"; allow-transfer {192.168.0.12; }; #应当只定义需要同步的主机,如slave }; [root@master named]# rndc reload server reload successful
测试
192.168.0.12上
[root@slave slaves]# dig -t AXFR panwenbin.com @192.168.0.11 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t AXFR panwenbin.com @192.168.0.11 ;; global options: +cmd panwenbin.com. 86400 IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. 2017112602 3600 300 604800 86400 panwenbin.com. 86400 IN NS ns1.panwenbin.com. panwenbin.com. 86400 IN NS ns2.panwenbin.com. panwenbin.com. 86400 IN MX 10 mx1.panwenbin.com. ftp.panwenbin.com. 86400 IN CNAME www.panwenbin.com. mx1.panwenbin.com. 86400 IN A 192.168.0.13 ns1.panwenbin.com. 86400 IN A 192.168.0.11 ns2.panwenbin.com. 86400 IN A 192.168.0.12 ops.panwenbin.com. 86400 IN NS ns1.ops.panwenbin.com. ns1.ops.panwenbin.com. 86400 IN A 192.168.0.13 pop3.panwenbin.com. 86400 IN A 192.168.0.12 www.panwenbin.com. 86400 IN A 192.168.0.11 panwenbin.com. 86400 IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. 2017112602 3600 300 604800 86400 ;; Query time: 1 msec ;; SERVER: 192.168.0.11#53(192.168.0.11) ;; WHEN: Tue Nov 28 15:50:15 2017 ;; XFR size: 13 records (messages 1, bytes 324)
192.168.0.13上
[root@sub named]# dig -t AXFR panwenbin.com @192.168.0.11 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t AXFR panwenbin.com @192.168.0.11 ;; global options: +cmd ; Transfer failed.
allow-recursion 和 allow-update 由于篇幅这里就不演示了,有兴趣的可以自己查找相关资料,建议allow-recursion应当只允许当前网络内主机
六、 bind view 视图
DNS服务器有一个高级的功能,能够实现不同的用户访问同一个域名,把域名解析成不同的IP地址,使用户能够访问离他最近的服务器上的数据,这就是DNS服务器的视图功能。使用DNS服务器的视图功能可以增加网站的响应速度。例如,当我们网站的数据同步在两台web服务器上时,一台是电信服务器,一台是网通服务器,那么我们肯定希望全国访问我们网站的用户在打开网站的时候,能够自动实现,电信用户访问电信服务器,网通用户访问网通服务器。配置这种情况的前提是,web服务器必须要有一个电信的IP地址和一个网通的IP地址。DNS服务器的这种解析功能通常也被称之为智能解析。
DNS服务器的视图通常在配置文件中是使用view实现的。把要使用某些IP地址作单独访问的zone区域,统一放在一个命名的view段落中,并且在view中定义请求的IP地址或IP地址段,把IP地址写入match-clients选项中。如果像上面说的,区分电信和网通路线的话,那么可以使用两个acl访问控制列表写上电信或网通IP地址,定义电信网通路线,把acl名字写入view段落match-clients选项中。如下所示:
acl telecomip{ tele_IP; ... }; acl netcomip{ net_IP; ... }; view telecom { match-clients { telecomip; }; zone "ZONE_NAME" IN { type master; file "ZONE_NAME.telecom"; }; }; view netcom { match-clients { netcomip; }; zone "ZONE_NAME" IN { type master; file "ZONE_NAME.netcom"; }; }; view default { match-clients { any; }; zone "ZONE_NAME" IN { type master; file "ZONE_NAME.netcom"; }; };
需要注意的是:
(1)、如果使用了视图的功能,那么配置文件中的所有zone区域都要必须写在视图里面,如,配置文件里默认要配置的三个区域,根、127.0.0.1、1.0.0.127.in-addr.arpa都要写入视图。 (2)、在acl中定义IP地址,IP地址的写法可以是单个IP地址也可以是一个IP地址段加掩码,如:192.168.0.0/24。 (3)、视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件,区域应该尽量写前面。 (4)、如果定义的若干个视图的IP地址不全的话,那么可以在最后定义一个默认视图,match-clients选项中的IP地址写上any,代表如果此次访问的IP地址上面没有一个能匹配到,则在此处归类。
rndc的使用
rndc是Remote Name Domain Controllerr的简写,它是一个远程管理bind的工具。在使用rndc管理bind前需要使用rndc生成一对密钥文件,一半保存于rndc的配置文件中,另一半保存于bind主配置文件中。rndc的配置文件为/etc/rndc.conf,在CentOS或者RHEL中,rndc的密钥保存在/etc/rndc.key文件中。rndc默认监听在953号端口,其实在bind9中rndc默认就是可以使用可,不需要配置密钥文件。
rndc常用命令:
status #查看DNS状态 reload #重新加载配置文件 reload zone_name #重新加载指定区域 reconfig #重读配置文件并加载新增的区域 querylog #关闭或开启查询日志 flush #清空服务器的缓存 flushname name #清空指定名称相关的缓存 trace #打开debug, debug有级别的概念,每执行一次提升一次级别 trace LEVEL #指定 debug 的级别, trace 0 表示关闭debug
使用rndc:
1、生成密钥文件
rndc-confgen > /etc/rndc.conf 或者 rndc-confgen -r /dev/urandom > /etc/rndc.conf
生成的配置文件如下:
2、复制上面配置文件中下面一块被注释的区域至/etc/named.conf文件中,并把注释关闭。
3、重新加载bind后就可以使用rndc管理bind了。
4、使用rndc重新加载bind的配置文件。
注意:如果在使用rndc时,出现如上警告时,可以删除/etc/rndc.key文件,或者重命名该文件。
5、DNS服务器的debug功能默认是关闭的,使用rndc trace可以开启该功能,执行一次该命令 debug 级别加一级,也可以在命令后面加一个数字作为参数,指定debug级别,当数字为0时,表示关闭debug功能。
开启debug:
关闭debug:
6、其它命令具体操作相差不大,不在此讨论。
来源:https://www.cnblogs.com/panwenbin-logs/p/7908929.html