DNS是计算机域名系统或域名解析服务器(Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。DNS使用TCP与UDP端口号都是53,主要使用UDP,服务器之间备份使用TCP。


域名结构:

   通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。

解析器:

   解析器,或另一台DNS服务器递归代表的情况下,域名解析器,协商使用递归服务,使用查询头位。

   解析通常需要遍历多个名称服务器,找到所需要的信息。然而,一些解析器的功能更简单地只用一个名称服务器进行通信。这些简单的解析器依赖于一个递归名称服务器(称为“存根解析器”),为他们寻找信息的执行工作。


服务器:

   提供DNS服务的是安装了DNS服务器端软件的计算机。服务器端软件既可以是基于类linux操作系统,也可以是基于Windows操作系统的。


服务器类别:

           1.主DNS服务器。

           2.辅DNS服务器。

           3.缓存DNS服务器

智能DNS(Bind-view):
  智能DNS 原理很简单:在用户解析一个域名的时候的,判断一下用户使用的IP,然后跟DNS 服务器内部的IP 表匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP 地址。目前的域名服务运营商不提供智能DNS 服务,所以必须自行架设DNS 服务或者使用网上免费的智能DNS 服务,如
DNSPOD.

    这些原理也都是我百度的,大家想对DNS有更深的了解的话也去问问度娘吧。大致了解过这些原理后就来做个实例巩固一下吧。


环境:  bind-9.8.6-P1.tar     mysql-5.5.15-linux2.6-i686.tar  CentOS-6.5-i386


拓扑结构:

wKioL1LZ-BSBJq0hAAC7skwBuQA876.jpg

   一、安装Mysql  

   挂载光驱,检测系统的预编译环境,安装缺少的开发工具。到网上下载到Mysql以及bind,并上传到系统中。  

拆解Mysql并指定目录。

tar  -zxvf  mysql-5.5.15-linux2.6-i686.tar.gz   -C  /usr/local/

进入/usr/locla目录下,执行

ln  -s  mysql-5.5.15-linux2.6-i686/   mysql

因为mysql-5.5.15-linux2.6-i686这个名字太长了,我将他做成一个链接,这样方便自己。接着执行下面的命令

groupadd mysql  

useradd -r -g mysql mysql

chown -R mysql .

chgrp -R mysql .

scripts/mysql_install_db --user=mysql

chown -R root .

chown -R mysql data

cp support-files/my-medium.cnf /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysqld


将mysqld文件修改为可执行文件。 指令:

chmod a+x /etc/init.d/mysqld


*****scripts/mysql_install_db --user=mysql****这一步很重要,可能会报错,说需要一个什么什么库,那装就得了。执行之后最好查看一下data目录下有没有创建出来所需的文件。如果没有,那启动的时候就会失败,得重新执行一遍,有点小麻烦。但也可能你的系统一次性就执行成功了。

设置开机自启动:

wKiom1LZ_3exLL1RAAAp3SzYV3I813.jpg

   /usr/local/mysql/bin目录下存放的是一些常用的指令,怎样才能用这些指令呢?需要编辑一个文件。打开/etc/profile文件进行编辑。编辑后需要重新读取才能生效。

  指令:  . /etc/profile

wKioL1LaOhKgnXlPAABG73i2yDA701.jpg


为mysql配置一个密码  增加mysql的安全。指令

mysqladmin -u  root  -p  password  'inferr'

当再次进入的时候就需要密码才能登录了。启动一下试试吧。

wKioL1LaOjeiSttJAAAmbyxgAN8111.jpg


OK,Mysql的操作暂告一段落。


     二、安装bind

把上传的包拆解:

tar  -zxvf bind-9.8.6-P1.tar.gz   -C  /usr/local/src/

切换到拆解后的目录,执行

. /configure   --prefix=/usr/local/bind9  --with-dlz-mysql=/usr/local/mysql  --enable-threads=no --disable-openssl-version-check

执行这一步的时候会出现一个报错,缺少openssl,所以先来安装openssl,安装后再来执行,就不会出错了。

yum --disablerepo=\*  --enablerepo=c6-media  install  openssl-devel

再进行  make &&  make install      ok,编译也完成了。


/usr/local/bind9/etc目录下需要有这三个文件,这个目录下的文件影响着我们系统的运行。那怎么才能整出来呢?

wKioL1LaEA-ggJ5GAABGfO3sIeg609.jpg

进入/usr/local/bind9目录下

执行 ./rndc-confgen -a 这个命令在终端执行不成功的话那就进入系统中执行。

wKioL1LZ-A2Cg-vdAAAjZ213DuQ556.jpg

再执行 ./rndc-confgen >../etc/named.conf

编辑named.conf文件,我把文件的全部内容贴上来给大家参考。

# Start of rndc.conf

acl "lan" {

       192.168.2.0/24;

};

acl "wan" {

       12.1.1.0/24;

};

key "rndc-key" {

       algorithm hmac-md5;

       secret "4NZMVCNWcBdGO0dl1zBDiQ==";

};

options {

        directory "/usr/local/bind9/etc/";

        pid-file "/usr/local/bind9/var/run/named.pid";

        allow-query { any; };

        recursion no;

        version "gaint-d1";

};

# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:

# key "rndc-key" {

#       algorithm hmac-md5;

#       secret "4NZMVCNWcBdGO0dl1zBDiQ==";

# };

controls {

       inet 127.0.0.1 port 953

       allow { 127.0.0.1; } keys { "rndc-key"; };

};

# End of named.conf

view "lan-view" {

       match-clients {lan;};

       dlz "Mysql zone" {

       database "mysql

       {host=127.0.0.1 dbname=mydata ssl=false user=root pass=inferr}

       {select zone from lan_dns_records where zone='$zone$'}

       {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"')

       when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum)

       else data end from lan_dns_records where zone='$zone$' and host='$record$'}";

};

};

view "wan-view" {

       match-clients {wan;};

       dlz "Mysql zone" {

       database "mysql

       {host=127.0.0.1 dbname=mydata ssl=false user=root pass=inferr}

       {select zone from wan_dns_records where zone='$zone$'}

       {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"')

       when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum)

       else data end from wan_dns_records where zone='$zone$' and host='$record$'}";

};

};

进入数据库,创建数据库以及tables,并插入相应记录。

创建数据库: create database mydata;

打开数据库: use  mydata;

创建表格内部用户表格:

create table lan_dns_records (

zone varchar (255),

host varchar (255),

type varchar (255),

data varchar (255),

ttl int(11),

mx_priority varchar (255),

refresh int(11),

retry int(11),

expire int(11),

minimum int(11),

serial bigint(20),

resp_person varchar (255),

primary_ns varchar (255)

);

创建外部用户表格:

create table wan_dns_records (

zone varchar (255),

host varchar (255),

type varchar (255),

data varchar (255),

ttl int(11),

mx_priority varchar (255),

refresh int(11),

retry int(11),

expire int(11),

minimum int(11),

serial bigint(20),

resp_person varchar (255),

primary_ns varchar (255)

);

插入记录:

insert into lan_dns_records (zone,host,type,data,ttl,retry) values ('inferr.com','www','A','192.168.2.100','86400','15');


insert into wan_dns_records (zone,host,type,data,ttl,retry) values ('inferr.com','www','A','12.1.1.1','86400','15');

OK,结果亮相。

wKiom1LaOn6h_IY7AAEe3b5ZeDE554.jpg

调用库文件。在/etc/ld.so.conf.d目录下新建一个mysql.conf的文件 并将库文件路径写进文件中。

ldconfig  刷新一下缓存,再查看结果。

wKioL1LaOtKQv6I8AAClJgtQF14174.jpg

同样把bind的命令工具写入文件中。并重新读取。

wKiom1LaTy_CdyXnAAAv3AIz8UY701.jpg

接着执行启动命令:

/usr/local/bind9/sbin/named -g -d 1 -c /usr/local/bind9/etc/named.conf


ok 执行后再来看看DNS端口是否处在监听状态.

wKiom1LZ-DTCmm32AAB2iVWGdEo881.jpg


setup3)剩下就是各种测了。

外网测试结果:

wKioL1LZ9_2To3OIAACBouL48jE896.jpg

内部测试结果

wKioL1LZ-BPBJfZCAAB13UlCr0I035.jpg

本机测试结果:

wKiom1LZ-DWhhvZZAADhdbi6fow427.jpg

 测试的时候切记关闭系统的防火墙功能和SElinux,不然不能成功!