DNS智能解析的实质:基于不同的来源,dns服务器返回不同的结果

DNS策略解析最基本的功能是可以智能的判断访问您网站的用户,然后根据不同的访问者把您的域名分别解析成不同的IP地址。如访问者是网通用户,DNS策略解析服务器会把你的域名对应的网通IP地址解析给这个访问者。DNS策略解析服务器会把您域名对应的电信IP地址解析给这个访问者。

实验环境:dns服务器是在centos6.4 32位操作系统上实现的,中间用了一台H3C的防火墙。Internet用的是一台电脑pc模拟的。

实验中用到的mysql-5.5.15-linux2.6-i686.tar.gz可以到mysql的官方网站www.mysql.com下载,

也可以到 http://pan.baidu.com/disk/home?frm=hao123   下载,

bind-9.8.6-P1.tar.gz可以到 http://pan.baidu.com/disk/home?frm=hao123  下载。

网络拓扑图如下:

wKiom1LX25mANUuxAADOqY4FFdw103.jpg

试验结果预期:内网用户解析出来的地址是192.168.80.12,外网地址解析出来的地址是61.130.130.1.

[root@localhost ~]# tar -zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local/

把源码解压到/usr/local/目录下

[root@localhost ~]# cd /usr/local/

[root@localhost local]# ln -s mysql-5.5.15-linux2.6-i686 mysql

进入解压好的目录,为了方便访问给此目录创建一个快捷方式

[root@localhost local]# cd mysql

[root@localhost mysql]# vim INSTALL-BINARY

进入mysql目录,里边有一个INSTALL-BINARY文件,这是个安装帮助文档,可以看到如下步骤介绍:

wKioL1LX1yyDUAx6AAFiiX-nzr8610.jpg

[root@localhost ~]# groupadd mysqlsts

[root@localhost ~]# useradd -r -g mysql mysql

创建一个mysql组并添加一个账号mysql

[root@localhost mysql]# chown -R mysql .

[root@localhost mysql]# chgrp -R mysql .

改变所有文件的所有者和所有组都改为mysql

[root@localhost mysql]# scripts/mysql_install_db --user=mysql

以sql的身份来初始化数据库

[root@localhost mysql]# chown -R root .

[root@localhost mysql]# chown -R mysql data

再把所有者和所有组改回来

[root@localhost mysql]# cp support-files/my-medium.cnf /etc/my.cnf

将support-files/my-medium.cnf拷贝到 /etc/my.cnf,是否覆盖选择y。

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld

[root@localhost mysql]# chmod a+x /etc/init.d/mysqld

给mysqld执行权限

[root@localhost mysql]# service mysqld start

启动服务mysqld。

发现出现错误:

wKiom1LX10qh6IwzAABJIXXUaTM845.jpg

如果出现此错误的话,就把刚才做的命令重新执行一遍:

[root@localhost mysql]# chown -R mysql .

[root@localhost mysql]# chgrp -R mysql .

[root@localhost mysql]# scripts/mysql_install_db --user=mysql

[root@localhost mysql]# chown -R root .

[root@localhost mysql]# chown -R mysql data

后边拷贝的那两步就不用重做了,然后再次开始mysqld服务,运行成功!

[root@localhost mysql]# netstat -tupln |grep  3306

查看mysqld端口是否打开

wKioL1LX106y0qtcAABGJaXL-ik881.jpg


端口已经打开。

[root@localhost mysql]# chkconfig --add mysqld

[root@localhost mysql]# chkconfig mysqld on

将mysqld设为开机自动启动。

[root@localhost mysql]# vim /etc/profile

PATH=$PATH:/usr/local/mysql/bin

为了方便使用目录下的bin文件,将它加入到系统文件中:

[root@localhost mysql]# . /etc/profile

重新读取profile文件:(重新登录也可以)

[root@localhost mysql]# mysqladmin -u root -p password '123'然后直接回车

给mysql创建一个管理员用户,密码为123

到这里,mysql已经安装完毕。


接下里安装bind:

[root@localhost ~]# tar -zxvf bind-9.8.6-P1.tar.gz  -C /usr/local/src/

解压bind安装包

[root@localhost ~]# cd /usr/local/src/

[root@localhost src]# ll

total 4

drwxrwxr-x. 12 10132 wheel 4096 Oct 16 08:09 bind-9.8.6-P1

[root@localhost src]# cd bind-9.8.6-P1/

切换到bind目录

[root@localhost bind-9.8.6-P1]# ./configure --prefix=/usr/local/bind9 --with-dlz-mysql=/usr/local/mysql --enable-threads=no --disable-openssl-version-check

[root@localhost bind-9.8.6-P1]# make && make install 执行make命令已经make install

[root@localhost bin]# cd /usr/local/bind9/

进入此目录,此目录为bind的安装目录

[root@localhost bind9]# cd sbin/

[root@localhost sbin]# ./rndc-confgen -a

wKiom1LX16aQbJ1KAABAXmZqGzA182.jpg

执行此命令会在/usr/local/bind9/etc/下产生一个rndc.key 文件

[root@localhost sbin]# ./rndc-confgen >../etc/named.conf

生成named.conf 文件

以上两步最好不要在终端中做,因为在终端中做文件生的特别慢,最好是直接在系统中执行命令。

现在进入/usr/local/bind9/etc/目录会发现其中有三个文件:

wKioL1LX12uRTqadAACCZXQjAKk652.jpg

进入named.conf文件:

去掉第20行至23行前边的#:

wKioL1LX1-uy-eJHAAA3cdxkA9g098.jpg

修改option如下:

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

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

allow-query { any; };

recursion no;

version "gaint-d1"

wKioL1LX1_zh8oLcAAJUhmlpx8A847.jpg

在此文件中创建“lan”和“wan”两个访问控制链表:

wKiom1LX2GrCp6ubAAAnWTMQPXk843.jpg

并在此文件中添加以下内容:

view "lan-view" {

       match-clients {lan;};

       dlz "Mysql zone" {

        database "mysql

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

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

        {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"')                32         when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum)                 33         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=123}

       {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$'}";

 };

到此处为止,bind也基本安装完成。

接下来给数据库中添加内容:

[root@localhost etc]# mysql -u root -p

Enter password:

以管理员身份登录mysql

mysql> create database mydata;

创建数据库mydate

mysql> use mydata;

打开mydate

创建lan表:

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)

);

创建wan表:

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)

);

可以看到现在数据库中有如下表:

wKioL1LX2LmTY7p6AABSHqvvPQs694.jpg

mysql> insert into lan_dns_records (zone,host,type,data,ttl,retry) values ('abc.com','www','A','192.168.80.12','86400','15');

mysql> insert into wan_dns_records (zone,host,type,data,ttl,retry) values ('abc.com','www','A','61.130.130.1','86400','15')

两表格中各插入一条记录。

此时可看到数据库中的两个表中有如下数据:

wKiom1LX2VPQFDFHAAI3WpgdTtk445.jpg

使用/usr/local/bind9/sbin/named -g -d 1 -c /usr/local/bind9/etc/named.conf指令测试:

发现出错,缺少一个libmysqlclient.so.18库文件

wKioL1LX2WrAHikYAABHuq4ZpvY910.jpg

其实这个文件时存在的,在/usr/local/mysql/lib/目录下,

[root@localhost sbin]# vim /etc/ld.so.conf.d/mysql.conf

在/etc/ld.so.conf.d/下随便建一个文件,比如叫做mysql.conf 然后将此库文件的路径写入:

/usr/local/mysql/lib/

[root@localhost sbin]# ldconfig

执行ldconfig刷新缓存。

[root@localhost etc]# ifconfig eth0:0 61.130.130.10 netmask 255.255.255.0

给网卡eth0再加个地址61.130.130.0/24网段内的,以便测试之用。

[root@localhost etc]# dig www.abc.com @192.168.80.12

[root@localhost etc]# dig www.abc.com @61.130.130.10

测试结果如下:

wKiom1LX2Y7Abtj0AAFX_-2Yt94129.jpg

wKioL1LX2YHBHKB7AAFgXtWQWl8850.jpg

然后进入防火墙配置:

[H3C]int eth0/0  

[H3C-Ethernet0/0]ip add 192.168.80.254 255.255.255.0    

[H3C-Ethernet0/0]int eth0/4

[H3C-Ethernet0/4]ip add 61.130.130.100 255.255.255.0

[H3C-Ethernet0/0]quit

[H3C]firewall zone trust

[H3C-zone-trust]add int eth0/4

[H3C-zone-trust]quit

[H3C]firewall zone untrust

[H3C-zone-untrust]add int eth0/0        

[H3C-Ethernet0/4]nat server protocol udp global 61.130.130.1 53 inside 192.168.80.12 53

配置完成后可以测试一下:

wKioL1LX2a7RBpvMAAEK-U84u-I187.jpg

测试成功!