Centos环境下的DNS智能解析
时间:2014-02-26 02:47 来源:51cto.com 作者:金欣 的BLOG
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 下载。
网络拓扑图如下:
试验结果预期:内网用户解析出来的地址是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文件,这是个安装帮助文档,可以看到如下步骤介绍:
[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。
发现出现错误:
如果出现此错误的话,就把刚才做的命令重新执行一遍:
[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端口是否打开
端口已经打开。
[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
执行此命令会在/usr/local/bind9/etc/下产生一个rndc.key 文件
[root@localhost sbin]# ./rndc-confgen >../etc/named.conf
生成named.conf 文件
以上两步最好不要在终端中做,因为在终端中做文件生的特别慢,最好是直接在系统中执行命令。
现在进入/usr/local/bind9/etc/目录会发现其中有三个文件:
进入named.conf文件:
去掉第20行至23行前边的#:
修改option如下:
directory "/usr/local/bind9/etc/";
pid-file "/usr/local/bind9/var/run/named.pid";
allow-query { any; };
recursion no;
version "gaint-d1"
在此文件中创建“lan”和“wan”两个访问控制链表:
并在此文件中添加以下内容:
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)
);
可以看到现在数据库中有如下表:
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')
两表格中各插入一条记录。
此时可看到数据库中的两个表中有如下数据:
使用/usr/local/bind9/sbin/named -g -d 1 -c /usr/local/bind9/etc/named.conf指令测试:
发现出错,缺少一个libmysqlclient.so.18库文件
其实这个文件时存在的,在/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
测试结果如下:
然后进入防火墙配置:
[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
配置完成后可以测试一下:
测试成功!
(责任编辑:IT)
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 下载。 网络拓扑图如下:
试验结果预期:内网用户解析出来的地址是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文件,这是个安装帮助文档,可以看到如下步骤介绍:
[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。 发现出现错误:
如果出现此错误的话,就把刚才做的命令重新执行一遍: [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端口是否打开
端口已经打开。 [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
执行此命令会在/usr/local/bind9/etc/下产生一个rndc.key 文件 [root@localhost sbin]# ./rndc-confgen >../etc/named.conf 生成named.conf 文件 以上两步最好不要在终端中做,因为在终端中做文件生的特别慢,最好是直接在系统中执行命令。 现在进入/usr/local/bind9/etc/目录会发现其中有三个文件:
进入named.conf文件: 去掉第20行至23行前边的#:
修改option如下: directory "/usr/local/bind9/etc/"; pid-file "/usr/local/bind9/var/run/named.pid"; allow-query { any; }; recursion no; version "gaint-d1"
在此文件中创建“lan”和“wan”两个访问控制链表:
并在此文件中添加以下内容: 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) ); 可以看到现在数据库中有如下表:
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') 两表格中各插入一条记录。 此时可看到数据库中的两个表中有如下数据:
使用/usr/local/bind9/sbin/named -g -d 1 -c /usr/local/bind9/etc/named.conf指令测试: 发现出错,缺少一个libmysqlclient.so.18库文件
其实这个文件时存在的,在/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 测试结果如下:
然后进入防火墙配置: [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 配置完成后可以测试一下:
测试成功! (责任编辑:IT) |