天天看点

DNS服务

DNS服务器的功能:将域名解析为IP地址(正向解析)或者将IP地址解析为域名(反向解析)

/etc/hosts (域名解析缓存文件)

分布式层次型

主机名+域名

DNS的解析过程(以解析www.baidu.com.cn为例)

1.查看本地缓存

2.默认查询本地/etc/hosts文件进行解析(具体先使用hosts文件或DNS由/etc/nsswitch.conf文件决定)

3.由本地域名服务器(/etc/resolv.conf)查询根域名服务器(进行迭代解析)和下级服务器

4.本地域名服务器得到结果后会进行缓存,然后再将结果告诉客户端

查询www.baidu.com.cn

递归查询:客户机-->本地域名服务器(查询没有结果,接着下面的步骤)

迭代解析:本地域名服务器-->根域名服务器(dig @a.root-servers.net . ns)(得到cn服务器的IP地址)

    本地域名服务器-->cn服务器(得到com.cn服务器的IP地址)

    本地域名服务器-->com.cn服务器(得到baidu.com.cn的IP地址)

    本地域名服务器-->baidu.com.cn服务器(得到最终域名服务器,解析相应的主机名)

DNS服务器的类型

    主域名服务器(省级代理)

        负责一个或一个以上原始区域的域名解析,有自己的区域数据文件,是一个权威服务器

    从域名服务器(市级代理)

        区域数据文件是从主域名服务器复制过来的,从域名服务器不是一个权威服务器

    缓存域名服务器(个人代理)

        纯粹的没有区域数据文件(本身不能响应任何DNS请求,所有记录全部向其它服务器查询)

DNS的记录类型

SOA:起始授权机构,至少是一个区域的权威服务器(主域名服务器),记录的是权威服务器的IP地址

NS:名称服务器,能解析特定域名的主机都是名称服务器(主域名服务器和从域名服务器)

A:正向记录,用于将域名解析为IP地址

PTR:反向记录,用于将IP地址解析为域名(邮件服务器)

MX:邮件交换记录,用于设置某个区域的邮件服务器地址

CNAME:别名记录,将服务器名另外设置一个名称

HINFO:硬件信息记录,并不向客户端发送回应

TXT:域名服务器版本记录,可以更改域名服务器的版本

DNS的客户端工具(10.0.100.251为DNS服务器IP)

host

    host www.sjjy.com 10.0.100.251

    host -t mx sjjy.com 10.0.100.251(针对没有定义具体IP的记录)

    host -t ns sjjy.com 10.0.100.251

    host 10.0.100.100 10.0.100.251

dig

    dig @10.0.100.251 blogs.sjjy.com

    dig @10.0.100.251 -t mx sjjy.com

nslookup

    nslookup www.sjjy.com 10.0.100.251

    nslookup

        server 10.0.100.251

        set type=mx

        sjjy.com

部署DNS服务器步骤

1.安装DNS服务器软件

    yum install bind*

2.在主配置文件里面定义相关的区域及信息

    vim /etc/named.conf(注意是以“//”作为注释,不是“*”)

    options {

    listen-on port 53 { 127.0.0.1; }; --- 监听端口和IP地址

    listen-on-v6 port 53 {};--- IPV6格式

    directory    "/var/named"; --- 区域数据文件

    dump-file    ""; --- 缓存文件

    statistics-file ""; ---

    memstatistics-file ""; ---

    allow-query    { localhost; }; --- 只允许本地查询,可以添加网段

    recursion yes; --- 允许递归查询

    dnssec-enable yes; --- DNS加密

    dnssec

    bindkeys-file

    managed-keys-directory

};

logging { ----  日志通道(默认/var/log/messages)

    channel default_debug {

        file "";    

    }

zone "." IN(internet) {

    type hint; --- 类型为缓存域名服务器(masetr(主域名服务器)|slave(从域名服务器))

    file "name.ca"; --- 存在于上面配置的directory目录下面,记录根域名服务器的地址

zone "sjjy.com" IN { --- 定义正向解析

    type master; --- 定义为主域名服务器

    file "sjjy.com.zone"; --- 定义具体的区域文件

zone "0.10.in-addr.arpa" IN { --- 定义反向解析

    type master; --- 同上面定义的正向解析

    file "10.0.rev"; --- 定义具体的区域文件

//当/etc/hosts文件删除,才会调用下面两个文件

include "/etc/named.rfc1912.zones";

include "/etc/named.root.key";

编辑具体的区域文件

vim /var/named/sjjy.com.zone

$TTL 1D --- 缓存生存时间:1天

$ORIGIN    sjjy.com. --- 显示的声明区域名

@(代表具体的区域名称(sjjy.com.zone))    IN    SOA(权威服务器记录)    dns.sjjy.com. admin.sjjy.com.(管理员的邮件地址,“admin.”表示为“admin@”) (

    0    ; serial(序列号,用于主从域名服务器之间,为了识别何时进行更新,常用时间表示)

    1D    ;refresh(刷新时间,从域名服务器刷新的频率)

    1H    ;retry(间隔时间,当连接失败后,重连的间隔)

    1W(1个星期)    ;expire(清除时间)

    3H(3个小时)    ;minimum

)

    IN    NS    dns.sjjy.com. --- 定义名称服务器,多个换行写

    IN    NS    5(优先级,小的高,1-255)    dns2.sjjy.com.

    IN    MX    mail.sjjy.com.

dns    IN    A    10.0.100.251 --- 具体的主机对应的IP地址

dns    IN    A    10.0.100.250

mail    IN    A    10.0.100.100

www    IN    A    10.0.100.101

ftp    IN    A    10.0.100.102

blogs    IN    A    10.0.100.103

bk    IN    CNAME    blogs

vim /var/named/10.0.rev(可以不用写别名)

$ORIGIN    0.10.in-addr.arpa. --- 显示的声明区域名

    1W(1个星期)    ;expire(清除时间,更新失败后,多长时间后清除对应的缓存)

    3H(3个小时)    ;minimum(缓存服务器不能与主服务联系上后多长时间清除相应的记录)

    IN    NS    dns.sjjy.com.

251.100    IN    PTR    dns.sjjy.com.

100.100    IN    PTR    mail.sjjy.com.

101.100    IN    PTR    www.sjjy.com.

102.100    IN    PTR    ftp.sjjy.com.

103.100    IN    PTR    blogs.sjjy.com.

检查主配置文件和区域文件的语法是否有错

named-checkconf /etc/named.conf    --- 检查主配置文件语法

named-checkzone sjjy.com /var/named/sjjy.com.zone --- 检查正向区域配置文件语法

named-checkzone 0.10.in-addr.arpa /var/named/10.0.rev --- 检查反向区域配置文件语法

启动域名服务器

service named start

service named reload --- 不中断重启(在不对主配置文件进行操作的情况下)

更改正向区域文件和反向区域文件的属主和属组(因为运行named服务时是以named用户执行的)

chown named:named /var/named/sjjy.com.zone

chown named:named /var/named/10.0.rev

根域名服务器的更新:dig @a.root-servers.net . ns > /var/named/named.ca

练习:使用自己姓名的拼音作为域名搭建域名服务器,域名服务器要求有正反向区域,要求有soa、ns、mx、a、ptr、cname记录的定义,部署完成后要能够正常的提供相关域名的解析服务。

错误排除步骤

1.检查配置文件语法是否正确

    named-checkconf /etc/named.conf

    named-checkzone zlj.com zlj.com.zone

    named-checkzone 0.10.in-addr.arpa 10.0.rev

2.检查53号端口是否处于监听状态,监听什么地址

    lsof -i:53

    netstat -antpul | grep named

3.查看域名服务器配置是否正确

    vim /etc/resolv.conf

4.查看日志文件

    vim /var/log/messages

5.查看SELinux是否关闭

    getenforce

    setenforce 0

错误集:

dns_rdata_fromtext: zlj.com.zone:10: near 'mail.zlj.com.': not a valid number

解决办法:邮件服务器必须设置优先级

10.0.10.rev:3: SOA record not at top of zone (10.0.10.in-addr.arpa.10.0.10.in-addr.arpa)

解决办法:注意区域名后面需要带上".

从域名服务器(里面的数据是非权威数据,给主域名服务器提供容错功能和辅助解析,当主域名服务器宕机时,就会接管服务,在生存时间内有效)

vim /etc/named.conf

options {

zone "." IN {

zone "sjjy.com" IN {

    type slave;

    file "slaves/sjjy.com.zone";

    master { 10.0.100.251; };

zone "0.10.in-addr.arpa" IN {

    file "slaves/10.0.100.rev"

    masters { 10.0.100.251; };

编辑主域名服务器的正向和反向区域文件,添加从域名服务器,并且加大serial

添加    从域名服务器

    IN    NS    dns1.sjjy.com.

dns1    IN    A    10.0.100.10

vim /var/named/10.0.0.rev

10    IN    PTR    dns1.sjjy.com.

增加安全性,指定只有这个IP才能进行传输

添加    allow-transfer { 10.0.100.252; };

DNS的其他相关配置

1.转发设置

options { --- 全局定义,全部转发

    forward first|only;    first:表示先进行转发;only:表示先只选用转发

2.acl访问控制列表(对allow-query生效)

acl mynet(列表名,自定义) { --- 不放在options里面

    10.0.0.0/16;

    192.168.10.10;

    172.16.0.0/24

特殊字符串

any    匹配任意主机

none    不匹配任何主机

localhost    匹配本机上的任何ipv4网络接口

localnets    匹配本机上的任何ipv4的本地网络

3.also-notify主动通知从域名服务器进行更新(当主域名服务器有更改时,但只是进行了service named reload,就需要它)

    also-notify { 10.0.5.151; };

从域名服务器上进行配置允许

    allow-notify { 主域名服务器IP; };

4.黑名单配置(写进options里面)

blackhole {

    10.0.10.100;

    102.10.10.0/24;

------------------------------------------------------

DNS智能解析

1.视图的基本配置语法

    view 视图名 {

        match-clients { 客户端地址列表; };

        区域文件声明;    

    };

    示例:

    view "hunan" {

    match-clients { 172.16.0.0/16; }; --- 当ip地址很多时,使用acl,可以单独对acl生成一个文件,用include进行定义

    recursion yes;

    zone "sxjy.com" IN {

        type master;

        file "hn.sxjy.com.zone";

        allow-update { none; };

        allow-transfer { 172.16.20.223; };

        };

    zone "0.10.in-addr.arpa" IN {

        file "hn.10.0.100.rev";

    view "hubei" {

    match-clients { 172.20.0.0/16; }; --- 当ip地址很多时,使用acl,可以单独对acl生成一个文件,用include进行定义

        file "hb.sxjy.com.zone";

        file "hb.10.0.100.rev";

    编辑区域配置文件

    vim hn.sxjy.com.zone(下面的设置是zlj.com,如果要使用的话,要修改为hn.sxjy.com)

$TTL 1D

$ORIGIN zlj.com.

@    IN    SOA    dns.zlj.com. admin.zlj.com. (

                    2016082309; serial

                    1D    ; refresh

                    1H    ; retry

                    1W    ; expire

                    3H )    ; minimum

    IN    NS    dns.zlj.com.

    IN    NS    dns1.zlj.com.

    IN    MX    5    mail.zlj.com.

dns    IN    A    10.0.10.178

dns1    IN    A    10.0.10.186

mail    IN    A    10.0.10.178

www    IN    A    10.0.0.254

ftp    IN    A    10.0.10.178

tftp    IN    CNAME    ftp    

    相应的在编辑hb.sxjy.com.zone时,保持NS服务器的IP地址不变,其他的主机IP地址作相应的改变

mail    IN    A    10.0.100.178

www    IN    A    10.0.100.254

ftp    IN    A    10.0.100.178

** server can't find www.zlj.com:SERVFAIL

解决办法:将相应的区域配置文件的属主该为named

扩展

TSGI事务签名实现安全通信

首先,得要注释掉/etc/named.conf配置文件里面的dnssec,

第一步:在主服务器上生成密钥(每个视图都要生成一个密钥)

   # cd /etc

   # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST hunan

   # cat Kchangsha.+157+36507.private

   # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST hubei

第二步:在所有服务器的配置文件中加载密钥

   # vim /etc/named.conf

key "hunan" {

        algorithm hmac-md5;

        secret "9U4I7Ft1AGIm+d+MQ/rkaw==";

key "hubei" {

        secret "9+tJAJ1soJT0daCB5evExw==";

第三步:设置主服务器的named.conf配置文件,在具体视图中使用密钥访问

注意:需要添加的地方有:

    match-clients { key changsha(当前视图名称); };

    server 其他服务器IP地址 { keys { changsha; }; };

    zone {

        allow-transfer { key changsha; };    

第四步:设置从服务器的named.conf配置文件,在具体视图中使用密钥访问

注意:需要添加的地方跟第三步差不多,但是不需要在zone中添加,添加server时,注意,添加相互通信的就可以了

继续阅读