Linux自学笔记——DNS和bind应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux自学笔记——DNS和bind应用相关的知识,希望对你有一定的参考价值。




DNS(Domain Name System,域名系统),因特网上作为域名和ip地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的ip数串。通过主机名,最终得到该主机名对应的ip地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口53.
Sockets:
 C/S:
  Client:发起应用请求的程序;
  Server:响应请求(提供服务)的程序;
   LISTEN:socket
 传输层协议:TCP,UDP,SCTP
  TCP:Transmission Control Protocol
   面向连接的协议:双方通信之前需要事先建立虚连接;
  UDP:User Datagram Protocol
   无连接的协议:双方无须通信之前需要事先建立虚连接;
DNS:domain name service,应用层协议
 C/S:
  53/UDP,53/tcp
 www.baidu.com:FQDN(Full Qualified Domain Name)
 tld:Top Level  Domain
  组织域:.com, .net, .org , .gov , .edu, .mil
  国家域:.iq,  .tw, .hk
 DNS查询类型:
  递归查询;
  迭代查询;
 DNS名称解析方式:
  名称 --> IP:正向解析
  IP --> 名称:反向解析
  Note:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;
 DNS服务类型:
负责解析至少一个域:
   主名称服务器;
   辅助名称服务器;
  不负责解析;
   缓存名称服务器;
 一次完整的查询请求经过的流程:
  Client --> hosts文件 --> DNS Local Cache --> DNS Server (recursion递归) -->
   自己负责解析的域:直接查询数据库并返回答案;
   不是自己负责解析域:Server Cache --> iteration(迭代)
  解析答案:
   肯定答案:
   否定答案:不存在查询的键,因此,不存在与其查询键对应的值;


   权威答案:由直接负责的DNS服务器返回的答案;
   非权威答案:
 主-辅DNS服务器:
  主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
从DNS服务器;从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
  “复制”操作的实施方式:
   序列号:serial,也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
   刷新时间间隔:refresh,从服务器每多久到主服务器检查序列号的更新状况;
 重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据,停止提供服务;
否定答案的缓存时长:
   主服务器“通知”从服务器随时更新数据:
   
   区域传送:
    全量传送:axfr,传送整个数据库;
    增量传送:ixfr,仅传送变量的数据;
 区域(zone)和域(domain)
  magedu.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:当前区域的名字;例如“claude.com.”,或者“2.3.4.in-addr.arpa.”;
   value:有多部分组成
1) 当期区域的区域名称(也可以使用主DNS服务器名称);
2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
3) (主从服务协调属性的定义以及否定答案额TTL)
例如:
  claude.com.       86400     IN   SOA   magedu.com.     mail.claude.com.   (
       2017010801 ;serial 序列号
       2H   ;refresh时间刷新间隔
       10M  ;retry 重试时间间隔
       1W  ;expire 过期时长
       1D  ;negative answer ttl 否定答案的缓存时长
    )
  NS:域名服务记录
   name:当前区域的区域名称;
   value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
    注意:一个区域可以有多个ns记录;
   例如:
    claude.com.     86400   IN    NS    ns1.claude.com.
    claude.com      86400    IN    NS    ns2.claude.com.
  MX:
   name:当前区域的区域名称
   value:当前区域某邮件交换器的主机名;
    注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
   例如:
    www.claude.com IN A 1.1.1.1
    www.claude.com   IN A 1.1.1.2 
    bbs.claude.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:FQDN
   例如:
    4.3.2.1.in-addr.arpa.  IN PTR  www.claude.com 
  CNAME:
   name:FQDN格式的别名;
   value:FQDN格式的正式名字;
   例如:
    web.claude.com. IN CNAME www.claude.com
 注意:
1) TTL可以从全局继承;
2) @表示当前区域的名称;
3) 相邻两条记录其name相同时,后面的可省略;
4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;


DNS and Bind(2)
Bind的安装配置
BIND:Berkeley Internet Name Domain,ISC.org
 DNS:协议
 Bind:dns协议的一种实现
 named:bind程序的运行的进程名;
程序包:
 bind-libs:被bind和bind-utils波阿虎总的程序共同用到的库文件;
 bind-utils:bind客户端程序集,例如dig,host,nslookup等;
 
 bind:提供的dns server程序、以及几个常用的测试程序;
 bind-chroot:选装,让named运行于jail模式下;
 技术分享Bind:
 服务脚本:/etc/rc.d/init.d/named
 技术分享 

日志文件:/var/log/named.log
  检查主配置文件是否有语法错误:/usr/sbin/named-checkconf(named-checkconf命令)
 检查区域配置是否有语法错误:/usr/sbin/named-checkzone(named-checkzone命令)
 主配置文件:/etc/named.conf
 技术分享  

或包含进来其它文件:
  /etc/named.iscdlv.key
  技术分享

  /etc/named.rfc1912.zones
  技术分享

  /etc/named.root.key
  技术分享

解析库文件:
  /var/named/目录下:
   一般名字为:ZONE_NAME.zone
  技术分享


  注意 :
1)一台DNS服务器可同时为多个区域提供解析;
   2)必须要有根区域解析库文件:named.ca
   技术分享   

3)还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
    正向:named.localhost
    反向:named.loopback
   技术分享

 rndc:remote name domain controller
  953端口/tcp协议 ,但默认监听与127.0.0.1地址,因此仅允许本地使用;
 bind程序安装完成之后,默认即可做缓存名称服务器使用,如果没有专门负责解析的区域,直接即可启动服务;
 技术分享 
 主配置文件格式:
  全局配置段:
   options { … }
  日志配置段:
   logging { … }
  区域配置段:
   zone { … }
    那些由本机负责解析的区域,或转发的区域
   注意:每个配置语句必须以分号结尾;
  技术分享

缓存名称服务器的配置:
缓存名称服务器通常架设在公司的局域网内,主要目的提高域名解析速度,减少对互联网访问出口的流量
1.配置文件修改主要为以下部分
 1)监听能与外部主机通信的地址;
  listen-on port 53;
  listen-on port 53 {192.168.19.128;127.0.0.1;};
 2)学习测试时,建议关闭dnssec
  dnssec-enable no;
  dnssec-validation no;
  dnssec-lookaside no;
 3)关闭仅允许本地查询;
  //allow-query  { localhost; };
 具体修改配置如下:
 技术分享

2.检查配置文件语法错误:无信息输出则没有语法错误(但不代表无逻辑错误)
 named-checkconf    [/etc/named.conf]
 技术分享

3.启动named服务,启动之后看tcp,udp53端口是否处于监听状态,处于监听则启动成功
技术分享

4.验证缓存域名服务器;
技术分享

测试工具:
 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 [option]  [name] [server]
  交互式模式:
   nslookup>
    server   IP:以指定的ip为DNS服务器进行查询;
    set  q=RR_TYPE:要查询的资源记录类型;
    name:要查询的名称;
  技术分享

 rndc命令:named服务控制命令
  rndc status
  rndc flush
  rndc reload


配置解析一个正向区域:
 以claude666.com为例;
1) 定义区域
在主配置文件中或主配置文件辅助配置文件中实现:
 zone “ZONE_NAME”IN {
  type {master|slave|hint|forward};
  file “zone_NAME.zone”;
 };
 注意:区域名字即为域名;
技术分享

2) 建立区域数据文件(主要记录为A或AAAA记录)
在/var/named目录下建立区域数据文件;
 文件为:/var/named/claude666.com.zone
技术分享

之后修改正向解析库文件属组权限修改;
技术分享

检查语法错误;
技术分享

3) 让服务器重载配置文件和区域数据文件
技术分享

4) 使用客户端解析验证;

技术分享



配置解析一个反向区域:
1) 定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
 zone “ZONE_NAME”IN {
  type  {master|slave|hint|forward};
  file“ZONE_NAME.zone”;
 };


 注意:反向区域的名字
  反写的网段地址.in-addr.arpa
编辑/etc/named.rfc1912.zones文件,添加内容如下;
技术分享

2) 定义区域解析库文件(主要记录为PTR)
技术分享

权限及属组修改;
技术分享

检查语法错误;
技术分享

3) 让服务器重载配置文件和区域数据文件,并验证;技术分享


主从服务器:
 注意:从服务器是区域级别的概念;
配置一个从区域:
以上已配置好主服务器:192.168.19.128
另准备一台主机作从服务器 :192.168.19.134
首先 是从区域配置成一个缓存dns服务器 ,在主配置文件中修改配置;
 技术分享

1) 修改主服务器区域库文件,使库文件中有指向从服务器的ip地址
技术分享

2) 定义区域
定义一个从区域;
 zone “ZONE_NAME”IN {
  type  slave;
  file “slaves/ZONE_NAME.zone”;
  masters { MASTER_IP; };
 };
定义从区域的正向和反向区域;
技术分享

3) 检查语法错误并重载配置文件和区域数据文件
技术分享

可以发现,本来/var/named/slaves目录下没有文件,重载之后,从服务器同步了主服务器的文件,并且进行归类和注释;
技术分享

我们查看/var/log/messages文件可以查看同步的日志记录;
技术分享

Note:从服务器应该为一台独立的服务器;
on master,确保区域数据文件中每个从服务器NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此后面的地址为真正的从服务器的IP地址;
从服务器只需要定义区域,而无需提供解析库文件;
主服务器得允许从服务器作区域传送;
时间必须同步,可通过ntp进行;
Bind程序的版本应该保持一致;否则,应该从高,主低。
主名称服务器数据库修改完之后一定要使相应的序列号加1,这样从服务器才可以检测到并及时更新,并且重载。


以上是关于Linux自学笔记——DNS和bind应用的主要内容,如果未能解决你的问题,请参考以下文章

Linux自学笔记——nginx应用进阶

Linux自学笔记——httpd基本应用

Linux自学笔记——grub应用

Linux自学笔记——Linux网络基础命令及属性配置

Linux自学笔记——haproxy

Linux自学笔记——tcp wrapper