天天看点

bind allow-recursion

最近几天一直在bind9+mysql中盘旋,搞的头晕脑涨的,该死的DNS同步~呵呵,只能怪自己心急`总是搞一会儿就把bind停掉,今天起,就不停掉bind了,让他自己去同步吧,好了不废话了,我把安装步骤发出来和大家共项,有兴趣的照着做,高手给指点一二,谢谢,欢迎各种板砖,臭鸡蛋~

测试环境:ubuntu8.04

在万网花10元申请的域名服务器 ns1.edgora.cn 在这里鄙视他一下。NND这也要钱。

要解析的域名 xueku.org.cn

服务器IP地址 123.123.123.123

需要的软件包:bind9.5.tar.gz apache2  php5 php-mysql  mysql-bind.tar.gz phpmyadmin.gz mysql-server libmysqlclient15-dev php5-cli

1。apache2 php5 mysql-server 我就apt-get install 安装了,ubuntu打包文件还是很不错的,当然高手可以安装源代码`修改源代码安装可以匹配自己的机器才是稳定么,呵呵我没那么高的技术,也懒的去修改源代码!本人懒。

apt-get install apache2 php5 php5-cli php5-mysql mysql-server  libmysqlclient15-dev

大陆用户推荐用C99的源,我是在美国服务器上装,速度惊人,呵呵不用修改源`

2。安装 bind9.5+mysql-bind在这里我穿插一下我的郁闷的问题,我在bind官方网站在windows XP 下载的bind9 下载下来传到服务器上的,tar 解压的时候总是提示文件不全,不论下载多少次都是,所有bind9.5我是wget下载的。不知道你们安装的时候会怎么样。

  tar zxvf bind9.5

 tar zxvf mysql-bind

cp mysql-bind/mysqldb.c bind9.5/bin/named

cp mysql-bind/mysqldb.h bind9.5/bin/named/include/named

cd bind9.5

vim bin/named/Makefile.in 将

DBDRIVER_OBJS =

DBDRIVER_SRCS =

DBDRIVER_INCLUDES =

DBDRIVER_LIBS =

改成

DBDRIVER_SRCS = mysqldb.c

DBDRIVER_INCLUDES = -I'/usr/include/mysql'

DBDRIVER_LIBS = -L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lnss_dns -lresolv

我的是 ubuntu系统 mysql 开发包路径可能不一样~大家指定自己的路径就可以了不然会报错改完后wq保存退出。

然后修改 bin/named/main.c

查找 xxdb_init();

在 注释文件 xxdb_init();

下添加 mysqldb_init();

然后查找查找 xxdb_clear();

再下面添加mysqldb_clear();

修改完后wq 保存退出,然后开始编译安装

./configure --prefix=/usr/local/named --enable-threads #--enable-threads 开启多线程处理能力

make

make install

安装完后,需要手工建立配置文件的。不像 rpm 和deb包一样会有默认文件的。

cd /usr/local/named/etc

生成 rndc 控制命令的key文件

../sbin/rndc-confgen > etc/rndc.conf

#### 从 rndc.conf 文件中提取 named.conf 用的 key 生成 named.conf 文件

tail -10 rndc.conf | head -9 | sed 's/# //g' > named.conf

#### 此时,named.conf 内容为:

key "rndc-key" {

algorithm hmac-md5;

secret "O0SuB34RK+E3r+m5Fbh2eA==";

};

controls {

inet 127.0.0.1 port 953

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

#### dig 命令直接生成 named.root 文件,这个文件是很标准的东东,

#### 有了它,本地 dns 不能解的就上总部去问

dig > named.root

配置named.conf

        algorithm hmac-md5;

        secret "SNMYFWAAVeCB/udiejFdGw==";

        inet 127.0.0.1 port 953

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

include "named.conf.options";

zone "." {

type hint;

file "/usr/local/named/etc/named.root";

zone "localhost" {

        type master;

        file "/usr/local/named/etc/db.local";

zone "127.in-addr.arpa" {

        file "/usr/local/named/etc/db.127";

zone "0.in-addr.arpa" {

        file "/usr/local/named/etc/db.0";

zone "255.in-addr.arpa" {

        file "/usr/local/named/etc/db.255";

zone "xueku.org.cn" IN {

  type master;

  database "mysqldb edgora ludy localhost root 123";

这些 db.local db.127 db.0 db.255 网上很多配置,其实也没什么用。

#### 上述内容中配置自己的

#### 数据库名(edgora),表名(ludy),MYSQL主机(localhost),

#### MYSQL用户(root),MYSQL密码(123)

#### 当然,前提条件是在 mysql 建库。

这里我介绍一下,bind9.4以后新加的功能allow-query-cache。

感觉上allow-query-cache在未设置allow-recursion的情况下可以取代allow-recursion的功能,有继承关系。如果想禁止用户的递归查询请求,还需要将 allow-query-cache 选项关闭,否则用户仍然可能在 cache 中查到数据

我在这里 配置的 named.conf.options 内容如下

options {

        directory "/usr/local/named/etc";

        allow-query { any; };

        allow-recursion { any; };

        allow-query-cache {any;};

        datasize 2098;

我这样设置是非常不安全的,因为任何人都可以利用你的服务器来做DNS这样知道的多了,会造成严重的负载。所以大家可以建立acl规则来指定用户来使用你的DNS服务器。因为我测试就不这么做了,给大家一个例子。

例子:

acl "trusted"{

192.168.6.0/24;

        allow-recursion { trusted; };

        allow-query-cache {trusted;};

4.安装phpmyadmin

tar zxvf phpmyadmin.gz

mv phpmyadmin /var/www

我mysql有点不信任自己记得代码,所有用phpmyadmin比较安全,也简单。

查找 $cfg['PmaAbsoluteUri'] 修改为你将上传到空间的phpMyAdmin的网址

如:$cfg['PmaAbsoluteUri'] = 'http://123.123.123.123/phpmyadmin

查找 $cfg['Servers'][$i]['host'] = 'localhost';(通常用默认,也有例外,可以不用修改)

查找 $cfg['Servers'][$i]['auth_type'] = 'config';

在自己的机子里调试用config;如果在网络上的空间用cookie,这里我们既然在前面已经添加了网址,就修改成cookie ,这里建议使用cookie.

查找 $cfg['Servers'][$i]['user'] = 'root'; // MySQL user(mysql用户名,自己机里用root;)

查找 $cfg['Servers'][$i]['only_db'] = ''; // If set to a db-name, only(你只有一个数据就设置一下;如果你在本机或想架设服务器,那么建议留空) .查找 $cfg['DefaultLang'] = 'zh'; (这里是选择语言,zh代表简体中文的意思,这里不知道填gbk对否)

设置完毕后保存

如果出现“配置文件现在需要绝密的短语密码(blowfish_secret)”那么请在$cfg['blowfish_secret'] = ' ';的等号里面设置你网站的cookie,例如:$cfg['blowfish_secret'] = '任意字符';这是因为你的“$cfg['Servers'][$i]['auth_type'] = 'cookie'的原因。

哎我的phpmyadmin麻烦了点,高手见量`

相信大家如何建立数据库就不用说了吧,输入root 密码 123

进去后设置一下mysql的安全吧。然后建立一个数据库

好了`然后插入表了,因为时间问题我就不多说了。直接插代码了,我的表名ludy

CREATE TABLE ludy (

        name varchar(255) default NULL,

        ttl int(11) default NULL,

        rdtype varchar(255) default NULL,

        rdata varchar(255) default NULL

        ) TYPE=MyISAM;

####以下是正向解析示范可以直接倒入

28800');

INSERT INTO ludy VALUES ('xueku.org.cn', 259200, 'NS', 'ns1.edgora.cn.');

INSERT INTO ludy VALUES ('xueku.org.cn', 259200, 'MX', '10 mail.xueku.org.cn.');

INSERT INTO ludy VALUES ('ns1.edgora.cn', 259200, 'A', '123.123.123.123');

INSERT INTO ludy VALUES ('xueku.org.cn', 259200, 'A', '123.123.123.123');

INSERT INTO ludy VALUES ('www.xueku.org.cn', 259200, 'A', '123.123.123.123');

5.启动 bind测试它是否正常工作

04-Jul-2008 02:58:03.821 starting BIND 9.5.0 -g

04-Jul-2008 02:58:03.822 found 1 CPU, using 1 worker thread

04-Jul-2008 02:58:03.827 loading configuration from '/usr/local/named/etc/named.conf'

04-Jul-2008 02:58:03.828 listening on IPv6 interfaces, port 53

04-Jul-2008 02:58:03.831 binding TCP socket: address in use

04-Jul-2008 02:58:03.832 listening on IPv4 interface lo, 127.0.0.1#53

04-Jul-2008 02:58:03.856 binding TCP socket: address in use

04-Jul-2008 02:58:03.856 listening on IPv4 interface eth0, 75.125.197.202#53

04-Jul-2008 02:58:03.906 binding TCP socket: address in use

04-Jul-2008 02:58:03.963 default max-cache-size (33554432) applies

04-Jul-2008 02:58:03.990 automatic empty zone: 254.169.IN-ADDR.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: 2.0.192.IN-ADDR.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: 255.255.255.255.IN-ADDR.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: D.F.IP6.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: 8.E.F.IP6.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: 9.E.F.IP6.ARPA

04-Jul-2008 02:58:03.991 automatic empty zone: A.E.F.IP6.ARPA

04-Jul-2008 02:58:03.992 automatic empty zone: B.E.F.IP6.ARPA

04-Jul-2008 02:58:04.005 default max-cache-size (33554432) applies: view _bind

04-Jul-2008 02:58:04.025 /usr/local/named/etc/named.conf:7: couldn't add command channel 127.0.0.1#953: address in use

04-Jul-2008 02:58:04.026 ignoring config file logging statement due to -g option

04-Jul-2008 02:58:04.046 zone 0.in-addr.arpa/IN: loaded serial 1

04-Jul-2008 02:58:04.047 zone 127.in-addr.arpa/IN: loaded serial 1

04-Jul-2008 02:58:04.048 zone 255.in-addr.arpa/IN: loaded serial 1

04-Jul-2008 02:58:04.057 zone localhost/IN: loaded serial 1

04-Jul-2008 02:58:04.059 running

能打开OK。 host -t ns xueku.org.cn 得到 ns1.edgora.cn好一切正常,现在就等你的bind9与世界各地的DNS同步了,默认的DNS就可以解析你的域名啦。写的有点仓促,呵呵如果有错误谢谢指点。nslookup xueku.org.cn也可以测试的。。

在这里 要谢谢``帮助我的人` 呵呵``让我学到了不少东西。当然要想同步的快点把TTL修改低一点 修改 3600吧呵呵``一小时同步一次。再告诉大家一个好用的测试命令

也是向别人学习的呵呵。dig @203.119.27.1 xueku.org.cn

; <<>> DiG 9.3.5rc2 <<>> @203.119.27.1 xueku.org.cn

; (1 server found)

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1310

;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:

;xueku.org.cn.                  IN      A

;; AUTHORITY SECTION:

xueku.org.cn.           21600   IN      NS      ns.edgora.cn.

xueku.org.cn.           21600   IN      NS      ns1.edgora.cn.

;; Query time: 93 msec

;; SERVER: 203.119.27.1#53(203.119.27.1)

;; WHEN: Tue Jul 01 19:41:27 2008

;; MSG SIZE  rcvd: 72

;; connection timed out; no servers could be reached

因为我的还没有同步所以报错了。

好了就写这么多,欢迎石头板砖,鸡蛋~~