基础概念
程序大都都是有客户端和服务端组成,客户端(Client):用于发起应用请求;服务端(Server):接收并响应请求提供服务。Client是主动请求方,如何实现Server能够及时识别并处理Clinet的某种请求呢?这就引入了端口和监听的概念。
端口(PORT): 可以认为是服务的一种认证,1-1023端口号都被一些通用的应用程序所占用,例如Client请求:80端口,服务端就知道Client请求http服务,同时给予响应。( DNS基于UDP/53号端口和TCP/53号端口,TCP用于区域传送,UDP用于解析)
监听(LISTEN):Server端一直盯着某一个端口号,如果有人请求此端口的请求,Server端就会马上进行处理(首先会放到其接收缓存中,排队等待处理)。
有了端口和监听机制是不是就万事俱备了?不是,想过没有,Server如何才能知道谁访问了我的这个端口,Server端要给谁响应请求呢?在网络中能标识主机的就是IP了,所以在通信过程中为了能标识唯一通信的就是Socket了,Socket就是由IP:port组成的。也有另外一种情况,有些程序会跳过传输层直接调用网络层的IP实现传输,我们称之为“裸套接字”通信。
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,更够是你快速的访问互联网,而不用去记住他的IP地址。
主机到IP地址的映射有两种方式:
静态映射:在每个主机上都有一个hosts文件(文件格式为 IP 主机名1 主机名2 ... 别名),个主机维护自己的映射表,提供本机地址解析使用 。
动态映射:建立一套域名解析系统,只在专门的DNS服务器上配置主机到IP地址映射,在网络上使用主机名通信的设备,均先到DNS服务器查询主机所对应额IP地址。用于应用DNS过程如下图:
客户端域名解析过程:
1、客户端首先使用getipbyhostname() 和 gethostnamebyip() 库调用本地hosts文件;
2、若本地hosts文件不存在则首先查找本地缓存(本地缓存是一种域名解析提速的机制,用于每次从DNS解析出的信息,都在本地缓存中保留一份。缓存不能永久有效,都有生命周期,这个生命周期是服务器端给本地缓存的一个限制时间);
3、如果本地缓存查询不到,客户端就会到DNS服务器中查询,将查询的结果缓存在本地。
DNS解析是互联网上绝大多数应用的实际寻址方式,域名私互联网上的身份标识,如果没有DNS那连百度,淘宝咱们都不能直接访问了,除非你知道每个域名对应的IP地址。DNS有国际组织IANA统一管理,每一个域名都是向其申请的。DNS的管理是使用一种倒置的树结构:
用此图谈论一下DNS工作过程。以查找www.baidu.com的过程为例:
st1要在网络中查找www.baidu.com,首先向其指定的上级DNS服务器查找,即向.mage查找。.mage首先查找本地文件及缓存,若有此记录就会直接反馈给st1;没有找到,.mage就直接去向根查找;
因为根并不直接是baidu域的管理者,但却知道归.com管理。所以会反馈给.mage,令其去向.com查找;
.mage向.com.查找时,.com.反馈令其查找.baidu;
.mage去找.向baidu.com.,baidu.com.发现www是属于自己管理的域,从本地解析库中查找到www.baidu.com.并将其解析内容反馈给.mage;
.mage得到解析结果后,首先将查询的信息放到自己的本地缓存,并将查询结果反馈给st1。
综上所述:查找的顺序依次为 . (根)-->.com.-->.baidu.com.-->www.baidu.com。
DNS中查询的方法有两种:
迭代查询:st1向.mage查询,仅查询一次;
递归查询:.mage为了给st1办事儿,找根、找.com、找.baidu 这种查询方法就是迭代查询。
DNS有两种解析类型:
FQDN-->IP 正向解析,结构为名称树如上图;
IP--FQDN 反向解析,结构为IP树,如下图所示。
DNS解析答案有以下几种:
权威答案:在上述查询www.baidu.com过程中,.baidu给定的答案
非权威答案:在上述查询www.baidu.com过程中,.mage第一次在本地缓存给定的答案
肯定答案:存在查询的键,直接返回。
否定答案:不存在查询的键,也就不存在与其查询键对应的值 。否定答案也有缓存,可以指定统一的缓存时间。
DNS服务器类型及资源记录类型
DNS服务器常见类型:
主DNS服务器(master):维护所负责解析的域解析数据库服务器,读写操作均可执行;
从DNS服务器(slave):从主DNS服务器或其他的从DNS服务器复制一份解析库;但只能进行读操作,不能修改;
主从结构五种属性信息:
serial number版本号 : 主DNS版本号更换 :作用:当辅助DNS到主DNS复制文件的时候,如果serial号码增加就复制。
refresh:检查时间周期,定义每隔多长时间查询主DNS。
retry: 重试时间<refresh time
expire: 过期时间 超过重试时间便删除辅助DNS自己的记录
nagative answer TTL:否定答案的缓存时间,需要定义到主从服务器配置中
缓存DNS服务器 (hint):用于缓存DNS解析信息
转发器 (forward): 客户端不能访问互联网时,可以通过其转发出去
主从同步方式分为:
区域传送;
全量传送:axfr,传送整个数据库
增量传送:ixfr,仅传送变化的数据
DNS资源记录的格式:
NAME(域名) TTL(生命周期值可省) IN (关键字) RRT(资源记录类型) VALUE
例:www.magedu.com 3600(单位是s) IN A 192.168.10.10
DNS资源记录类型:标识该记录主要在当前DNS服务器内扮演什么样的角色
SOA(Start Of Authority):起始授权记录,标识区域内部主从服务器间如何同步数据,及起始授权对象是谁的记录。必须放在第一行,一个区域解析苦衷有且只有一个SOA记录。
格式:
ZONENAME TTL IN SOA 起始授权主机(一般是主DNS服务器) ADMINISTRATOR_MAILBOX (
serial number <=10p
refresh
retry
expire
na ttl)
注:
1、 时间单位:M(分钟)、H、D、W 默认是秒钟
2、邮箱格式:admin@magedu.com @通配符,区域名称,要写成 admin.magedu.com
3、在整个配置文件变更时,serial number一定要加一,否则从DNS服务器无法与主服务器同步数据
NS(Name Server):域名服务记录,Zone Name --> FQDN ,一个区域解析库中可以有多个NS记录,其中一个为主DNS。
格式:
ZONE NAME TTL IN NS FQDN 例: magedu.com. 86400 IN NS ns1.magedu.com.
A (Address):域名服务记录,FQDN-->IPv4。
格式:
FQDN TTL IN A IPv4 例: www.magedu.com. 600 IN A 192.168.0.1
注:同一个FQDN可以对应多个IP,可实现负载均衡。
AAAA:128位 FQDN-->IPv6
MX(Mail eXchange):邮件交换器,接收域内的邮件,可有有多个。MX有优先级特性,范围在0-99,数字越小优先级越高。
格式:
ZONE NAME TTL IN MX PRI VALUE 例:magedu.com. 600 IN MX 10 mail.magedu.com.
PTR(pointer):IP-->FQDN,包括正向区域文件和反向区域文件
格式:
向区域文件:
IP IN PTR FQDN 例:192.168.0.1 IN PTR www.magedu.com.
反向区域文件:
倒写IP.in-addr.arpa. IN PTR FQDN 例: 1.0.168.192.in-addr.arpa. IN PTR www.magedu.com.
注:
1、正向区域文件中FQDN不可以简写;
2、反向区域文件中FQDN可以简写。
CNAME (Canonical Name):别名记录 ,FQDN(别名)-->FQDN(真名)
格式:
FQDN(别名) TTL IN CNAME FQDN(真名) 例:www 600 IN CNAME www.magedu.com.
注:针对于区域文件有如***意事项
1、TTL可以全局继承:在文件头用$TTL定义每条记录中的TT,例:$TTL 3600,每条记录TTL可省略
2、FQDN公共部分可全局继承:在文件前用$ORIGIN定义,例:$ORIGIN magedu.com.
3、@标识当前区域的名称
4、对正向区域来说,MX、NS等类型的记录的VALUE为一个FQDN,此FQDN应该有一个A记录。
BIND的安装与配置
BIND(Berkeley Internet Name Domain,ISC.org (dhcp、bind),bind是DNS协议实现的一种方式,其主程序名叫named。
1、bind程序包:
bind-libs:被bind和bind-units中的程序共同依赖的库文件。
bind-utils:bind客户端程序集,包括:dig,host,nslookup等;
bind:提供的DNS server程序,以及几个常用的测试程序;
2、BIND相关目录
[root@localhost ~]# rpm -ql bind /usr/sbin/named /etc/logrotate.d/named /etc/named /etc/named.conf #主配置文件,可包含进其他文件:/etc/named.iscdlv.key, #/etc/named.rfs1912.zones,/etc/named/root.key /etc/named.iscdlv.key /etc/named.rfc1912.zones /etc/named.root.key /etc/portreserve/named /etc/rc.d/init.d/named /usr/sbin/named-checkconf #检查配置文件有无语法错误 /usr/sbin/named-checkzone #检查区域数据库文件有无语法错误 /var/named #定义区域解析库存放的目录,named进程的工作目录。一般以zone_name.zone命名。
注:1、一台DNS服务器可同时为多个区域提供解析;
2、必须要有根区域文件;根区域文件主要作用是告诉DNS服务器根的位置,文件名为named.ca
3、还有可能有两个域解析文件:localhost和127.0.0.1的正反向解析,正反向解析个需要一个库
a、正向:/var/named/named.localhost
b、反向:/var/named/named.loopback
BIND的辅助工具rndc:remote name domain contoller,名称服务器远程控制工具。默认使用TCP/953端口,默认监听于172.0.0.1地址,因此仅允许本地使用。
BIND程序安装完成后,默认即可做缓存名称服务器使用,但前提是本地电脑必须能够联网;如果没有专门负责解析的区域,可直接启动服务使用。
BIND的主配置文件格式:
全局配置段:
options { listen-on port 53 { 127.0.0.1; }; #默认监听在127.0.0.1上,删掉此IP地址为监听所有地址,{}必须保留。 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; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; };
2. 日志配置段:
logging { channel default_debug { file "data/named.run"; severity dynamic; }; };
3. 区域配置段:定义由本级负责解析的区域或转发的区域。
zone "." IN { type hint; file "named.ca"; };
注意:
a.每个配置语句必须以分号结尾;
b.{}与其中的参数都必须有空格;
c.//和/*表示单行注释.
缓存名称服务器的配置:
监听能与外部主机通信的地址,
BIND测试工具:
dig命令:
dig [-t RRT] name [@SERVER] [QUERY OPTIONS]
用于测试dns系统,因此其不会查询hosts文件
参数说明:
name:
@SERVER:使用哪个主机解析,如果指定主机,/etc/resolv.conf中的设置就失去意义
查询选项:
+[no]trace 是否踪解析过程
+[no]recurse :是否进行递归解析
-x :反向解析解析测试
dig –x IP
host命令:
host [-t RRT] name SERVER-IP
SERVER-IP:指定服务器进行测试, 相当于dig中的@SERVER
nslookup 命令:
nslookup [-options] [name] [server]
交互模式:
nslookup>
server IP :以指定的IP为DNS服务器进行查询
set q=RRT 查询资源记录类型
name:查询的名称
BIND服务控制命令:
rndc 命令:
status:named服务状态信息
stop:停止服务,此项可以讲DNS服务停掉
flush:清楚缓存
reload [zone] : 重载配置文件
如何配置正向解析区域步骤:
定义区域:一般不使用主配置文件(/etc/named.conf),而是使用/etc/named.rfc1912.zones定义。
语法格式:
zone “ZONE_NAME” IN { type{master|slabve|hint|forward}; file“ZONE_NAME.zone”; #ZONE_NAME.zone放到/var/named下,可使用相对路径;否则需要使用绝对目录。 };
例:
vim /etc/named.rfc1912.zones zone "centos.com" IN { type master; file "centos.com.zone"; #centos.com.zone 为在/var/named/目录下创建的文件名 # allow-transfer { none; };
3. 建立区域数据文件(即ZONE_NAME.zone,主要记录A或AAAA记录)
vim /var/named/centos.com.zone $TTL 1H $ORIGIN cento.com. @ IN SOA ns1 admin ( 2016011009 1H 10M 3D 1W ) IN NS ns1 ns1 IN A 172.16.44.71
需要更改该文件的属组为named,权限为640:
#chgrp named /var/named/magedu.com.zone #chmod o= /var/named/magedu.com.zone
3.检查配置文件语法错误
~]#named-checkconf 或 ~]# named-checkconf /etc/named.conf #检查配置文件语法 ~]#named-checkzone ZONE_NAME ZONE_FILE # 检查区域文件语法
4.重载配置文件:每次新建或修改都需要重载配置文件令其生效。
~]#rndc reload 或 ~]#systemctl reload named.service
5.解析测试
[root@centos7-01 named]# dig -t A ns1.centos.com @172.16.44.71 ; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A ns1.centos.com @172.16.44.71 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31357 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ns1.magedu.com. IN A ;; ANSWER SECTION: ns1.centos.com. 3600 IN A 172.16.44.71 ;; AUTHORITY SECTION: centos.com. 3600 IN NS ns1.centos.com. centos.com. 3600 IN NS ns2.centos.com. ……
如何配置反向解析区域:
建立反向解析区域与建立正向解析区域步骤相同,不同之处如下:
1.反向区域名称为网段地址反写+.in-addr.arpa,例如:44.16.172.in-addr.arpa
2.正反向区域文件相互间独立。
~]# vim 44.16.172.zone 区域文件 $TTL 1D $ORIGIN 44.16.172.in-addr.arpa. @ IN SOA ns1.centos.com. nsadmin.centos.com. ( 2016011006 1H 10M 1D 3D ) IN NS ns1.centos.com. 71 IN PTR ns1.centos.com. ~]# vim /etc/named.rfc1912.zones #反向解析配置文件 zone "44.16.172.in-addr.arpa" IN { type master; file "44.16.172.zone";
原文:http://4403357.blog.51cto.com/4393357/1733573