เพื่อขีวิตที่ง่ายขึ้นในการดูแล DNS Server วันนี้ขอแนะนำ PowerDNS ที่สามารถทำหน้าที่รันเป็น DNS เซิร์ฟเวอร์ได้ อีกหนึ่งทางเลือกนอกจาก BIND
แทนที่จะเก็บข้อมูลโดเมน (domain) โซน (zone) เป็นเท็กซ์ไฟล์แบบใน BIND เราสามารถคอนฟิก PowerDNS เลือกเก็บข้อมูลโดเมนไว้ในฐานข้อมูลได้ โดยรองรับทั้ง MySQL, PostgreSQL, SQLite หรือแม้กระทั่ง LDAP
แล้วเราสามารถใช้โปรแกรม PowerAdmin บริหารจัดการข้อมูลของ PowerDNS ไม่ว่าจะเป็นการเพิ่ม แก้ไข ลบข้อมูล ผ่านหน้าเว็บได้โดยง่าย
ในที่นี้จะแสดงตัวอย่างการติดตั้ง PowerDNS หรือชื่อแพ็คเกจ rpm ว่า pdns บน CentOS 6 โดยจะติดตั้ง pdns จาก EPEL repo แล้วติดตั้งโปรแกรม PowerAdmin โดยดาวน์โหลดไฟล์ zip จากเว็บของ PowerAdmin
ดูวิธีการติดตั้ง EPEL repo ได้ที่ yum แพ็คเกจบน CentOS 6 ได้มากขึ้นด้วย EPEL
yum ติดตั้งแพ็คเกจ pdns
ใช้ yum ติดตั้ง pdns
[root@cent6 ~]# yum install pdns Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile ...
Dependencies Resolved
================================================================================ Package Arch Version Repository Size ================================================================================ Installing: pdns x86_64 3.1-2.el6 epel 1.6 M Installing for dependencies: boost-program-options x86_64 1.41.0-17.el6_4 updates 106 k boost-serialization x86_64 1.41.0-17.el6_4 updates 164 k cryptopp x86_64 5.6.2-2.el6 epel 1.0 M
Transaction Summary ================================================================================ Install 4 Package(s)
Total download size: 2.9 M
Installed size: 13 M
Is this ok [y/N]: y
...
Installed: pdns.x86_64 0:3.1-2.el6
Dependency Installed: boost-program-options.x86_64 0:1.41.0-17.el6_4 boost-serialization.x86_64 0:1.41.0-17.el6_4 cryptopp.x86_64 0:5.6.2-2.el6
Complete!
เพื่อให้เก็บข้อมูลของ PowerDNS ไว้ใน MySQL ต้องติดตั้งแพ็คเกจ pdns-backend-mysql เพิ่มเติม
ใช้ yum install ติดตั้ง
[root@cent6 ~]# yum install pdns-backend-mysql Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile ...
Dependencies Resolved
================================================================================ Package Arch Version Repository Size ================================================================================ Installing: pdns-backend-mysql x86_64 3.1-2.el6 epel 26 k
Transaction Summary ================================================================================ Install 1 Package(s)
Total download size: 26 k
Installed size: 64 k
Is this ok [y/N]: y
...
Installed: pdns-backend-mysql.x86_64 0:3.1-2.el6
สร้างฐานข้อมูลของ pdns
สร้างฐานข้อมูลใน MySQL สำหรับเก็บข้อมูลของ pdns
ตัวอย่างในที่นี้จะสร้าง
Database Name : pdns
Username : pdns
Password : pdns1234
หมายเหตุ แนะนำให้เปลี่ยน user, password ในการใช้งานจริง
คำสั่ง SQL ที่ใช้สร้าง database, table
CREATE DATABASE pdns;
USE pdns
CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT DEFAULT NULL, account VARCHAR(40) DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB;
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records ( id INT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, PRIMARY KEY(id) ) Engine=InnoDB;
CREATE INDEX rec_name_index ON records(name); CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id);
CREATE TABLE supermasters ( ip VARCHAR(25) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) DEFAULT NULL ) Engine=InnoDB;
GRANT SELECT ON supermasters TO pdns IDENTIFIED BY 'pdns1234'; GRANT ALL ON domains TO pdns IDENTIFIED BY 'pdns1234'; GRANT ALL ON records TO pdns IDENTIFIED BY 'pdns1234';
แก้ไขคอนฟิกไฟล์ /etc/pdns/pdns.conf ของ pdns แก้ไข launch=gmysql แล้วระบุ Database, Username, Password ตามที่สร้างไว้
ไฟล์คอนฟิกดีฟอลต์จากการติดตั้ง
[root@cent6 ~]# cat /etc/pdns/pdns.conf setuid=pdns setgid=pdns launch=bind
แก้ไขเป็น
[root@cent6 ~]# vi /etc/pdns/pdns.conf setuid=pdns setgid=pdns
launch=gmysql
gmysql-host=localhost
gmysql-user=pdns
gmysql-password=pdns1234
gmysql-dbname=pdns
ใช้คำสั่ง service รันเซอร์วิส pdns ขึ้นมา
[root@cent6 ~]# service pdns start Starting PowerDNS authoritative nameserver: started
ติดตั้ง PowerAdmin
หมายเหตุ ในที่นี้จะทดสอบบนเครื่อง 192.168.5.6 ที่ติดตั้ง httpd, php, php-mysql ไว้อยู่แล้ว บนเครื่องเดียวกับที่รันเซอร์วิส pdns
เข้าเว็บไซต์ www.poweradmin.org เพื่อดาวน์โหลดโปรแกรม PowerAdmin เวอร์ชั่นล่าสุดตอนที่เขียนคือ Poweradmin 2.1.6
ลิ้งค์ดาวน์โหลด https://github.com/downloads/poweradmin/poweradmin/poweradmin-2.1.6.tgz
แตกไฟล์ที่ดาวน์โหลดมาไว้ใน /var/www/html/
[root@cent6 ~]# cd /var/www/html/ [root@cent6 html]# ls -l poweradmin-2.1.6.tgz -rw-r--r--. 1 root root 254258 May 3 17:36 poweradmin-2.1.6.tgz
[root@cent6 html]# tar zxvf poweradmin-2.1.6.tgz poweradmin-2.1.6/ poweradmin-2.1.6/.gitignore poweradmin-2.1.6/add_perm_templ.php poweradmin-2.1.6/add_record.php poweradmin-2.1.6/add_supermaster.php ...
[root@cent6 html]# chown -R root.root poweradmin-2.1.6 [root@cent6 html]# ln -s poweradmin-2.1.6 poweradmin
ใช้ browser เปิดหน้าเว็บไปยังพาธที่แตกไฟล์ไว้เช่น
http://192.168.5.6/poweradmin/
หากเห็นข้อความ “Error: You have to install PHP mcrypt extension!” ต้องติดตั้งแพ็คเกจ php-mcrypt เพิ่มเติม
ตัวอย่างการใช้ yum ติดตั้ง php-mcrypt
[root@cent6 ~]# yum install php-mcrypt
ต้องรีสตาร์ตเว็บเซิร์ฟเวอร์อีกครั้งเพื่อให้โมดูล php ที่ติดตั้งใหม่มีผล
[root@cent6 ~]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
ลองรีเฟรชหน้าเว็บอีกครั้ง จะเห็น error “Error: You have to create a config.inc.php!”
ต้องเข้าพาธ install ก่อน คลิ้กที่ลิ้งค์ install/ หรือไปที่ http://192.168.5.6/poweradmin/install/
หน้า Installation step 1 เลือกภาษาที่ใช้ในการติดตั้ง เลือก “I prefer to proceed in english.”
หน้า Installation step 2 อธิบายวิธีการติดตั้ง
หน้า Installation step 3 ใส่ข้อมูลที่ใช้เชื่อมต่อเข้าฐานข้อมูล
คำอธิบาย
- Username : username ที่มีสิทธิระดับ administrator ส่วนใหญ่น่าจะเป็น root
- Password : รหัสผ่านของ username ที่ใช้
- Database type : เลือก MySQL
- Hostname : ใส่ชื่อเครื่องฐานข้อมูล ถ้าเป็นเครื่องเดียวกันใส่ localhost
- DB Port : พอรต์ที่ใช้เชื่อมต่อเข้าฐานข้อมูล ถ้าเป็น MySQL ใส่ 3306
- Database : ใส่ชื่อ database ที่ใช้เก็บข้อมูลของ pdns ต้องเหมือนกับที่สร้างไว้ข้างบน
- Poweradmin administrator password : ใส่รหัสผ่านของ admin ที่ต้องการ ไว้สำหรับล็อกอินเข้าหน้าเว็บของ poweradmin หลังติดตั้งเสร็จ
หลังกรอกข้อมูลเสร็จ แล้วกดปุ่ม [Go to step 4] หน้าเว็บ install จะสร้าง table เพิ่มเติมขึ้นมาใน Database ที่ระบุไว้ โดยอัตโนมัติ
ตัวอย่างการใช้คำสั่ง SHOW TABLES เพื่อดู tables ในฐานข้อมูล
mysql> SHOW TABLES; +--------------------+ | Tables_in_pdns | +--------------------+ | domains | | perm_items | | perm_templ | | perm_templ_items | | records | | supermasters | | users | | zone_templ | | zone_templ_records | | zones | +--------------------+ 10 rows in set (0.00 sec)
mysql>
หน้า Installation step 4 ใส่ข้อมูล Username, Password สำหรับการเชื่อมต่อเข้าฐานข้อมูลของโปรแกรม Poweradmin ไม่แนะนำให้ใช้ root
ส่วน Hostmaster, Primary nameserver, Secondary nameserver จะเป็นค่าคอนฟิก SOA ดีฟอลต์ เมื่อมีการสร้าง zone หรือ domain ใหม่ขึ้นมา
หน้า Installation step 5 เพื่อให้ Username, Password ที่ระบุไว้ใน step 4 สามารถแก้ไขข้อมูลในฐานข้อมูลได้ ต้องรันคำสั่ง SQL ตามที่แสดง
ตัวอย่างการรันคำสั่ง SQL ใน mysql>
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON pdns.* TO 'pdns'@'localhost' IDENTIFIED BY 'pdns1234';
หน้า Installation step 6 แสดงไฟล์คอนฟิกที่ต้องสร้างชื่อไฟล์ config.inc.php
สร้างไฟล์คอนฟิก config.inc.php
[root@cent6 poweradmin]# vi inc/config.inc.php <?php
$db_host = 'localhost'; $db_user = 'pdns'; $db_pass = 'pdns1234'; $db_name = 'pdns'; $db_port = '3306'; $db_type = 'mysql'; $db_layer = 'MDB2';
$session_key = 'vYF]}!l7F3RQej4wggUZU!91&f&fHE_53HHlY-!N*ZmcVE';
$iface_lang = 'en_EN';
$dns_hostmaster = 'hostmaster.example.net'; $dns_ns1 = 'ns1.example.net'; $dns_ns2 = 'ns2.example.net'; ?>
หน้า Installation step 7 เสร็จสิ้นการติดตั้ง
หลังจากติดตั้ง Poweradmin เสร็จเรียบร้อย ให้ใช้คำสั่ง rm -rf ลบไดเร็คทอรี install ออก
[root@cent6 poweradmin]# rm -rf install
เปิดหน้าเว็บไปที่ 192.168.5.6/poweradmin/ อีกครั้ง
หน้า Login เข้าโปรแกรม Poweradmin ใส่ Username: admin แล้วใส่รหัสผ่านที่ระบุไว้ในขั้นตอน Installation step 3
หน้าจอของ Poweradmin
คลิ้กที่ลิ้งค์ Add master zone เพื่อเพิ่ม zone ใหม่ สำหรับการทดสอบ แนะนำให้ใส่เป็น example.com แล้วกดปุ่ม [Add zone]
หน้าจอเพิ่มเสร็จสิ้น คลิ้กที่ลิ้งค์ example.com
หน้าจอแก้ไข zone ของ example.com
ด้านล่างของหน้าจอแก้ไข ลองเพิ่ม record ดู เช่น
Name : www
Type : A
Content : 192.168.1.12
แล้วกดปุ่ม [Add record]
สำหรับการทดสอบ DNS ที่ติดตั้งใหม่ ลองใช้คำสั่ง host ตามด้วยชื่อ record ที่เพิ่มไป แล้วตามด้วย IP Address ของ DNS Server ตัวอย่างเช่น
[user1@cent6 ~]$ host www.example.com 127.0.0.1 Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: www.example.com has address 192.168.1.12
ถ้าได้ผลลัพธ์ตรงกับ record ที่เราเพิ่มบนหน้าเว็บไป แสดงว่าการติดตั้งสำเร็จ