未分類

架設 DNS 使用 MySQL 資料庫管理 for CentOS 5.1 – MyDNS

其實我覺得 DNS 不太好架,不太好架的原因就是說它需要有知道很多Domain Know How 再來架 DNS 才會覺得容易,再來就是修改那些Zone的文件,很多東西可能都不確定可不可以改,或不確定改了會有什麼影響,所以要完全了解整份Zone的文件需要花很長的時間來慢慢理解,也要有碰過相關問題之後才會慢慢了解DNS當中的運作模式,所以我時常在想,既然 DNS 要設定的地方又不多,儲存需求不高,那 DNS 在機房來說穩定性又是那麼地重要,為什麼沒有人把它寫成像防火牆、負載平衡器…類似這些程式跟設定都套好的機器,只要用網頁的管理介面進去設定DNS資訊就好了,穩定性比較高,突然間的斷電也不怕說DNS伺服器的硬碟掛掉啦,開不了機啦,這種鳥問題出現,希望有廠商會看到我的建言,開發這種東西應該會賺吧?

以下我實作的東西,是把原來DNS用檔案儲存管理DNS資訊改成用MySQL來儲存管理DNS資訊,而且只要改了SQL的資訊就會馬上生效,不需要重新啟動服務喔。

翻譯自: http://www.howtoforge.com/installing-mydns-mydnsconfig-centos-5.1

安裝 rpmforge.repo
# rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

這套 MyDNS 是結合 http+MySQL+phpmyadmin+DNS
# yum install httpd mysql-server php php-mysql php-mbstring phpmyadmin

啟動 mysqld
# chkconfig mysqld on
# service mysqld start

設定 mysql 的 root 密碼
# mysqladmin -u root password ‘password
# mysqladmin -h localhost -u root password ‘password

設定 phpmyadmin,增加 #,把不必要的註解掉
# vi /etc/httpd/conf.d/phpmyadmin.conf

#<Directory “/usr/share/phpmyadmin”>
#  Order Deny,Allow
#  Deny from all
#  Allow from 127.0.0.1
#</Directory>

Alias /phpmyadmin /usr/share/phpmyadmin
Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /mysqladmin /usr/share/phpmyadmin

由 cookie 改成 http
# vi /usr/share/phpmyadmin/config.inc.php
$cfg[‘Servers’][$i][‘auth_type’] = ‘http‘;

啟動 httpd
# chkconfig httpd on
# service httpd start

登入 mysql 建立 database,新增管理使用者,記得 mysql 的 root 密碼是剛才設定的 password,可自訂,但是新建立的 mydns table 裡面增加的一組帳號/密碼是 mydns/mydnspassword,可自訂,但跟 mysql 的 root 的密碼無關,是另外一組帳號/密碼。
# mysql -u root -p
Enter password: ← 輸入 password

mysql> CREATE DATABASE mydns;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.* TO ‘mydns‘@’localhost’ IDENTIFIED BY ‘mydnspassword‘;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.* TO ‘mydns‘@’localhost.localdomain’ IDENTIFIED BY ‘mydnspassword‘;
mysql> FLUSH PRIVILEGES;
mysql> quit;

# cd /tmp
# wget http://mesh.dl.sourceforge.net/sourceforge/mydnsconfig/MyDNSConfig-1.1.0.tar.gz
# tar xvfz MyDNSConfig-1.1.0.tar.gz
# cd MyDNSConfig-1.1.0

建立mydns網頁目錄
# mkdir /usr/share/mydnsconfig
把mydns的網頁程式內容搬到 /usr/share/mydnsconfig 裡
# cp -rf interface/* /usr/share/mydnsconfig/
建立連結到 /var/www/html/mydnsconfig,這樣網頁就能直接顯示
# ln -s /usr/share/mydnsconfig/web/ /var/www/html/mydnsconfig

把 table 資料灌到 mydns database 裡
# mysql -u root -p mydns < install/mydnsconfig.sql
Enter password: ← 輸入 password

設定 mydns 設定檔,要注意對應的 database 名稱,使用者帳號/密碼有無跟剛才建立的一致。
# vi /usr/share/mydnsconfig/lib/config.inc.php

$conf[“db_type”]        = ‘mysql’;
$conf[“db_host”]        = ‘localhost’;
$conf[“db_database”]        = ‘mydns‘;
$conf[“db_user”]        = ‘mydns‘;
$conf[“db_password”]        = ‘mydnspassword

清掉 /tmp裡的安裝檔
cd /tmp
rm -rf MyDNSConfig-1.1.0/
rm -f MyDNSConfig-1.1.0.tar.gz

安裝 mydns-mysql,mydns 與 mysql 溝通的介面
# wget http://mydns.bboy.net/download/mydns-mysql-1.1.0-1.i386.rpm
# rpm -ivh mydns-mysql-1.1.0-1.i386.rpm

一樣注意user,password,database等資訊,168.95.1.1 是中華電信的DNS,設起來之後可以 recursive 幫使用者自己本身以外的 domainname
# vi /etc/mydns.conf

db-host = localhost             # SQL server hostname
db-user = mydns                 # SQL server username
db-password = mydnspassword             # SQL server password
database = mydns                # MyDNS database name

recursive = 168.95.1.1          # Location of recursive resolver
allow-axfr = yes                # Should AXFR be enabled?
allow-tcp = yes                 # Should TCP be enabled?

啟動 mydns
# chkconfig mydns on
# /etc/init.d/mydns start

設定好一開機就能啟動 mydns
# cd /etc/rc.d/rc3.d
# mv S52mydns S99mydns
# cd /etc/rc.d/rc4.d
# mv S52mydns S99mydns
# cd /etc/rc.d/rc5.d
# mv S52mydns S99mydns

管理者介面就是透過網頁 http://<your_ip_address>/mydnsconfig/

ex.http://192.168.1.102/mydnsconfig/index.php,建議用 IE

帳號/密碼預設如下
Username: admin
Password: admin

4 

System → admin 可以變更密碼

5

6

DNS → Add New Zone 新增一組 Zone 資料

7

 8

Records → Add New Record 新增一筆DNS紀錄

9

 10

左邊 SOA ,你會發現它幫你設好反解了! 11

這樣DNS就跑起了嗎?

沒錯 DNS 現在已經跑起來囉!

用本機DNS查看看
# dig @localhost test.vblog.tw

; <<>> DiG 9.3.3rc2 <<>> @localhost test.vblog.tw
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40934
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;test.vblog.tw.                 IN      A

;; ANSWER SECTION:
test.vblog.tw.          86400   IN      A       192.168.1.100

;; Query time: 16 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Dec 19 20:22:20 2007
;; MSG SIZE  rcvd: 47

本外面呢?
# dig @localhost www.ccu.edu.tw

;; ANSWER SECTION:
www.ccu.edu.tw.         3600    IN      CNAME   hero1.ccu.edu.tw.
hero1.ccu.edu.tw.       3600    IN      A       140.123.5.5

也一樣OK ^^

查外面,因為我們剛剛有設了中華電信的DNS 168.95.1.1,如果本機找不到資訊會自動幫你到外面找給你,DNS 中的 recursive 的意思就是這種狀況。 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *