这是一个“复制和粘贴” HowTo! 遵循本教程的最简单的方法是使用命令行客户端/ SSH客户端(如PuTTY for Windows),并简单地复制和粘贴命令(除了必须提供自己的信息,如IP地址,主机名,密码... )。 这有助于避免打字错误。
运行基于MySQL的DNS服务器:MyDNS
版本1.0
作者:Falko Timme
最后编辑:01/02/2006
在本教程中,我将介绍如何安装和配置MyDNS,MyDNS是使用MySQL数据库作为后端而不是配置文件的DNS服务器,例如Bind或djbdns 。 这具有以下优点:您可以轻松使用基于Web的前端来管理您的DNS记录。 您甚至可以编写自己的前端,例如使用PHP,与MyDNS数据库进行交互。 MyDNS只是从数据库中读取记录,当DNS记录更改或创建/编辑/删除区域时, 不必重新启动/重新加载记录! 这是一个主要的优势。
我还将展示如何设置辅助DNS服务器,但是我不会使用正常的区域传输来获取从主DNS服务器到辅助DNS服务器的记录; 相反,我将使用MySQL数据库复制 。 我将简单地将数据从主服务器复制到辅助服务器。
有多个Web前端到MyDNS。 当然,您可以使用phpMyAdmin作为MyDNS管理,也可以使用MyDNS附带的Web前端(由于缺少字段描述,因此不适用于初学者),也可以使用MyDNSConfig(由我自己编写的工具)。 我将展示如何安装它们。
总而言之,MyDNS给我一个非常好的印象,我认为未来属于使用数据库作为后端而不是配置文件的服务。
我已经使用Debian Sarge系统进行此设置。 然而,这里描述的大多数步骤也应适用于其他发行版,如Fedora,SuSE,Mandriva等。
我想先说说这不是建立这样一个系统的唯一途径。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1安装MySQL和MyDNS
然后安装MySQL:
apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin
你会被问到几个问题:
启用suExec? < - 是的 您要自动重新配置哪个Web服务器? < - apache,apache2 你要我现在重新启动apache吗? < - 是的
设置一个root MySQL密码,如下所示:
mysqladmin -u root password yourrootsqlpassword
MyDNS安装很简单。 只需按照以下步骤:
cd / tmp / wget http://mydns.bboy.net/download/mydns-1.0.0.tar.gz tar xvfz mydns-1.0.0.tar.gz cd mydns-1.0.0 / 。/配置 使 安装
现在我们必须创建MyDNS数据库(称为mydns )和MyDNS数据库用户(也称为mydns ,以mydns_password为密码):
mysql -u root -p 输入密码:
现在,在MySQL shell上,我们创建了mydns数据库和用户mydns :
创建数据库mydns; GRANT SELECT,INSERT,UPDATE,DELETE ON mydns。* TO'mydns'@'localhost'IDENTIFIED BY'mydns_password'; GRANT SELECT,INSERT,UPDATE,DELETE ON mydns。* TO'mydns'@'localhost.localdomain'Identified by'mydns_password'; FLUSH特权 放弃;
回到正常的shell,我们在mydns数据库中创建表:
mydns --create-tables | mysql -u root -p mydns 输入密码:
如果你看到这样的错误:
mydns [14287]:错误加载gid为“nobody” mydns [14287]:使用用户`nobody'的gid 65534
别担心,你可以忘记他们。
接下来,我们再向mydns数据库的soa表添加另外两个列:
mysql -u root -p 输入密码: ALTER TABLE mydns.soa ADD COLUMN活动ENUM('Y','N')NOT NULL; ALTER TABLE mydns.soa ADD INDEX(active); ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255)NOT NULL; 放弃;
使用活动列,您可以稍后启用/禁用区域, xfer列可用于区域传输(我们不需要它们,因为我们将使用MySQL数据库复制将数据获取到辅助DNS服务器,但是提及它的完整性)(如果要使用区域传输而不是数据库复制,则xfer列应包含一个或多个IP地址,以逗号分隔,这些IP地址将被允许传输区域。
现在我们通过运行以下命令创建MyDNS配置文件/etc/mydns.conf :
cd /tmp/mydns-1.0.0/ 使conf
然后我们编辑/etc/mydns.conf ,使其看起来像这样:##
## /etc/mydns.conf
## Fri Oct 21 16:36:32 2005
## For more information, see mydns.conf(5).
##
# DATABASE INFORMATION
db-host = localhost # SQL server hostname
db-user = mydns # SQL server username
db-password = mydns_password # SQL server password
database = mydns # MyDNS database name
# GENERAL OPTIONS
user = nobody # Run with the permissions of this user
group = nogroup # Run with the permissions of this group
listen = * # Listen on these addresses ('*' for all)
# CACHE OPTIONS
zone-cache-size = 1024 # Maximum number of elements stored in the zone cache
zone-cache-expire = 60 # Number of seconds after which cached zones expires
reply-cache-size = 1024 # Maximum number of elements stored in the reply cache
reply-cache-expire = 30 # Number of seconds after which cached replies expire
# ESOTERICA
log = LOG_DAEMON # Facility to use for program output (LOG_*/stdout/stderr)
pidfile = /var/run/mydns.pid # Path to PID file
timeout = 120 # Number of seconds after which queries time out
multicpu = 1 # Number of CPUs installed on your system
allow-axfr = no # Should AXFR be enabled?
allow-tcp = yes # Should TCP be enabled?
ignore-minimum = no # Ignore minimum TTL for zone?
soa-table = soa # Name of table containing SOA records
rr-table = rr # Name of table containing RR data
确保填写正确的数据库详细信息,还要注意该组。 在Debian上, 没有人的组是nogroup,它与/etc/mydns.conf (也没有人 )的默认值不同 ,所以请确保你改变了! 还设置allow-tcp为yes 。
现在我们创建MyDNS初始化脚本/etc/init.d/mydns :#! /bin/sh
#
# mydns Start the MyDNS server
#
# Author: Falko Timme .
#
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=mydns
DAEMON=/usr/local/sbin/$NAME
DESC="DNS server"
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
$DAEMON --background
echo "."
;;
stop)
echo "Stopping $DESC: $NAME."
kill -9 `pidof $NAME` &> /dev/null
;;
restart)
echo "Restarting $DESC: $NAME."
$0 stop && sleep 1
$0 start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
然后我们让它可执行并启动MyDNS:
chmod 755 /etc/init.d/mydns /etc/init.d/mydns开始
如果要在系统引导期间自动启动MyDNS,则必须创建必要的系统启动链接。 在Debian上,你这样做:
update-rc.d mydns默认值21 22
在Fedora或RedHat上,您可以运行:
chkconfig --levels 235 mydns on