1.建立/package目录,用来存放源码文件,将源码文件复制到该目录。
mkdir /package
chmod 1755 /package
chmod 1755 /package
最终该目录中应该存在以下文件:
daemontools-0.76.tar.gz # daemontools源码
daemontools_errnopatch # daemontools Redhat补丁
ucspi-tcp-0.88.tar.gz # ucspi源码
ucspi-tcp_errnopatch # ucspi Redhat补丁
djbdns-1.05.tar.gz # djbdns源码
djbdns_errnopatch # djbdns Redhat补丁
vegadns-0.9.10.tgz # vegadns源码
daemontools-0.76.tar.gz
daemontools_errnopatch
ucspi-tcp-0.88.tar.gz
ucspi-tcp_errnopatch
djbdns-1.05.tar.gz
djbdns_errnopatch
vegadns-0.9.10.tgz
2.安装daemontools
cd /package
tar xvzf daemontools-0.76.tar.gz
cd admin/daemontools-0.76/src
patch < /package/daemontools_errnopatch
cd admin/daemontools-0.76
./package/install
tar xvzf daemontools-0.76.tar.gz
cd admin/daemontools-0.76/src
patch < /package/daemontools_errnopatch
cd admin/daemontools-0.76
./package/install
这时如果用 ps aux命令查看,如果可以看到如下内容,则说明daemontools已经正确安装并运行了。
root 4868 0.0 0.4 2728 1064 ? Ss 01:06 0:00 /bin/sh /command/svscanboot
root 4870 0.0 0.1 2040 340 ? S 01:06 0:00 svscan /service
root 4871 0.0 0.0 3196 240 ? S 01:06 0:00 readproctitle service errors: ………………………………..
root
root
3.安装ucspi
cd /package
tar xvzf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
patch < /package/ucspi-tcp_errnopatch
make
make setup check
tar xvzf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
patch < /package/ucspi-tcp_errnopatch
make
make setup check
如果输出如下两行,则说明安装正确无误。
./install
./instcheck
./install
./instcheck
4.安装djbdns
cd /package
tar xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
patch < /package/djbdns_errnopatch # 这里会提示一个Hunk,不用理会
make
make setup check
tar xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
patch < /package/djbdns_errnopatch
make
make setup check
如果输出如下两行,则说明安装正确无误。
./install
./instcheck
./install
./instcheck
5.创建tinydns服务
增加运行tinydns所需要的用户
/usr/sbin/useradd -s /sbin/nologin -d /dev/null tinydns
/usr/sbin/useradd -s /sbin/nologin -d /dev/null dnslog
/usr/sbin/useradd -s /sbin/nologin -d /etc/syncdns syncdns
/usr/sbin/useradd -s /sbin/nologin -d /dev/null dnscache
/usr/sbin/useradd -s /sbin/nologin -d /dev/null tinydns
/usr/sbin/useradd -s /sbin/nologin -d /dev/null dnslog
/usr/sbin/useradd -s /sbin/nologin -d /etc/syncdns syncdns
/usr/sbin/useradd -s /sbin/nologin -d /dev/null dnscache
使用tinydns-conf命令创建第一个DNS:
/usr/local/bin/tinydns-conf tinydns dnslog /etc/tinydns 192.168.153.111
该命令的格式:tinydns-conf acct logacct /etc/tinydns myip
————- ——- ———— ——
运行tinydns帐号 日志帐号 配置文件位置 本机ip地址
6.启动tinydns服务
ln -s /etc/tinydns /service
大概5秒钟以后,svscan会自动启动tinydns服务,这时可以是用 ps aux命令查看,如果看到以下内容,则说明tinydns服务已经正常运行了。
root 4868 0.0 0.4 2728 1064 ? Ss 01:06 0:00 /bin/sh /command/svscanboot
root 4870 0.0 0.1 2040 340 ? S 01:06 0:00 svscan /service
root 4871 0.0 0.0 3196 240 ? S 01:06 0:00 readproctitle service errors: …………………………………
root 6346 0.0 0.1 3044 292 ? S 01:11 0:00 supervise tinydns
tinydns 6347 0.0 0.1 4332 348 ? S 01:11 0:00 /usr/local/bin/tinydns
root 6348 0.0 0.1 1868 292 ? S 01:11 0:00 supervise log
dnslog 6349 0.0 0.1 2276 284 ? S 01:11 0:00 multilog t ./main
root
root
root
tinydns
root
dnslog
如果readproctitle service errors这一行是空的,说明一切正常。如果后边有错误信息,则需要进行排错。可以查看日志文件/etc/tinydns/log/main/current来帮助查找故障。
通常来说,大部分的故障都是因为设置了错误的文件读写权限或文件属主所导致的。
至此,我们的dns服务就已经启动了,这时可以采用/etc/tinydns/root中的命令来添加新的域名信息了。命令有add-alias ,add-childns ,add-host ,add-mx ,add-ns。
7.安装web管理界面vegadns,并创建相应的数据库和用户
vegadns是用php语言编写的,采用mysql数据库存储数据。因此,需要预先装好php,apache,mysql。我在这里不讨论如何安装他们,如果你需要如何安装的信息可以参考
http://howtoforge.net上的相关文章,有非常详细的针对各种发型版的安装步骤。以下步骤假设已经安装好apache,php,mysql,并且httpd,mysqld已经正常启动。
tar xzvf /package/vegadns-0.9.10.tgz -C /var/www/html # /var/www/html是apache的文档目录
cd /var/www/html
mv vegadns-0.9.10 vegadns # 改个友善一点的名字(可选)
cd /var/www/html
mv vegadns-0.9.10 vegadns
# 创建vegadns数据库
mysqladmin -u root create vegadns -p # 提示输入密码时,请输入mysql的root密码,不是系统root的密码!!!!
mysqladmin -u root create vegadns -p
# 创建vegadns用户,授权该用户可以操作vegadns数据库
mysql -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON vegadns.* TOvegadns@localhost IDENTIFIED BY ‘your_password'” mysql -p
mysql -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON vegadns.* TOvegadns@localhost IDENTIFIED BY ‘your_password'” mysql -p
8.配置vegadns
首先我们需要建立一系列 “private” 目录,这些目录用来存放template、config、caching和session信息。这些目录应该与web服务器的公开目录分开,例如在redhat中这些
private目录就不应该放置在/var/www/html中。下面假设我们将这些private目录放在/var/www中:
mkdir -p /var/www/vegadns_private/templates_c
mkdir /var/www/vegadns_private/configs
mkdir /var/www/vegadns_private/cache
mkdir /var/www/vegadns_private/sessions
mkdir /var/www/vegadns_private/configs
mkdir /var/www/vegadns_private/cache
mkdir /var/www/vegadns_private/sessions
将这些目录的属主设为运行web服务器的用户,在redhat中默认的用户是apache,并给这些目录设置合适的访问权限。
chown -R apache:apache /var/www/vegadns_private
chmod -R 770 vegadns_private
chmod -R 770 vegadns_private
接下来要修改vegadns的主配置文件,后边我标记了*****的表示需要修改的内容。
vi /var/www/html/vegadns/src/config.php
$private_dirs = ‘/path/to/web/server/root/vegadns_private’; # *****
// Mysql settings
$mysql_host = ‘localhost’;
$mysql_user = ‘vegadns’;
$mysql_pass = ‘password’; # *****
$mysql_db = ‘vegadns’;
$mysql_host = ‘localhost’;
$mysql_user = ‘vegadns’;
$mysql_pass = ‘password’;
$mysql_db = ‘vegadns’;
$vegadns_url = ‘http://127.0.0.1/vegadns/’;
$supportname = “Your Organization”; # *****
$supportemail = “postmaster@yourdomain.com“; # *****
$trusted_hosts = ‘127.0.0.1’; # ***** 可以访问vegadns管理界面的地址,多个地址用逗号隔开
$supportemail = “postmaster@yourdomain.com“;
$trusted_hosts = ‘127.0.0.1’;
保存并退出。
打开浏览器输入 http://192.168.153.111/vegadns将会打开Vegadns的登录界面。第一次登录的时候会显示修改帐号密码的界面,请输入相应的名字,密码,邮件地址。并保持
用户类型为”senior_admin”,用户状态为”active”。这个将作为管理员帐户,然后可以继续增加其他用户。
可以修改”Default Records”来建立新domain的模板,其中DOMAIN会自动替换为你新加的domain名称。
9.创建一个新的domain,加入你需要的所有A记录,MX记录等。(步骤略)
10.将vegadns所作的改动应用到tinydns
在完成步骤9以后,我们创建了需要的domain的所有信息,但是此时这些数据只存储在数据库中,并没有真正对tinydns的配置文件做修改,要使改动正式生效,需要对tinydns
的data文件执行make操作。vegadns提供了一个脚本来进行提交操作,update-data.sh
我们将这个脚本复制到/usr/local/sbin中,并设置正确的权限:
cp update-data.sh /usr/local/sbin/update-data.sh
chmod 750 update-data.sh
chmod 750 update-data.sh
然后我们运行这个脚本
update-data.sh
然后我们查看以下文件:
/etc/tinydns/root/data (包含了人类可读的zone信息)
/etc/tinydns/root/data.cdb (包含了一些不可读的信息)
从/etc/tinydns/root/data中我们可以确认刚刚在web界面添加的domain信息。
/etc/tinydns/root/data (包含了人类可读的zone信息)
/etc/tinydns/root/data.cdb (包含了一些不可读的信息)
从/etc/tinydns/root/data中我们可以确认刚刚在web界面添加的domain信息。
如果我们管理的dns经常有domain的变动的话,可以将update-data.sh加入到cron中,举例如下:
crontab -e
*/10 * * * * /usr/local/sbin/update-data.sh > /dev/null
11.测试
本地测试:dig @192.168.153.111 applejacks.com
远端测试
远端测试