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
拓扑结构:
一、安装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目录下有没有创建出来所需的文件。如果没有,那启动的时候就会失败,得重新执行一遍,有点小麻烦。但也可能你的系统一次性就执行成功了。
设置开机自启动:
/usr/local/mysql/bin目录下存放的是一些常用的指令,怎样才能用这些指令呢?需要编辑一个文件。打开/etc/profile文件进行编辑。编辑后需要重新读取才能生效。
指令: . /etc/profile
为mysql配置一个密码 增加mysql的安全。指令
mysqladmin -u root -p password 'inferr'
当再次进入的时候就需要密码才能登录了。启动一下试试吧。
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目录下需要有这三个文件,这个目录下的文件影响着我们系统的运行。那怎么才能整出来呢?
进入/usr/local/bind9目录下
执行 ./rndc-confgen -a 这个命令在终端执行不成功的话那就进入系统中执行。
再执行 ./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,结果亮相。
调用库文件。在/etc/ld.so.conf.d目录下新建一个mysql.conf的文件 并将库文件路径写进文件中。
ldconfig 刷新一下缓存,再查看结果。
同样把bind的命令工具写入文件中。并重新读取。
接着执行启动命令:
/usr/local/bind9/sbin/named -g -d 1 -c /usr/local/bind9/etc/named.conf
ok 执行后再来看看DNS端口是否处在监听状态.
setup3)剩下就是各种测了。
外网测试结果:
内部测试结果
本机测试结果:
测试的时候切记关闭系统的防火墙功能和SElinux,不然不能成功!