Description:
最近發現這樣一個不錯的概念,就是把 Bind DNS 的設定檔記錄資料轉換到資料庫存取,這個方式真的還蠻方便的,這樣做的好處是你的每一筆資料一旦設定完成後,你不需要去再 restart 重新啟動 Bind 才可生效,而且管理介面是 Web GUI 對於 Bind 的管理也更加方便了。而在 Slave DNS 這部份要如何做呢?過去我們在使用 Slave DNS 這部份是使用 Zone Transfers 方式是將 Master 上的資料送到 Slave DNS 上,而現在 MyDNS 因為是結合資料庫方式所以沒有 Zone Tranfers 可用,因此我們就可以使用 MySQL 上面的資料庫備援 ( MySQL database replication ) 功能,把 Master DNS 上的資料送到 Slave DNS 上,整個 MyDNS 的運作可以讓我們可學到 DNS 的設定以及 Database 的備援概念。
Environment :
硬體:i386 PC x2 Intel P3 500
記憶體: 256M RAM
作業系統:FreeBSD 6.1 Release
Setp 1.
安裝 APM 環境
※ 因為 MyDNS 這支程式是 PHP 所開發的,所以 Server 要安裝 Apache + PHP + MySQL 的環境,請參考小弟之前的筆記: Apache20 + Mysql41 + PHP4
Setp 2.
安裝 mydns
#cd /usr/ports/dns/mydns
#make extract
#mkdir /usr/local/www/data-dist/mydns
#cd work/mydns-1.1.0/contrib/
#cp MyDNS.pm admin.php create_domain.pl stats.php /usr/local/www/data-dist/mydns
#cd /usr/ports/dns/mydns/
#make install clean
#cd /usr/local/www/data-dist/mydns
#vi admin.php
$dbhost = "localhost";
$dbuser = "mydns";
$dbpass = "mydns_password";
$dbname = "mydns";
#mysqladmin -u root -p create mydns # 用 mysqladmin 建立 mydns 這個資料庫
#mydns --create-tables | mysql -u root -p mydns # 建立 mydns 這個資料庫的資料表
#mysql -u root -p mydns
※ 建立可以使用 mydns 這個資料庫的使用者及權限
mysql>GRANT select,insert,update,delete,create,drop ON mydns.* TO mydns@localhost IDENTIFIED BY 'mydns_password';
mysql>GRANT SELECT ON mydns.* TO mydns_user@localhost IDENTIFIED BY 'mydns_password';
mysql>FLUSH PRIVILEGES;
mysql>quit;
Setp 3.
設定 mydns 的設定檔
#cp /usr/local/etc/mydns.conf.sample /usr/local/etc/mydns.conf
#chmod 600 /usr/local/etc/mydns.conf
#vi /usr/local/etc/mydns.conf
db-host = localhost
db-user = mydns
db-password = mydns_password
database = mydns
#vi /etc/rc.conf # 加入開機自動啟動
mydns_enable="YES"
#/usr/local/etc/rc.d/mydns.sh start # 先手動啟動 mydns
開個 browse 即可開始使用 mydns
Testing...
#netstat -na |grep udp # 查看 bind udp 53 port 有無啟動
udp4 0 0 127.0.0.1.53 *.*
udp4 0 0 88.88.88.88.53 *.*
# dig @localhost wifi.ntut.idv.tw any # 進去 Browse 設定一些東西之後,就可以回到 console 下用 dig 查詢看設定是否生效
; <<>> DiG 9.3.1 <<>> @localhost wifi.ntut.idv.tw any
; (2 servers found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50178
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;wifi.ntut.idv.tw. IN ANY
;; ANSWER SECTION:
wifi.ntut.idv.tw. 1200 IN SOA wifi.ntut.idv.tw. admin.wifi.ntut.idv.tw.wifi.ntut.idv.tw. 20060 28800 7200 604800 1200
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jun 23 17:47:36 2006
;; MSG SIZE rcvd: 91
mysql> use mydns # 也可查看 mysql 內的資料是否已寫入
Database changed
mysql> show tables;
+-----------------+
| Tables_in_mydns |
+-----------------+
| rr |
| soa |
+-----------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM rr;
+----+------+---------+-------+----------------------------+------+-------+
| id | zone | name | type | data | aux | ttl |
+----+------+---------+-------+----------------------------+------+-------+
| 1 | 1 |mail | A | 88.88.88.88 | 0 | 1200 |
| 2 | 1 |mail | MX | mail.wifi.ntut.idv.tw.| 10 | 300 |
| 3 | 1 |ftp | A | 88.88.88.88 | 0 | 300 |
+----+------+------+------+-----------------------+-------+------+-------+
3 rows in set (0.01 sec)
mysql> select * FROM soa;
+----+-------------------+-------------------+-------------------------------------+------------------+-----------+-------+-------------+-------------+--------+
| id | origin | ns | mbox | serial | refresh | retry | expire | minimum | ttl |
+----+-------------------+-------------------+-------------------------------------+-------------------+---------+-------+--------------+--------------+-------+
| 1 | wifi.ntut.idv.tw. | wifi.ntut.idv.tw. | admin.wifi.ntut.idv.tw-- | 2006062301 | 28800 | 7200 | 604800 | 1200 | 300 |
+----+-------------------+-------------------+-------------------------------------+-------------------+---------+-------+--------------+--------------+--------+
1 row in set (0.01 sec)
References.
阅读(1121) | 评论(0) | 转发(0) |