DNS
DNS解析
-
DNS名称解析方式:
名称 –> IP:正向解析
IP –> 名称:反向解析
注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库; -
DNS查询类型:
递归查询:一般是客户机和服务器之间的查询;即只发送一个请求,其他的工作交由上层服务器去解决;
迭代查询:一般是服务器和服务器之间的凡是,即最起初的DNS服务器,由上而下依次从根发送请求,直到查找到目标主机;-
一次完整的查询请求经过的流程:
Client –> hosts文件 –> DNS Local Cache –> DNS Server (recursion) –>
自己负责解析的域:直接查询数据库并返回答案;
不是自己负责解析域:Server Cache –> iteration(迭代) -
解析答案:
-
肯定答案:当请求时正好有结果,然后回应,正向应答;
否定答案:不存在查询的主机,因此,不存在与其查询主机对应的值;
权威答案:由直接负责的DNS服务器返回的答案;
非权威答案:DNS服务器中的信息时之前缓存下来的;
-
肯定答案:当请求时正好有结果,然后回应,正向应答;
-
一次完整的查询请求经过的流程:
DNS服务器
-
负责解析至少一个域:
-
主名称服务器;
辅助名称服务器;
-
主名称服务器;
-
不负责解析:
- 缓存名称服务器;
-
主-辅DNS服务器:
-
主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
-
从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
-
“复制”操作的实施方式:
- 序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
- 刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
-
重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
重试时间间隔不能小于刷新时间间隔; -
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
过期时长一般设定比较长,方便管理员进行维修后使得从服务器找到主服务器,而不至于关闭DNS服务 - 否定答案的缓存时长:
-
主服务器”通知“从服务器随时更新数据;
-
区域传送:
-
全量传送:axfr, 传送整个数据库;
增量传送:ixfr, 仅传送变量的数据;
-
全量传送:axfr, 传送整个数据库;
-
-
资源记录
-
DNS数据库:解析过程中的域名的解析记录;
-
FQDN –> IP
正向解析库;正向区域 -
IP –> FQDN
反向解析库;反向区域
-
FQDN –> IP
-
区域(zone)和域(domain)
区域是物理概念;域是逻辑概念;- 每个域名所对应的解析记录称为zone(区域)
- FQDN:完整主机名,由主机名和域名构成;
-
资源记录:Resource Record, 简称RR;
记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX
语法: name [TTL] IN RR_TYPE value-
SOA:
- name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
-
value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)magedu.com. 86400 IN SOA magedu.com. admin.magedu.com. ( 2017010801 ;序列号 2H ;刷新时间 10M ; 重试时间 1W ; 过期时间 1D ) ; 否定答案的TTL值, 除第一个序列号外,其他四个的单位默认为秒,也可指定单位:D(天)、M(分钟)、H(小时)、W(周)。
-
NS:
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
注意:一个区域可以有多个ns记录;magedu.com. 86400 IN NS ns1.magedu.com. magedu.com. 86400 IN NS ns2.magedu.com.
-
MX:
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;magedu.com. IN MX 10 mx1.magedu.com. magedu.com. IN MX 20 mx2.magedu.com.
-
A:
name:某FQDN,例如www.magedu.com.
value:某IPv4地址;www.magedu.com. IN A 1.1.1.1 www.magedu.com. IN A 1.1.1.2 bbs.magedu.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:FQND4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
-
CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;web.magedu.com. IN CNAME www.magedu.com.
注意:
(1) TTL可以从全局继承;
(2) @表示当前区域的名称;
(3) 相邻的两条记录其name相同时,后面的可省略;
(4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录; -
SOA:
DNS协议的实现:
DNS协议 –> BIND, PowerDNS(轻量级)
-
bind程序环境:
主程序:/usr/sbin/named
Unit File:/usr/lib/systemd/system/named.service
配置文件:/etc/named.conf
区域解析库文件:/var/named -
关闭dnssec功能:
/etc/named.confdnssec-enable no; dnssec-validation no;
-
解析一个区域:
-
定义:/etc/named.rfc1912.conf
zone “ilinux.io" IN { type master; file "ZONE_FILE"; }
-
定义解析库文件:/var/named/ZONE_FILE
$TTL 600 ilinux.io. IN SOA ilinux.io. nsadmin.ilinux.io. ( 2017052301 1H 5M 1W 6H ) IN NS dns1.ilinux.io. IN NS dns2.ilinux.io. dns1.ilinux.io. IN A 172.16.0.67 dns2.ilinux.io. IN A 172.16.0.68 www.ilinux.io. IN A 172.16.0.1 web IN CNAME www
-
定义:/etc/named.rfc1912.conf
Bind
BIND: Berkeley Internet Name Domain
-
dns: 一个协议
bind: dns协议的一种实现
named:bind程序的运行的进程名
程序包:
-
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如dig, host, nslookup等;
bind:提供的dns server程序、以及几个常用的测试程序;
bind-chroot:选装,让named运行于jail模式下; -
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
-
CentOS 6: service named start
CentOS 7: systemctl start named.service
-
CentOS 6: service named start
bind:
-
主配置文件:/etc/named.conf
包含在内的其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key默认指向的DNS服务器:/etc/resolv.conf
-
解析库文件:
每一个域文件都放在/var/named/目录下;
一般名字为:ZONE_NAME.zone -
注意:
- 一台DNS服务器可同时为多个区域提供解析;
- 必须要有根区域解析库文件: named.ca;
-
还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
-
正向:named.localhost
反向:named.loopback
-
正向:named.localhost
-
rndc:remote name domain contoller
953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;
-
主配置文件格式:/etc/named.conf
-
全局配置段:
options { … }-
监听能与外部主机通信的地址;
listen-on port 53 { 172.16.100.67; }; //listen-on-v6 port 53 { ::1; };
-
学习时,建议关闭dnssec
dnssec-enable no; dnssec-validation no; dnssec-lookaside no;
-
关闭仅允许本地查询:
allow-query { any; }; 或 //allow-query { localhost; };
注意:每个配置语句必须以分号结尾;
-
监听能与外部主机通信的地址;
-
日志配置段:
logging { … } -
区域定义段:
zone { … }zone "ZONE_NAME" IN { type master|slave|hint|forward; file "ZONE_NAME.zone"; allow-update { none; }; }; type:该zone的类型,主要类型有:针对根的hint;主DNS的master;从DNS的slave和专门用于转发的域类型forward;除了根以外默认为master; file:该zone的文件名称; ZONE_NAME:表示要解析的域名;正解时就为域名的本身;反解时有固定的格式:IP 网段倒着写.ip-addr.arpa;
- 那些由本机负责解析的区域,或转发的区域;
-
检查配置文件语法错误:
~]# named-checkconf [检查:/etc/named.conf]
-
测试工具
dig, host, nslookup,rndc
安装dig、nslookup,yum install bind-utils –
-
dig命令:
dig [-t RR_TYPE] name [@SERVER] [query options]-
用于测试dns系统,因此其不会查询hosts文件;
-
查询选项:
+[no]trace:跟踪解析过程;
+[no]recurse:进行递归解析; -
反向解析测试
dig -x IP -
模拟完全区域传送:
dig -t axfr DOMAIN [@server]
-
-
host命令:
host [-t RR_TYPE] name SERVER_IP -
nslookup命令:
nslookup [-options] [name] [server]-
交互式模式:
nslookup> server IP:以指定的IP为DNS服务器进行查询; set q=RR_TYPE:要查询的资源记录类型; name:要查询的名称;
-
交互式模式:
-
rndc命令:named服务控制命令
-
rndc status
rndc flush
rndc reload:让服务器重载配置文件和区域数据文件 -
问题示例:
出现报错: ~]# rndc reload rndc: neither /etc/rndc.conf nor /etc/rndc.key was found 分析:可能是配置文件和软件的版本不匹配 解决:删除旧的配置文件,重新安装bind rm -rf /etc/named* rm -rf /var/naemd/*
-
配置解析一个正向区域:
以magedu.com域为例:
-
设置主配置文件(/etc/named.conf)中的全局定义;
-
定义区域
在主配置文件中(/etc/named.conf)或主配置文件辅助配置文件(/etc/named.rfc1912.conf)中实现;zone "ZONE_NAME" IN { type master|slave|hint|forward; file "ZONE_NAME.zone"; };
注意:区域名字即为域名;
-
建立区域数据文件(主要记录为A或AAAA记录)
在/var/named目录下建立区域数据文件;-
文件为:/var/named/magedu.com.zone
$TTL 3600 $ORIGIN magedu.com. @ IN SOA ns1.magedu.com. dnsadmin.magedu.com. ( 2017010801 1H 10M 3D 1D ) IN NS ns1 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 172.16.100.67 mx1 IN A 172.16.100.68 mx2 IN A 172.16.100.69 www IN A 172.16.100.67 web IN CNAME www bbs IN A 172.16.100.70 bbs IN A 172.16.100.71
-
权限及属组修改:
~]# chgrp named /var/named/magedu.com.zone ~]# chmod o= /var/named/magedu.com.zone
-
检查语法错误:
~]# named-checkzone ZONE_NAME ZONE_FILE ~]# named-checkconf
-
-
让服务器重载配置文件和区域数据文件
~]# rndc reload 或 ~]# systemctl reload named.service
配置解析一个反向区域
-
定义区域
在主配置文件(/etc/named.conf)或主配置文件辅助配置文件中(/etc/named.rfc1912.zones)实现;zone "ZONE_NAME" IN { type master|slave|hint|forward; file "ZONE_NAME.zone"; };
注意:反向区域的名字
反写的网段地址.in-addr.arpa ;如:100.16.172.in-addr.arpa 定义区域解析库文件(主要记录为PTR)
-
示例,区域名称为100.16.172.in-addr.arpa;
$TTL 3600 $ORIGIN 100.16.172.in-addr.arpa. @ IN SOA ns1.magedu.com. nsadmin.magedu.com. ( 2017010801 1H 10M 3D 12H ) IN NS ns1.magedu.com. 67 IN PTR ns1.magedu.com. 68 IN PTR mx1.magedu.com. 69 IN PTR mx2.magedu.com. 70 IN PTR bbs.magedu.com. 71 IN PTR bbs.magedu.com. 67 IN PTR www.magedu.com.
-
权限及属组修改:
~]# chgrp named /var/named/172.16.100.zone ~]# chmod o= /var/named/172.16.100.zone
-
检查语法错误:
~]# named-checkzone ZONE_NAME ZONE_FILE ~]# named-checkconf
-
示例,区域名称为100.16.172.in-addr.arpa;
-
让服务器重载配置文件和区域数据文件
~]# rndc reload 或 ~]# systemctl reload named.service
主从服务器:注意:从服务器是区域级别的概念;
配置一个从区域:
-
On Slave
-
定义区域
定义一个从区域; zone "ZONE_NAME" IN { type slave; file "slaves/ZONE_NAME.zone"; masters { MASTER_IP; }; };
-
配置文件语法检查:named-checkconf
-
重载配置
rndc reload systemctl reload named.service
-
-
On Master
-
确保区域数据文件(/var/named/ZONE_NAME.zone)中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;
注意:时间要同步;ntpdate命令;... IN NS ns1.linux.io. IN NS ns2.linux.io. ns1 IN A 192.168.209.134 master ns2 IN A 192.168.209.135 slave ...
-
确保区域数据文件(/var/named/ZONE_NAME.zone)中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;
-
测试
- 注意:使用从服务器进行解析;
- 当主服务器发生改变时,改变序列号比之前的大–> rndc reload –> tail /var/log/messages,消息显示从服务器到主服务器中更新数据;
子域授权
-
在父域服务器中的操作:
-
在父域服务器/var/named/ZONE_NAME.zone添加配置:
示例:在父域/var/named/iounix.com.zone 2017052702 ;修改为:2017052703 序列号增大 ops IN NS ns1.ops.iounix.com. ns1.ops IN A 192.168.209.138 正向解析区域授权子域的方法:xxx.ZONE_NAME IN NS ... ops.magedu.com. IN NS ns1.ops.magedu.com. ops.magedu.com. IN NS ns2.ops.magedu.com. ns1.ops.magedu.com. IN A IP.AD.DR.ESS ns2.ops.magedu.com. IN A IP.AD.DR.ESS ...
-
转发
-
定义转发:
注意:被转发的服务器必须允许为当前服务器做递归;-
区域转发:仅为需要转发的服务器,转发对某特定区域的解析请求;
需要转发的服务器中;如果是子域,可实现对父域中的zone解析; zone "ZONE_NAME" IN { type forward; forward first|only; forwarders { SERVER_IP; }; };
first:首先转发;转发器不响应时,自行去迭代查询;
only:只转发; -
全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;
在需要转发的服务器中设置 options { ... ... forward first|only; forwarders { SERVER_IP; }; .. ... };
-
bind中的安全相关的配置:
-
acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;实现仅对定义的网络进行控制;
acl acl_name { ip; net/prelen; }; 示例: acl mynet { 172.16.0.0/16; 127.0.0.0/8; };
-
bind有四个内置的acl
-
none:没有一个主机;
any:任意主机;
local:本机;
localnet:本机的IP所属的网络;
-
none:没有一个主机;
-
bind有四个内置的acl
-
访问控制指令:
-
allow-query { }; 允许查询的主机;白名单;
allow-transfer { }; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
allow-recursion { }; 允许哪此主机向当前DNS服务器发起递归查询请求;
allow-update { }; DDNS,允许动态更新区域数据库文件中内容;
-
allow-query { }; 允许查询的主机;白名单;
bind view:
-
视图:
view VIEW_NAME { zone zone zone };
view internal { match-clients { 172.16.0.0/8; }; zone "magedu.com" IN { type master; file "magedu.com/internal"; }; };
view external { match-clients { any; }; zone "magecdu.com" IN { type master; file magedu.com/external"; }; };
原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/77273