Linux上-DNS(bind)搭建2015091601

1、DNS的基础概念

2、DNS域名解析查询过程

3、DNS基本服务的实现

4、DNS主从同步的实现

5、DNS的高级视图功能

 

 

本机的相关信息:

[[email protected] ~]#uname –r   //查看当前系统的内核版本
2.6.32-504.el6.x86_64
[[email protected] ~]#cat /etc/redhat-release    //查看当前系统的发行版本
CentOS release6.6 (Final)
[[email protected] ~]# ip addr  | awk -F ‘[ /]+‘‘/inet\>/&&!/127.0.0.1/ {print $3}‘  
                     //当前主机的ip地址
172.16.113.14

1、DNS的基础概念

DNS,域名解析服务,全名(Domain Name Server),他的工作机制是完成互联网上的主机名到指定IP地址的转换。

早期的域名解析的实现是使用hosts文件实现的,在客户端的hosts文件(Windows该文件在C:\Windows\System32\drivers\etc下;Linux系统,该文件在/etc/hosts)中定义主机名与IP地址的对应关系,当主机在访问某台主机的时候,会自动查询hosts文件中定义的对应关系,将主机名自动转换成对应的IP地址进行访问。

2、DNS域名解析的过程详解:

客户端访问互联网上的某台主机(www.magedu.com)的流程大致如下:

首先,客户端查询本地是否有该主机名与ip地址的对应关系缓存,如果有就直接以此将主机名转换成ip地址进行访问;如果没有缓存,则会查询hosts文件;如果都没有的话,便会根据本机所设置的DNS服务器(Linux中在/etc/resolve.conf中定义的。一般为当地最近的一个节点的DNS服务器IP地址)查询本地DNS服务器。

本地DNS服务器也是首先需要查看缓存中是否有该条目,如果有的话,便直接返回主机名所对应的IP地址给客户端,客户端以此IP地址与www.magedu.com进行通信。

如果本地DNS上面没有缓存,本地DNS便会去查询根服务器,去询问根服务器是否有该主机名,根服务器接收到查询请求,便会告诉本地DNS服务器:“我不知道,我只知道.com在哪,你去问.com吧。”,接着本地DNS便会根据根服务器传递过来的.com服务器的地址,到.com服务器上去查询。.com服务器回答本地DNS服务器:“我不知道,我只知道magedu.com在哪,你去问magedu.com吧。” ;最后,本地DNS又向magedu.com发起查询请求,magedu.com发现www是本域中的一台主机,便将www主机所对应的ip地址返回给本地DNS服务器。

最终,本地dns服务器将ip地址记录缓存,反馈给客户端,客户端以此IP地址进行后续的通信,若后续再有其他客户端请求此主机名的主机名解析,本地DNS便可直接从缓存中读取相应的数据反馈给客户端。我们将上述的查询过程可分解为递归查询和迭代查询两种。所谓递归查询便是A向B发起查询请求,B将最终结果返回给A;迭代查询便是A向B发起查询请求,B返回给A的不是最终结果,而是其他的查询路径C,而后A再向C发起查询,由C返回给A最终的查询结果。因此上图中,客户端向本地DNS发起解析请求,本地DNS将最终结果返回给客户端的过程便是递归查询过程;本地DNS向根服务器发起解析,根服务器返回.com等,最终由magedu.com. 返回给本地DNS服务器最终结果的过程便是迭代查询的过程。

上述所描述客户端访问互联网一台主机的过程中所提到的”根服务器”,全球共13台,并且每台都有固定的IP地址,所以本地DNS可以知道其位置,并向其发起查询请求。

根据上述的描述,我们大体可以知道,DNS的解析过程是分层进行的,并且是从最顶层(根)开始,每一层都仅记录其直属下层的位置,因此,我们称其是个倒置的树状结构,并且查询只能是自上而下,下层不能查询上层:

上图中,根”.”被称为“顶级域”, com、 cn 、 us 等被称为“一级域”,baidu 、qq等被称为是“二级域名”,而  www 、mail 、blog 便是二级域内的主机名。

我们常见的www.magedu.com或者www.baidu.com若是按照标准写法需在其最后添加根域,例如”www.baidu.com.“,只不过通常我们都会把根域给省略掉,这种主机名+域名的组合被称为是 “FQDN”(Fully Qualified Domain Name).

需要在此提一下的就是,互联网上的DNS服务并不是随便拿来就用的,需要向一些服务提供商注册使用(付费),(代理商:万网, 新网;godaddy),若你的主机数量较小,则在服务提供商所提供的后台自行映射IP与主机名对应关系即可;若主机数量较大,需呀自行搭建DNS服务的话,那么需在服务提供商所提供的后台中对你自己所搭建的DNS服务器进行授权即可。

3、DNS的基础服务实现

相关术语:

区域数据文件:由多条资源记录(ResourceRecord, RR)所构成。

正向解析         :将主机名解析成IP地址

反向解析         :将IP地址解析成主机名

资源记录的类型及格式:

格式:name [TTL] INRR_type        value

注:

(1) TTL值可定义在区域数据文件的开头,全局继承

(2) name可以使用@代替来引用当前区域的名字(bind的配置文件中的zone名)

(3) 同一个name可定义多个不同的值,此时DNS会以轮询的方式进行解析,这也是早期负载均衡的实现模型。

(4) 多个name也可以定义同一个值

SOA记录:起始授权记录,每个区域数据文件的第一条

NS记录:用于标明本域的DNS服务器的位置,必须有一条与之对应的A记录

A记录:FQDN与IPv4地址的对应

AAAA记录:FQDN与IPv4地址的对应

MX记录:邮件交换记录,必须有一条与之对应的A记录

PTR记录:将IPv4地址解析成FQDN

CNAME:CanonicalName,别名记录,将一个主机名映射到另一个主机名

使用的软件:bind

使用端口(默认):

tcp53:用于主从间同步区域数据文件

udp53:用于客户端查询解析

==================================================================

安装bind,实现基本的dns服务:

bind的安装有两种方式,使用rpm包安装或是使用源码包编译安装。源码编译安装相对与rpm来讲,功能更加丰富一些,但是一般的dns应用使用rpm包安装足以应付,因此,接下来我就以rpm安装来完成以下实验----(a、基本dns服务;b、主从同步;c、子域授权)

a安装

[[email protected] ~]# yum install -y bind      //确保实现配置好了yum源
[[email protected] ~]# rpm -qa bind*              //查询安装到关于bind的所有包
bind-libs-9.8.2-0.30.rc1.el6.x86_64         //bind程序所依赖的库文件
bind-utils-9.8.2-0.30.rc1.el6.x86_64       //bind所提供的工具包(如dig等)
bind-9.8.2-0.30.rc1.el6.x86_64                 //bind主程序包

b配置

bind程序在linux系统上的服务脚本文件为/etc/init.d/named,其主配置文件为/etc/named.conf

配置文件主要分为3大块,每一项都用一对花括号”{}”括起来,并且每一行的末尾都需要跟上一个”;”

options---全局配置项,对全局生效

logging---日志的配置

zone------域的配置

zone的种类:

master:主服务器的区域

slave:从服务器的区域

forward:转发区域

hint:根区域

各区域的重要参数:

options {
         listen-onport 53 { IP; };    //定义监听的端口及IP地址,ip地址一般为外网地址
         listen-on-v6port 53 { IP; };       //IPv6的监听端口及IP
         directory         "/var/named";//定义工作目录
         allow-query     { IP; };  //定义允许从此服务器查询解析的主机地址或范围
         recursionyes;                              //是否开启递归查询功能
         allow-recursion{ IP; };               //允许递归的主机;
         forward    { only|first; };             //定义是否全局转发,若此项定义在zone中,则表示只对指定的区域转发
 };
zone "." IN {                        //双引号内的”.”表示根区域,若查询的解析在配置文件中没有定义相应的zone,则会向根服务器请求解析,IN为关键字,固定格式
         typehint;          //定义此zone的类型,hint为根区域
         file"named.ca";       //定义区域数据文件的位置,此处使用的是相对路径,相对于options中定义的directory
};       //区域结束标示
 
logging {
       channel default_debug {//定义日志级别
                file"data/named.run";    //定义日志文件路径及日志文件名
                severity dynamic;
       };
};

由此,我们自建一个bind的配置文件:

[[email protected] ~]# mv /etc/named.conf  /etc/named.conf.bak     //将原配置文件改名
[[email protected] ~]# vim  /etc/named.conf                //创建bind的配置文件并编辑
options {
       listen-on port 53 { 172.16.113.14; };
       directory      "/var/named"    ;
       allow-query     { any; };
       recursion       no;
};
 
logging {
       channel default_debug {
                file"data/named.log";
                severity dynamic;
       };
};
 
zone "." IN {
       type hint;
       file "named.ca";
};
 
zone "su.com" IN {                     //此处定义了一个su.com的域
       type master;
       file "su/su.com.zone";
};

编辑完成后。保存退出,并执行

[[email protected] ~]# named-checkconf  //检查bind的配置文件是否有误,若有错误,此命令执行后会返回错误信息

创建编辑区域数据文件-----

此处需要注意的是,区域数据文件中的所有域名书写都必须带上根”.”

区域数据中的SOA记录中几个参数:

1)序列号:用于表示此区域数据文件的的版本,老版本的bind从服务器是根据刷新时间周期探测主服务器区域数据文件的序列号与本地的序列号对比,若大于本地区域数据文件的序列号,则表明主服务器区域数据文件更新了,便会发送同步请求给主服务器;新版本的bind新增了更新通知机制,主服务器一旦更新区域数据文件,便会通知从服务器。

2)刷新时间:从服务器多久查询一次此数据文件是否更新

3)重试时间:若从服务器查询主服务器上区域数据文件是否更新时,访问不到主服务器,则在重试时间周期过去后再联系主服务器

4)过期时间: 若主服务器故障宕机,则从服务器在过期时间周期后,便也会“殉情”

5)否定答案的TTL值:如果客户端请求的解析不在本服务器上,则告知客户端一定时间内别再向本服务器查询了

[[email protected] ~]# vim/var/named/su/su.com.zone
$TTL 1d
@      IN      SOA     su.com.         admin.su.com.   (
//此处的admin.su.com为管理员邮箱,因为”@”对此文件有特殊意义,所以邮箱名使用.代替
       2015091601     ;序列号;不能超过10位
       2H                       ;刷新时间
       15M                   ;重试时间
       1W                      ;过期时间
       12H)                   ;否定答案的TTL值
 
       IN      NS      ns1.su.com.
ns1    IN      A       172.16.113.14
www    IN      A       172.16.113.51

编辑完成后,保存退出,执行

[[email protected] ~]# named-checkzone"su.com" /var/named/su/su.com.zone //检查区域数据文件
zone su.com/IN: loaded serial 2015091601
OK //若有问题,此处会提示错误信息
启动bind程序:———系统上的服务管理脚本名为named,进程也为named
[[email protected] ~]# /etc/init.d/named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                           [  OK  ]

c、启动成功,找一台可以与本机通信的主机测试一下:

通信正常;对www.su.com进行解析一下:

客户端寻找www.su.com,被解析成了区域数据文件中定义的地址;基本的dns服务已定义成功。

定义一个反向解析区域:

第一步:

在/etc/named.conf中添加如下配置:

zone "113.16.172.in-addr.arpa" IN{
       type master;
       file "su/113.16.172.in-addr-arpa.zone";
};

第二步:

在/var/named/su目录下创建对应的反向区域数据文件:

[[email protected] ~]# vim/var/named/su/113.16.172.in-addr-arpa.zone //此处的文件名必须和named.conf中的file后面文件名完全一致
$TTL 1D
@      IN      SOA     su.com.        admin.su.com.   (
       2015091601
       1D
       15m
       1W
       12H)
 
       IN      NS      ns1.su.com.
14     IN      PTR     ns1.su.com.
51     IN      PTR     www.su.com.

保存退出并检查:

[[email protected] ~]# named-checkzone"113.16.172.in-addr.arpa" /var/named/su/113.16.172.in-addr-arpa.zone
zone 113.16.172.in-addr.arpa/IN: loadedserial 2015091601
OK

第三步:

[[email protected] ~]# /etc/init.d/named reload   //重新加载配置文件
[[email protected] ~]# dig -x [email protected]  //使用dig命令查询测试,结果正常如下:
 
; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x [email protected]
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY,status: NOERROR, id: 56864
;; flags: qr aa rd; QUERY: 1, ANSWER: 1,AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but notavailable
 
;; QUESTION SECTION:
;51.113.16.172.in-addr.arpa.  IN     PTR
 
;; ANSWER SECTION:
51.113.16.172.in-addr.arpa. 86400 IN    PTR  www.su.com.
 
;; AUTHORITY SECTION:
113.16.172.in-addr.arpa. 86400      IN     NS    ns1.su.com.
 
;; ADDITIONAL SECTION:
ns1.su.com.              86400       IN     A       172.16.113.14
 
;; Query time: 0 msec
;; SERVER: 172.16.113.14#53(172.16.113.14)
;; WHEN: Tue Sep 15 14:16:54 2015
;; MSG SIZE rcvd: 102

==================================================

4、实现DNS的主从数据文件同步:

其实实现DNS的主从同步并不复杂,配置如下:

1)在主服务器上的配置文件的zone内,添加allow-transfer,指定从服务器:

         zone"su.com" IN {
       type master;
       file "su/su.com.zone";
       allow-transfer { 172.16.113.15; };
};
 
zone "113.16.172.in-addr.arpa" IN{
       type master;
       file "su/113.16.172.in-addr-arpa.zone";
       allow-transfer { 172.16.113.15; };
};

2)将区域数据文件的权限以及属主数组统一至directory下的其他目录和文件的权限及属主数组

[[email protected]]# chmod --reference=/var/named/slaves/ /var/named/su/
[[email protected]]# chmwon --reference=/var/named/slaves/ /var/named/su/
[[email protected]]# chown --reference=/var/named/slaves/ /var/named/su/
[[email protected]]# chown --reference=/var/named/named.ca /var/named/su/*
[[email protected] named]# chmod --reference=/var/named/named.ca/var/named/su/*

3)重新加载主服务器上的配置文件:

[[email protected]]# /etc/init.d/named reload
Reloading named:                                          [  OK  ]
4)在从服务器(IP:172.16.113.15)安装bind,注意版本最好匹配:
[[email protected] ~]# yum install -y bind
[[email protected]]# mv /etc/named.conf /etc/named.conf.bak //将现有的配置文件改名
[[email protected] yum.repos.d]# [email protected]:/etc/named.conf /etc/named.conf //远程copy主服务器的配置文件到从服务器
[[email protected] yum.repos.d]# vim /etc/named.conf //编辑配置文件
options {
        listen-on port 53 { 172.16.113.15; };//将监听的端口改为本机
        directory       "/var/named"    ;
        allow-query     { any; };
        recursion       no;
};
 
logging {
        channel default_debug {
                file"data/named.log";
                severity dynamic;
        };
};
 
zone"." IN {
        type hint;
        file "named.ca";
};
 
zone"su.com" IN {
        type slave;         //将区域类型改为slave
        file "slaves/su.com.zone"; //主从同步时,会将区域数据文件同步到slaves下,所以将路径改为slaves下
                    masters { 172.16.113.14; };     //指明主服务器的位置
};
 
zone"113.16.172.in-addr.arpa" IN {
        type slave;
        file"slaves/113.16.172.in-addr-arpa.zone"; //主从同步时,会将区域数据文件同步到slaves下,所以将路径改为slaves下
                    masters{ 172.16.113.14; };     //指定主服务器的位置
};
保存退出并验证配置文件是否有误:
[[email protected] yum.repos.d]# named-checkconf

5)启动从服务器的bind程序:

[[email protected] ~]# /etc/init.d/named start
[[email protected]~]# ls /var/named/slaves/     //区域数据文件已同步成功
    113.16.172.in-addr-arpa.zone  su.com.zone

5、DNS的高级视图功能

由于IP地址有地域的划分概念,每个地区都有不同网段的IP地址,就像手机号码一样,每个网段都有其对应的地区;DNS的高级视图所实现的功能是将来自不同地区的用户解析请求,返回不同的解析结果:比如说:

www.su.com.这台主机对应两个ip地址,一个是北京(1.1.1.1);一个是江苏(2.2.2.2);根据服务器所定义的匹配原则,来自北京的用户解析请求服务器会返回ip为1.1.1.1 ,来自江苏的用户请求,服务器会返回其2.2.2.2.

下面,我将以172.168.1.51 模拟北京的用户,以172.16.113.100模拟江苏用户:

用一台服务器(172.16.113.14)来实现高级视图功能,若想实现主从同步,从服务器的设置一样。

具体实验步骤如下:

1)在named.conf中定义view:即将所有的zone都划在view之下。

2)定义区域数据文件:

[[email protected] su]# vim su.com.zone.bj

[[email protected] su]# vim su.com.zone.js

*****注意这两个区域数据文件的权限:数组为named ,属主为root ,权限为640

重载bind的配置文件:

[[email protected] su]# /etc/init.d/named reload

下面用172.16.113.51进行解析测试:

[[email protected] ~]# ip addr  | awk -F ‘[ /]+‘‘/inet\>/&&!/127.0.0.1/ {print $3}‘
172.16.113.51
[[email protected] ~]# dig -t A [email protected] ///视图生效

用172.16.113.100进行解析测试:

解析成功。

时间: 2024-08-01 23:34:28

Linux上-DNS(bind)搭建2015091601的相关文章

Linux下DNS服务器搭建详解

 Linux下DNS服务器搭建详解 DNS  即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制.其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析. 下面对DNS的工作流程及原理进行简要说明 DNS的查询流程:需要解析服务的Client先查看本机的/etc/hosts:若无结果,则client查看本地的DNS缓存服务器:若无结果,则查找所属域的首选DNS服务器:若此时本地首选DN

Linux中DNS服务器搭建

Linux中DNS服务器搭建 实验介绍:本文主要介绍在虚拟机Linux环境中搭建DNS(域名解析系统)服务器,并最终能够实现域名的正向和反向解析,最终通过一台win7系统的虚拟机能够用域名www.benet.com访问另外一台win7系统的虚拟机. 1. 首先给Linux主机配IP地址,本文Linux的IP地址192.168.1.25,用于访问网站的win7虚拟机的IP地址为192.168.1.50,提供网站服务的win7虚拟机的IP地址为192.168.1.100. 2.在Linux上安装Bi

在Linux上用Apache搭建Git服务器

在Linux上用Apache搭建Git服务器 最近在学Linux,终于在Linux上用Apache搭建起了Git服务器,在此记录一下. 服务器:阿里云服务器 Linux版本:CentOS 6.5 Apache版本:Apache/2.2.15 Git版本:git 1.7.1 Git访问方式:基于http的基本验证(非SSL) Apache的安装 1. 安装Apache软件:yum install httpd 2. 设置Apache在服务器启动时运行:chkconfig --levels 235 h

Linux之DNS服务器搭建及常见DNS攻击和防御

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析).DNS协议运行在UDP协议之上,使用端口号53. 主机名到IP地址的映射有两种方式: 1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用: 2)动态映射,建立一套域名解析系统(DNS),只在

【Linux】DNS服务器搭建,主从服务器配置同步!

实验环境 使用CentOS6.5 x64搭建DNS服务器 将虚拟机绑定到VMnet1网卡让其与真机能够通信 配置真机VMnet1的虚拟网卡,并将DNS指向虚拟机 实验配置 建议先关闭iptables和selinux [[email protected] ~]# mount /dev/cdrom /mnt      //挂载光盘到mnt目录 mount: block device /dev/sr0 is write-protected, mounting read-only [[email pro

Linux 下dns的搭建

1.软件安装: redhat默认使用bind作为安装软件 使用yum安装 yum install -y bind bind-chroot bind-utils bind提供主程序 bind-chroot提供配置文件的挂载.目的:提高系统的安全性. bind-utils提供一些dns的小工具.例如named-checkzone等. 2.启动服务: 使用/etc/init.d.named start (service named start)启动服务. <1>编辑主配置文件,vim /var/na

linux上SVN服务器搭建后windows无法连接到服务器

忙了一天,linux搭建svn服务器,搭建好后windows一直无法连接,总觉得自己对: 原因: 1.以后禁止用sublime在本地编辑好后用XFTP上传到服务器(这样会导致文件权限问题,不能替换成功,--你看着成功了)--全部用vi命令 2.conf中 passwd 文件 用户名.密码等号之间一定要有空格 3. URL (我配置了单个版本库,但是指向版本库一直不对,直接写IP地址就对了,不知道为什么) ---以后尝试多版本库 第三个原因感觉是和 realm中的配置有关,找不到原因 原文地址:h

初学者学习Linux之DNS服务搭建

配置DNS大概步骤: 1.       配置IP地址,DNS指向自己. 2.       关闭防火墙,关闭selinux. 3.       挂载并安装bind包 4.       复制配置文件 5.       配置named.conf主要文件 6.       配置正反向文件 7.       配置正向文件 8.       配置反向文件 9.       重启服务 10.     测试服务 正文 1.       配置IP地址,DNS指向自己. [[email protected] ~]#

Linux上web服务器搭建

安装php依赖包: yum -y install gcc gcc++ libxml2 libxml2-devel yum install gcc make gd-devel libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel -y yum -y install curl-devel yum install openssl openssl-devel yum install libmcrypt libmcrypt-d