Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7739497
  • 博文数量: 637
  • 博客积分: 10265
  • 博客等级: 上将
  • 技术积分: 6165
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-12 22:00
文章分类

全部博文(637)

文章存档

2011年(1)

2010年(1)

2009年(3)

2008年(12)

2007年(44)

2006年(156)

2005年(419)

2004年(1)

分类:

2006-11-04 11:52:45

    Key Words: BIND DDNS 动态域名 PostgreSQL
    由于自己的机器()接入的是网通,工作单位却在教育网,这两个网络之间的互联互通速度可谓是相当的慢了,每次访问自己的网站都是一种煎熬,不过也好,可以锻炼自己的耐心,我一直不是很有耐心。
    最近我同事在住的地方搞了一个机器,接入网通的网络,同时也接入了教育网,顺便通过VPN给我在网通的机器搞到了一个教育网的IP,这下通过教育网的IP访问无的服务器速度就快多了,呵呵。
    为了让服务更透明些,决定使用bind的view功能,使得单位内部的人解析这个域名获得的IP地址是教育网的IP,其他人一律获得原有的网通的IP地址。这样存在的问题是:如果VPN线路断了(网通的BT客户端只能用windows注册,还不能在NAT后面),那么单位内部将无法访问我的网站。
    因为我的机器是通过ADSL接入网通的,IP地址不固定,并且VPN也不稳定,所以需要自己做域名服务器,实时修改域名的记录,当VPN线路断开后,所有人解析都解析成为网通的IP。

    之前是通过写脚本直接修改zone file文件,修改完毕后直接reload named服务,呵呵,也达到了预期的目的。但是总是觉得可以更方便一些,于是想到把zone file放到数据库里面。

    上网google了一番,发现这个网站不错:

    转载请注明如下信息:
    作者: 温占考 < wzk [A|T] wenzk [D|O|T] net >
    本文首发: http://wenzk.cublog.cn
    官方网站:

我的OS: FC4 ( 还是很喜欢RH的风格:) )

从可以看到,其实安装很简单:)

[root@wzk ~]# yum install bind-sdb

呵呵,安装成功了,很快吧。

下面调整postgresql的启动顺序,很简单的道理,如果postgresql在named之后启动,那么将会有很严重的问题: 启动bind的时候无法连接数据库,然后bind就没有办法解析这个zone了,解决办法:

修改/etc/init.d/postgresql文件

# chkconfig: - 64 36
改成:
# chkconfig: - 11 89
因为bind的启动顺序是13:)

运行:

[root@wzk ~]# chkconfig --level 123456 postgresql off
[root@wzk ~]# chkconfig --level 35 postgresql on

启动也基本搞定了。

启动支持PostgreSQL版本的named,在FC下修改
/etc/sysconfig/named
增加:
ENABLE_SDB=yes

启动postgresql
[root@wzk ~]# /etc/init.d/postgresql start

创建数据库和用户:
[root@wzk ~]# su - postgres
-bash-3.00$ psql -d template1
欢迎使用 psql 8.0.8, PostgreSQL 的交互终端.

输入:  \copyright 获取发布信息
       \h         获取 SQL 命令的帮助
       \?         获取 psql 命令的帮助
       \g         或者以分号作为执行查询的结尾
       \q         退出

template1=# create user binduser password 'bindpass' createdb;
CREATE USER
template1=# \connect template1 binduser;
致命错误:  用户 "binduser" Ident 认证失败
保留上一次联接
template1=# \q
-bash-3.00$ exit
logout

修改PostgreSQL配置,让PostgreSQL只从localhost访问只从pg_shadow中验证。
[root@wzk ~]# vi /var/lib/pgsql/data/pg_hba.conf
修改:
host    all         all         127.0.0.1/32          ident sameuser
成:
host    all         all         127.0.0.1/32          md5
[root@wzk ~]# /etc/init.d/postgresql restart
停止 postgresql 服务:                                     [  确定  ]
启动 postgresql 服务:                                     [  确定  ]
[root@wzk ~]# psql -U binduser -h localhost -d template1
口令:
欢迎使用 psql 8.0.8, PostgreSQL 的交互终端.

输入:  \copyright 获取发布信息
       \h         获取 SQL 命令的帮助
       \?         获取 psql 命令的帮助
       \g         或者以分号作为执行查询的结尾
       \q         退出

template1=> CREATE DATABASE bind;
CREATE DATABASE
template1=> \q
[root@wzk ~]#

转换zone文件:
[root@wzk ~]# cp /var/named/test.com.zone /tmp/
因为zonetodb命令不支持指定用户名的选项,所使用最笨的方法,创建binduser。
[root@wzk ~]# useradd binduser
[root@wzk ~]# su - binduser
[binduser@wzk ~]$ /usr/sbin/zonetodb test.com /tmp/test.com.zone bind testcom
Connecting to 'bind'
DROP TABLE testcom
DROP TABLE command failed: 错误:  表 "testcom" 不存在

BEGIN
CREATE TABLE testcom (NAME TEXT, TTL INTEGER, RDTYPE TEXT, RDATA TEXT)
INSERT INTO testcom (NAME, TTL, RDTYPE, RDATA) VALUES ('test.com', 86400, 'SOA', 'elm.faqserv.com. root.test.com. 42 10800 900 604800 86400')
INSERT INTO testcom (NAME, TTL, RDTYPE, RDATA) VALUES ('test.com', 86400, 'NS', 'elm.faqserv.com.')
INSERT INTO testcom (NAME, TTL, RDTYPE, RDATA) VALUES ('test.com', 86400, 'NS', 'openvon.freetcp.com.')
INSERT INTO testcom (NAME, TTL, RDTYPE, RDATA) VALUES ('test.com', 86400, 'AAAA', '2001:250:7001:1100::2')
INSERT INTO testcom (NAME, TTL, RDTYPE, RDATA) VALUES ('', 60, 'A', '192.168.0.1')
COMMIT TRANSACTION
[binduser@wzk ~]$

到目前为止,原来的zone file已经导入到PostgreSQL里面了,下面修改配置文件:

/etc/named.conf
把原来test.com的配置修改成:
zone "test.com." IN {
        type master;
        database "pgsql  bind        testcom  localhost binduser bindpass";
        #                ^- DB name  ^-Table  ^-host    ^-user ^-password
};

保存配置后重新启动named。
[root@wzk ~]# /etc/init.d/named restart
Stopping named_sdb:                                        [  确定  ]
Starting named_sdb:                                        [  确定  ]
[root@wzk ~]#

注意查看: /var/log/messages的信息,看看是否有错误信息。
如果查询记录有问题,可以看到类似如下的提示:
Nov  4 12:49:14 CNCRoom named_sdb[11647]: zone test.com/IN/internal: could not find NS and/or SOA records
Nov  4 12:49:14 CNCRoom named_sdb[11647]: zone test.com/IN/internal: has 0 SOA records
Nov  4 12:49:14 CNCRoom named_sdb[11647]: zone test.com/IN/internal: has no NS records


[root@wzk ~]# nslookup - localhost
>
Server:         localhost
Address:        127.0.0.1#53

Name:  
Address: 192.168.0.1
>
呵呵,测试成功。

[root@wzk ~]# psql -dbind -U binduser -h localhost -c 'select * from testcom;'
    name      |  ttl  | rdtype |                          rdata
--------------+-------+--------+----------------------------------------------------------
 test.com     | 86400 | SOA    | elm.faqserv.com. root.test.com. 42 10800 900 604800 86400
 test.com     | 86400 | NS     | elm.faqserv.com.
 test.com     | 86400 | NS     | openvon.freetcp.com.
 test.com     | 86400 | AAAA   | 2001:250:7001:1100::2
  |    60 | A      | 192.168.0.1
(5 行)

需要修改域名或者增加域名记录,只需使用SQL语句修改数据库记录或修改域名记录。
如果有从域名服务器,记住每次修改域名后需要修改SOA记录的serial的数值。

配置完毕。
由于水平有限,难免出错,还望指正。

Changelog:
    2006-11-06 11:11 修改最后的查询语句,因为pg_hba.conf修改了,这个语句应该做相应的修改。
    2006-11-05 09:35 修改配置pg_hba.conf后登陆数据库部分命令语句。
    2006-11-04 19:40 修改PostgreSQL验证部分配置,增加部分注释语句。
    2006-11-04 16:30 文章新鲜出炉。
阅读(7759) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~