Ubuntu Linux 学习篇 配置DNS服务器

Wesley13
• 阅读 1011

BIND9

DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器通常为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。

总的来说DNS服务器就是负责域名和IP地址之间的转换。

1.Bind9配置文件介绍 

Bind的配置文件,放在/etc/bind9/目录下,主要的配置文件有以下4个,分别是:

/etc/bind/
  • /etc/bind9/named.conf(主配置文件)    //主配置文件,通过include关键字加载其他三个配置文件
  •     |_    /etc/bind9/named.default-zones;               //默认区域
  • |_ /etc/bind9/named.conf.options;                 //转发器配置文件
  • |_ /etc/bind9/named.conf.local;                    //用户配置文件,一般将DNS记录放在这个文件里面
  •                |_    /var/cache/bind/db.xxx,com                    //正向配置文件
  •                 |_    /var/cache/bind/db.1.168.192                //反向配置文件

其中,/etc/bind9/named.conf是Bind的主配置文件,不过他并不包含DNS数据。查看/etc/bind9/named.conf文件可以发现,主配置文件里面使用了include关键字来加载其它3个配置文件。

在/etc/bind9/named.conf.options文件中,有一句默认的配置(如下),该语句的所示的目录的作用是存放正向解析以及反向解析的一些配置文件,该配置告诉Bind,到/var/cache/bind目录下去寻找数据文件。

2.完全卸载(如果你是首次安装,请忽略)

在你看这篇文章的时候,也许你已经在DNS配置里面挣扎了很久,然后没有成功,那么,请你执行以下命令(卸载bind9,并且删除配置文件)

$ sudo apt-get purge bind9

安装DNS服务

$ apt-get install bind9

或者

$ sudo apt-get -y install bind9

3.创建正反向Zone(解析)文件路径查找

创建正向Zone文件

正向Zone文件是用来做正向解析的,即将域名解析为IP地址 

(1)首先,修改/etc/bind/named.conf.local文件

$ sudo mv /etc/bind/named.conf.local /etc/bind/named.conf.local-bak        //备份原始配置文件,如果配置错误可还可以再替换回来
$ sudo vim /etc/bind/named.conf.local                                      //使用vim编辑器编辑配置文件

添加下列信息:

zone "kevin.com" {                                                        //DNS服务器的名字
    type master;
    file "db.kevin.com";
};

该配置指定Bind作为kevin.com域的主域名服务器,db. kevin.com文件包含所有*.kevin.com 形式的域名转换数据。文件 db.kevin.com 没有指定路径,所以默认是/var/cache/bind/。 

创建反向Zone文件 
反向Zone文件是用来做反向解析的,即把IP地址解析为域名。 

zone "191.168.192.in-addr.arpa" {
    type master;
    file "db.192.168.191";
};

然后,我们复制一个现有的文件作为Zone文件正向解析的模板:

$ sudo cp /etc/bind/db.local /var/cache/bind/db.kevin.com            //模板为db.local

现在,我们来修改该Zone文件:

$ sudo vim /var/cache/bind/db.kevin.com

将其改为如下内容(其中的192.168.191.4是我的局域网IP地址,通过命令行ifconfig可查看主机的局域网IP地址)

;
; BIND data file for local loopback interface
;
$TTL   604800
@   IN  SOA localhost. root.localhost. (
                  2     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@   IN  NS  ns.
@   IN  A   192.168.191.4
www IN  A   192.168.191.4
@   IN  AAAA    ::1

再复制一个现有的文件作为Zone文件反向解析的模板

$ sudo cp /etc/bind/db.127 /var/cache/bind/db.191.168.192            //模板为db.127

修改该Zone文件

$ sudo vim /var/cache/bind/db.191.168.192

将其改为如下内容:

;
; BIND reverse data file for local loopback interface
;
$TTL   604800
@   IN  SOA localhost. root.localhost. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@   IN  NS  ns.
4   IN  PTR www.kevin.com
1.0.0   IN  PTR localhost.

左下角中的4代表IP的最后一个字节号,例如,我的局域网IP地址是192.168.191.4,那么最后一个字节就是4

配置转发器

options {
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

    // If your ISP provided one or more IP addresses for stable 
    // nameservers, you probably want to use them as forwarders.  
    // Uncomment the following block, and insert the addresses replacing 
    // the all-0's placeholder.

     forwarders {

        114.114.114.114;                                        //转发器1
        114.114.115.115;                                        //转发器2

     };

    //========================================================================
    // If BIND logs error messages about the root key being expired,
    // you will need to update your keys.  See https://www.isc.org/bind-keys
    //========================================================================
    dnssec-validation auto;

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

修改主机域名解析地址,重启Bind9 

(1)修改主机域名解析地址

$ sudo vim /etc/resolv.conf

修改为
search kevin.com
nameserver 192.168.191.4

(2)重启Bind9

$ sudo service bind9 restart

四、测试

$ ping kevin.com

如果有数据的收发,则表示配置成功。

或者在同一局域网内的另一台主机上设置DNS地址为DNS服务器的地址

使用nslookup命令进行解析测试

# nslookup

如果解析出相应的IP或者域名就表示配置正确

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这