共计 18484 个字符,预计需要花费 47 分钟才能阅读完成。
DNS 服务原理详解
因特网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。通过主机名,最终得到该主机名对应的 IP 地址的过程叫做域名解析。
我们在访问一个网站的时候,只要输入该网站的网址就会跳转到该网站页面,而实现这一过程就需要 DNS 服务器将域名解析为 IP 地址,进而实现数据通信。
DNS:Domain Name Service 域名解析服务
监听端口:
udp/53,tcp/53
应用程序:
BIND:Bekerley Internat Name Domain 国际域名
DNS 域名
根域
一级域名:Top Level Domain: com, edu, mil, gov, net, org, int,arpa
组织域:.com, .org, .net, .mil, .edu, .gov, .info, .cc, .me, .tv
国家域:.cn, .us, .uk, .jp, .tw, .hk, .iq, .ir
反向域:.in-addr.arpa
最多 127 级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理。
DNS 树状结构图
DNS 查询类型:
递归查询
DNS 请求被服务器接受后,如果属于此服务器管辖范围则请求上级服务器依次传递请求,并且依次传递结果给发出请求的主机。
迭代查询
DNS 请求被服务器接受后,如果不是自己管辖范围,让客户端访问根域服务器,然后跟域通知客户端去访问下级服务器,直到最后客户端访问管辖请求域名的服务器为止。
名称服务器:域内负责解析本域内的名称的主机
根服务器:13 组服务器
解析类型:
正向解析:FQDN(完全域名)–> IP
反向解析:IP –> FQDN(完全域名)
FQDN:(Fully Qualified Domain Name)完全限定域名
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树,因此,也不是同一个解析库
DNS 服务器类型:
DNS 服务器的类型:
主 DNS 服务器
从 DNS 服务器
缓存 DNS 服务器(转发器)
主 DNS 服务器:管理和维护所负责解析的域内解析库的服务器;读写均可进行
从 DNS 服务器:从主服务器或从服务器“复制”(区域传输)解析库副本;只能进行读操作
序列号:解析库版本号,主服务器解析库变化时,其序列递增
刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
过期时长:从服务器联系不到主服务器时,多久后停止服务
否定答案的缓存时长
“通知”机制:主服务器解析库发生变化时,会主动通知从服务器
区域传输:
完全传输:传送整个解析库
增量传输:传递解析库变化的那部分内容
Domain: Fully Qualified Domain Name
正向:FQDN –> IP
反向:IP –> FQDN
负责本地域名的正向和反向解析库
正向区域
反向区域
DNS 解析:
一次完整的查询请求经过的流程:Client(客户端)–>hosts 文件–>DNS Service Local Cache(自己的本地缓存)–> DNS Server (recursion 递归) –> Server Cache(缓存)–>iteration(迭代) –> 根–> 顶级域名 DNS–> 二级域名 DNS…
解析答案:
肯定答案:
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:由直接负责的 DNS 服务器返回的答案
非权威答案:
例如,DNS 客户机查询 URL 地址 www.fastweb.com.cn 流程图
区域解析库:
由众多 RR 组成:(Resource Record 资源记录)
SOA:Start Of Authority(起始授权记录)
一个区域解析库有且仅能有一个 SOA 记录,必须位于解析库的第一条记录
A:internet Address(地址记录) FQDN –> IP
AAAA: FQDN –> IPv6
PTR: PoinTeR(域名服务记录) IP –> FQDN
一个区域解析库可以有多个 NS 记录
NS: Name Server(专用于标明当前区域的 DNS 服务器)
CNAME:Canonical Name (别名记录)
MX: Mail eXchanger(邮件交换器)
优先级:0-99,数字越小优先级越高
资源记录定义的格式:
语法:name [TTL] IN rr_type value
注意:
(1) TTL 可从全局继承
(2) @可用于引用当前区域的名字
(3)同一个名字可以通过多条记录定义多个不同的值;此时 DNS 服务器会以轮询方式响应
(4)同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
SOA 记录
name: 当前区域的名字,例如“rookie.com.”
value: 有多部分组成
(1)当前区域的主 DNS 服务器的 FQDN,也可以使用当前区域的名字
(2)当前区域管理员的邮箱地址;但地址中不能使用 @ 符号,一般用. 替换,例如 Linux.rookie.com
(3)主从服务区域传输相关定义以及否定的答案的统一的 TTL
例如:
rookie.com. 86400 IN SOA rookie.com. admin.rookie.com. (
2017052201 ; 序列号 serial
2H ; 刷新时间 refresh
10M ; 重试时间 retry
1W ; 过期时间 expire
1D ; 否定答案的 TTL 值 negative answer ttl
)
NS 记录:
name: 当前区域的名字
value: 当前区域的某 DNS 服务器的名字,例如 ns.rookie.com.
注意:一个区域可以有多个 NS 记录
例如:
rookie.com. IN NS ns1.rookie.com.
rookie.com. IN NS ns2.rookie.com.
注意:
(1)相邻的两个资源记录的 name 相同时,后续的可省略
(2)对 NS 记录而言,任何一个 ns 记录后面的服务器名字,都应该在后续有一个 A 记录
MX 记录:
name: 当前区域的名字
value: 当前区域的某邮件服务器 (smtp 服务器) 的主机名
一个区域内,MX 记录可有多个;但每个记录的 value 之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
例如:
rookie.com. IN MX 10(优先级)mx1.rookie.com.
rookie.com. IN MX 20(优先级)mx2.rookie.com.
注意:
(1)对 MX 记录而言,任何一个 MX 记录后面的服务器名字,都应该在后续有一个 A 记录
A 记录:
name: 某主机的 FQDN 例如 www.rookie.com.
value: 主机名对应主机的 IP 地址
例如:
www.rookie.com. IN A 1.1.1.1 www.rookie.com. IN A 2.2.2.2 mx1.rookie.com. IN A 3.3.3.3 mx2.rookie.com. IN A 4.4.4.4 $GENERATE 1-254 HOST$ A 1.2.3.$ *.rookie.com. IN A 5.5.5.5 rookie.com. IN A 6.6.6.6
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
AAAA 记录:
name: FQDN
value: IPv6
PTR 记录:
name: IP 地址,有特定格式,把 IP 地址反过来写,1.2.3.4,要写作 4.3.2.1;并且要加特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.rookie.com.
如 1.2.3 为网络地址,可简写成:
4 IN PTR www.rookie.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写
CNAME:
name:FQDN 格式的别名
value:FQDN 格式的正式名字
例如:
web.rookie.com. IN CNAME www.rookie.com.
子域:
子域,是相对父域来说的,指域名中的每一个段。各子域之间用小数点分隔开。放在域名最后的子域称为最高级子域,或称为一级域,在它前面的子域称为二级域。
子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权
类似根域授权 tld:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
rookie.com. 在.com 的名称服务器上,解析库中添加资源记录
rookie.com. IN NS ns1.rookie.com.
rookie.com. IN NS ns2.rookie.com.
rookie.com. IN NS ns3.rookie.com.
ns1.rookie.com. IN A 3.3.3.1
ns2.rookie.com. IN A 3.3.3.2
ns3.rookie.com. IN A 3.3.3.3
glue record:粘合记录,父域授权子域的记录
BIND 安装:
DNS 协议—>BIND
程序环境:
主程序:/usr/sbin/named
Unit File:/usr/lib/systemd/system/named.service
配置文件:/etc/named.conf
区域解析库文件:/var/named
关闭 dnssec 功能:
vim /etc/named.conf
dnssec-enable no;
dnssec-validation no;
解析一个区域:
定义:/etc/named.rfc1912.conf
zone“iLinux.io”IN {
type master;
file“ZONE_FILE”;
};
例:vim /etc/named.rfc1912.conf
zone“rookie.com”IN {
type master;
file“rookie.com.zone”;
};
定义解析库文件示例:
$TTL 600 #全局定义 缓存十分钟
iLinux.com. IN SOA iLinux.com. nsadmin.iLinux.com. (
2017052301
1H
5M
1W
6H )
IN NS dns1.iLinux.com.
IN NS dns2.iLinux.com.
dns1.iLinux.com. IN A 172.16.0.67
dns2.iLinux.com. IN A 172.16.0.68
www.iLinux.com.IN A 172.16.0.1
web IN CNAME www
BIND 的安装配置:
BIND:Berkeley Internet Name Domain
dns: 协议
BIND:dns 协议的一种实现
named:bind 程序的运行的进程名
dns 服务程序包:bind unbound
程序名:named unbound
程序包:yum list all bind*
bind:提供的 dns server 程序、以及几个常用的测试程序
bind-libs:被 bind 和 bind-utils 包中的程序共同用到的库文件
bind-utils:bind 客户端程序集,例如 dig, host, nslookup 等
bind-chroot:选装,让 named 运行于 jail 模式下
/var/named/chroot/
bind 服务器:
服务脚本和名称:/etc/rc.d/init.d/named
/usr/lib/systemd/system/named.service
主配置文件:/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
yum install -y bind 后可见
解析库文件:/var/named/ ZONE_NAME.ZONE
注意:
(1)一台 DNS 服务器可同时为多个区域提供解析
(2)必须要有根区域解析库文件;named.ca
(3)应该有两个区域解析库文件(如果包括 ipv6 的,应该更多)实现 localhost 和 127.0.0.1 的正反向解析库
正向:named.localhost
反向:named.loopback
rndc: remote name domain controller(远程域名控制器)
提供辅助性的管理功能 953/tcp 但默认监听于 127.0.0.1 地址,因此仅允许本地使用
bind 程序安装完成之后,默认即可做缓存名称服务器使用,如果没有专门负责解析的区域,直接即可启动服务
CentOS 6: service named start
CentOS 7: systemctl start named.service
主配置文件格式:
全局配置段:
options {…}
日志子系统配置段:
logging {…}
区域定义段:
zone“ZONE_NAME”IN {…}
区域定义:本机能够为哪些 zone 进行解析,就要定义哪些 zone
注意:
每个配置语句必须以分号结尾
任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的 IP
缓存名称服务器的配置:
监听能与外部主机通信的地址
listen-on port 53
listen-on port 53 {172.16.252.245;}
dnssec: 建议关闭 dnssec,设为 no(自己做实验时建议关闭)
dnssec-enable no
dnssec-validation no
dnssec-lookaside no
关闭仅允许本地查询:
//allow-query {localhost;}
检查配置文件语法错误:
named-checkconf /etc/named.conf
检查区域配置文件错误:
named-checkzone“rookie.com”/var/named/rookie.com.zone
例:[root@localhost ~]#vim /etc/named.conf
测试命令 dig:
dig [-t type] name [@SERVER] [query options]
dig 只用于测试 dns 系统,不会查询 hosts 文件进行解析
查询选项:
+[no]trace 程:跟踪解析过程 : dig +trace rookie.com
+[no]recurse:进行递归解析
[root@localhost ~]#dig -t A www.baidu.com @172.16.252.254 +trace
测试反向解析:
dig -x IP = dig -t ptr reverseip.in-addr.arpa
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
dig -t axfr rookie.com @10.10.10.11
dig -t axfr 100.1.10.in-addr.arpa @172.16.1.1
dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net
[root@localhost ~]#dig -t NS baidu.com @172.16.0.1 ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t NS baidu.com @172.16.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35043 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 6 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;baidu.com. IN NS ;; ANSWER SECTION: baidu.com. 54644 IN NS ns7.baidu.com. baidu.com. 54644 IN NS ns3.baidu.com. baidu.com. 54644 IN NS ns4.baidu.com. baidu.com. 54644 IN NS dns.baidu.com. baidu.com. 54644 IN NS ns2.baidu.com. ;; ADDITIONAL SECTION: ns2.baidu.com. 140982 IN A 61.135.165.235 ns4.baidu.com. 140982 IN A 220.181.38.10 dns.baidu.com. 140982 IN A 202.108.22.220 ns3.baidu.com. 140982 IN A 220.181.37.10 ns7.baidu.com. 140982 IN A 119.75.219.82 ;; Query time: 2 msec ;; SERVER: 172.16.0.1#53(172.16.0.1) ;; WHEN: Thu Jun 01 07:22:38 EDT 2017 ;; MSG SIZE rcvd: 208[root@localhost ~]#dig -t NS baidu.com @172.16.0.1 +nocomments ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t NS baidu.com @172.16.0.1 +nocomments ;; global options: +cmd ;baidu.com. IN NS baidu.com. 54627 IN NS dns.baidu.com. baidu.com. 54627 IN NS ns3.baidu.com. baidu.com. 54627 IN NS ns2.baidu.com. baidu.com. 54627 IN NS ns4.baidu.com. baidu.com. 54627 IN NS ns7.baidu.com. ns2.baidu.com. 140965 IN A 61.135.165.235 ns4.baidu.com. 140965 IN A 220.181.38.10 dns.baidu.com. 140965 IN A 202.108.22.220 ns3.baidu.com. 140965 IN A 220.181.37.10 ns7.baidu.com. 140965 IN A 119.75.219.82 ;; Query time: 1 msec ;; SERVER: 172.16.0.1#53(172.16.0.1) ;; WHEN: Thu Jun 01 07:22:56 EDT 2017 ;; MSG SIZE rcvd: 208
测试命令 host:
host [-t type] name [SERVER]
host -t NS rookie.com 172.16.0.1
host -t soa rookie.com
host -t mx rookie.com
host -t axfr rookie.com
host 1.2.3.4
nslookup 命令:nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个 DNS server 进行查询
set q=RR_TYPE: 指明查询的资源记录类型
name: 要查询的名称
[root@localhost ~]#nslookup > server 172.16.0.1 Default server: 172.16.0.1 Address: 172.16.0.1#53 > set q=a > www.tencent.com Server: 172.16.0.1 Address: 172.16.0.1#53 Non-authoritative answer: www.tencent.com canonical name = upfile.wj.qq.com.cloud.tc.qq.com. upfile.wj.qq.com.cloud.tc.qq.com canonical name = ssd.tcdn.qq.com. Name: ssd.tcdn.qq.com Address: 111.202.99.24 Name: ssd.tcdn.qq.com Address: 111.202.99.25 Name: ssd.tcdn.qq.com Address: 111.202.99.23 Name: ssd.tcdn.qq.com Address: 123.125.110.21 Name: ssd.tcdn.qq.com Address: 123.125.110.12 Name: ssd.tcdn.qq.com Address: 123.125.110.11 Name: ssd.tcdn.qq.com Address: 123.125.110.22
命令 rndc:
rndc:remote name domain contoller(远程域名控制器)
953/tcp,但默认监听于 127.0.0.1 地址,因此仅允许本地使用
rndc –> rndc (953/tcp)
rndc COMMAND
命令:
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件 /var/log/message
trace: 递增 debug 一个级别
trace LEVEL: 指定使用的级别
notrace: 为将调试级别设置为 0
flush: 清空 DNS
[root@localhost ~]#rndc status version: 9.9.4-RedHat-9.9.4-37.el7 <id:8f9657aa> 版本 CPUs found: 4 CPU worker threads: 4 线程 UDP listeners per interface: 4 接口 number of zones: 101 区域数 debug level: 0 调试级别 xfers running: 0 运行 xfers deferred: 0 延迟 soa queries in progress: 0 正在进行的 SOA 查询 query logging is OFF 查询记录 recursive clients: 0/0/1000 递归客户端 tcp clients: 0/100 TCP 客户端 server is up and running 服务器启动并运行
配置主 DNS 服务器:
(1)在主配置文件中定义区域
zone “ZONE_NAME” IN {type {master|slave|hint|forward}; file “ZONE_NAME.zone”; };
(2)定义区域解析库文件
出现的内容
宏定义
资源记录
主配置文件语法检查:
named-checkconf
解析库文件语法检查:
named-checkzone “rookie.com” /var/named/rookie.com.zone rndc status|reload ;service named reload
注意:实验配置前需要特别注意三点
关闭防火墙
关闭 SELinux
时间必须同步
配置解析一个正向区域:
以 rookie.com 域为例:(1)定义区域 在主配置文件中(/etc/named.conf)或主配置文件辅助配置文件(/etc/named.rfc1912.conf)中实现 [root@localhost ~]#vim /etc/named.rfc1912.zones zone “rookie.com” IN {type master; file “rookie.com.zone”;}; 注意:区域名字即为域名 (2) 建立区域数据文件(主要记录为 A 或 AAAA 记录)在 /var/named 目录下建立区域数据文件;文件为:/var/named/rookie.com.zone [root@localhost /var/named]#vim rookie.com.zone $TTL 600(全局变量 缓存 600 秒)rookie.com.(域名)IN SOA rookie.com. admin.rookie.com. 管理员邮箱 (2017060101 序列号 1H 刷新时间间隔一小时 5M 重试时间间隔五分钟 1W 过期时间一周 6H) 否定答案的 TTL 值六小时 IN NS dns1.rookie.com. IN NS dns2.rookie.com. dns1.rookie.com. IN A 172.16.250.149 dns2.rookie.com. IN A 172.16.252.245 www.rookie.com. IN A 172.16.0.1 web IN CNAME www 权限及属组修改:[root@localhost /var/named]#chgrp named /var/named/rookie.com.zone [root@localhost /var/named]#chmod o= /var/named/rookie.com.zone [root@localhost /var/named]#ll 总用量 20 drwxrwx— 2 named named 6 11 月 12 2016 data drwxrwx— 2 named named 6 11 月 12 2016 dynamic -rw-r—– 1 root named 2076 1 月 28 2013 named.ca -rw-r—– 1 root named 152 12 月 15 2009 named.empty -rw-r—– 1 root named 152 6 月 21 2007 named.localhost -rw-r—– 1 root named 168 12 月 15 2009 named.loopback -rw-r—– 1 root named 301 6 月 1 00:22 rookie.com.zone 检查语法错误:[root@localhost /var/named]#named-checkconf [root@localhost /var/named]#named-checkzone “rookie.com” /var/named/rookie.com.zone zone rookie.com/IN: loaded serial 2017060101 OK(3)让服务器重载配置文件和区域数据文件 [root@localhost /var/named]#rndc reload [root@localhost ~]#systemctl restart named.service(4)验证 [root@localhost /var/named]#dig -t A www.rookie.com @172.16.250.149 ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A www.rookie.com @172.16.250.149 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38718 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.rookie.com. IN A ;; ANSWER SECTION: www.rookie.com. 600 IN A 172.16.252.125 ;; AUTHORITY SECTION: rookie.com. 600 IN NS dns1.rookie.com. rookie.com. 600 IN NS dns2.rookie.com. ;; ADDITIONAL SECTION: dns1.rookie.com. 600 IN A 172.16.250.149 dns2.rookie.com. 600 IN A 172.16.252.245 ;; Query time: 0 msec ;; SERVER: 172.16.250.149#53(172.16.250.149) ;; WHEN: 四 6 月 01 01:02:13 CST 2017 ;; MSG SIZE rcvd: 129 也可以通过修改 /etc/hosts 省略 IP [root@localhost /var/named]#vim /etc/resolv.conf ; generated by /usr/sbin/dhclient-script search magedu.com #nameserver 172.16.0.1 [root@localhost /var/named]#dig -t A www.rookie.com ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A www.rookie.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39628 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.rookie.com. IN A ;; ANSWER SECTION: www.rookie.com. 600 IN A 172.16.252.125 ;; AUTHORITY SECTION: rookie.com. 600 IN NS dns2.rookie.com. rookie.com. 600 IN NS dns1.rookie.com. ;; ADDITIONAL SECTION: dns1.rookie.com. 600 IN A 172.16.250.149 dns2.rookie.com. 600 IN A 172.16.252.245 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: 四 6 月 01 01:08:08 CST 2017 ;; MSG SIZE rcvd: 129
配置解析一个反向区域
(1)定义区域 在主配置文件中或主配置文件辅助配置文件中实现;[root@localhost ~]#vim /etc/named.rfc1912.zones zone “16.172.in-addr.arpa” IN {type master; file “172.16.zone”;}; 注意:反向区域的名字 反写的网段地址.in-addr.arpa 16.172.in-addr.arpa(2)定义区域解析库文件(主要记录为 PTR)[root@localhost ~]#vim /var/named/172.16.zone $TTL 600 @ IN SOA rookie.com. admin.rookie.com. (2017060101 1H 5M 2W 1D) @ IN NS dns1.rookie.com. @ IN NS dns2.rookie.com. 149.250 IN PTR dns1.rookie.com. 245.252 IN PTR dns2.rookie.com. 125.252 IN PTR www.rookie.com. 权限及属组修改:[root@localhost /var/named]#chgrp named /var/named/rookie.com.zone [root@localhost /var/named]#chmod o= /var/named/rookie.com.zone 检查语法错误:[root@localhost ~]#named-checkconf [root@localhost ~]#named-checkzone “172.16” /var/named/172.16.zone zone 172.16/IN: loaded serial 2017060101 OK(3)让服务器重载配置文件和区域数据文件 [root@localhost ~]#rndc reload [root@localhost ~]#systemctl restart named.service(4)验证 [root@localhost /var/named]#dig -x 172.16.250.149 ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -x 172.16.259.149 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8132 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;149.259.16.172.in-addr.arpa. IN PTR ;; ANSWER SECTION: 149.259.16.172.in-addr.arpa. 600 IN PTR dns1.rookie.com. ;; AUTHORITY SECTION: 16.172.in-addr.arpa. 600 IN NS dns1.rookie.com. 16.172.in-addr.arpa. 600 IN NS dns2.rookie.com. ;; ADDITIONAL SECTION: dns1.rookie.com. 600 IN A 172.16.250.149 dns2.rookie.com. 600 IN A 172.16.252.245 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: 四 6 月 01 01:44:45 CST 2017 ;; MSG SIZE rcvd: 150
主从服务器:
注意:从服务器是区域级别的概念;
主区域配置:可以参照上面的正向区域配置和反向区域配置
从区域配置:
On Slave
(1)定义从区域(以另一虚拟机为例)[root@localhost ~]#vim /etc/named.rfc1912.zones zone “rookie.com.” IN {type slave; file “slaves/rookie.com.zone”; masters { 172.16.250.149;}; #指明主节点 };[root@localhost ~]#vim /etc/named.conf 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;}; /* – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. – If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. – If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; dnssec-enable no; dnssec-validation no; 配置文件语法检查:[root@localhost ~]#named-checkconf(2)主 / 从都要重载配置 [root@localhost ~]#rndc reload [root@localhost ~]#systemctl restart named.service [root@localhost ~]#ll /var/named/slaves/(文件已经同步)total 4 -rw-r–r– 1 named named 414 Jun 1 03:01 rookie.com.zone(3)验证 从 [root@localhost ~]#dig -t A www.rookie.com @172.16.250.149 ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A www.rookie.com @172.16.250.149 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5639 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.rookie.com. IN A ;; ANSWER SECTION: www.rookie.com. 600 IN A 172.16.252.125 ;; AUTHORITY SECTION: rookie.com. 600 IN NS dns1.rookie.com. rookie.com. 600 IN NS dns2.rookie.com. ;; ADDITIONAL SECTION: dns1.rookie.com. 600 IN A 172.16.250.149 dns2.rookie.com. 600 IN A 172.16.252.245 ;; Query time: 0 msec ;; SERVER: 172.16.250.149#53(172.16.250.149) ;; WHEN: Thu Jun 01 03:41:02 EDT 2017 ;; MSG SIZE rcvd: 129 (4)修改主配置文件,并重新测试 [root@localhost /var/named]#vim rookie.com.zone $TTL 600 rookie.com. IN SOA rookie.com. admin.rookie.com. (2017060102 1H 5M 1W 6D) IN NS dns1.rookie.com. IN NS dns2.rookie.com. dns1.rookie.com. IN A 172.16.250.149 dns2.rookie.com. IN A 172.16.252.245 www.rookie.com. IN A 172.16.252.125 web IN CNAME www ftp IN CNAME www [root@localhost ~]#dig -t A ftp.rookie.com @172.16.250.149 ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A ftp.rookie.com @172.16.250.149 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30068 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ftp.rookie.com. IN A ;; ANSWER SECTION: ftp.rookie.com. 600 IN CNAME WWW.rookie.com. WWW.rookie.com. 600 IN A 172.16.252.125 ;; AUTHORITY SECTION: rookie.com. 600 IN NS dns1.rookie.com. rookie.com. 600 IN NS dns2.rookie.com. ;; ADDITIONAL SECTION: dns1.rookie.com. 600 IN A 172.16.250.149 dns2.rookie.com. 600 IN A 172.16.252.245 ;; Query time: 0 msec ;; SERVER: 172.16.250.149#53(172.16.250.149) ;; WHEN: Thu Jun 01 03:46:11 EDT 2017 ;; MSG SIZE rcvd: 147
On Master
(1) 确保区域数据文件中为每个从服务配置 NS 记录,并且在正向区域文件需要每个从服务器的 NS 记录的主机名配置一个 A 记录,且此 A 后面的地址为真正的从服务器的 IP 地
注意:时间要同步
ntpdate 命令
子域授权:
正向解析区域授权子域的方法:
ops.rookie.com. IN NS ns1.ops.rookie.com. ops.rookie.com. IN NS ns2.ops.rookie.com. ns1.ops.rookie.com. IN A IP.AD.DR.ESS ns2.ops.rookie.com. IN A IP.AD.DR.ESS
定义转发:
注意:被转发的服务器必须允许为当前服务做递归;
(1) 区域转发:仅转发对某特定区域的解析请求;
zone “ZONE_NAME” IN {type forward; forward {first|only}; forwarders {SERVER_IP;}; };
first:首先转发;转发器不响应时,自行去迭代查询;
only:只转发
(2) 全局转发:针对凡本地没有通过 zone 定义的区域查询请求,通通转给某转发器;
options {… … forward {only|first}; forwarders {SERVER_IP;}; .. … };
转发服务器
注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
first:首先转发;转发器不响应时,自行去迭代查询
only:只转发
(1)全局转发: 对非本机所负责解析区域的请求,全 转发给指定的服务器 Options {fforward {only|first}; forwarders {SERVER_IP;}; };(2)特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高 zone “ZONE_NAME” IN {type forward; forward {first|only}; forwarders {SERVER_IP;}; }; 注意:关闭 dnssec 功能:dnssec-enable no; dnssec-validation no;
bind 中的安全相关的配置:
acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集合内的所有主机实现统一调用
格式:
acl acl_name {ip; net/prelen; ……}; 示例:acl mynet {172.16.0.0/16; 10.10.10.10;};
bind 有四个内置的 acl:
none: 没有一个主机
any: 任意主机
localhost: 本机
localnet: 本机的 IP 同掩码运算后得到的网络地址
注意:只能先定义,后使用,因此一般定在配置文件中,处于 options
访问控制的指令:
allow-query {}; 允许查询的主机;白名单
allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器
allow-recursion {}; 允许哪此主机向当前 DNS 服务器发起递归查询请求
allow-update {}; DDNS,允许动态更新区域数据库文件中内容
bind view:
view: 视图,一个 bind 服务器可定义多个 view,每个 view 中可定义一个或多个 zone
每个 view 用来匹配一组客户端
多个 view 内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
view VIEW_NAME {zone zone zone} view internal {match-clients { 172.16.0.0/8;}; zone “rookie.com” IN {type master; file “rookie.com/internal”;}; }; view external {match-clients { any;}; zone “rookie.com” IN {type master; file rookie.com/external”;}; };