PowerDNS เซิร์ฟเวอร์ DNS ที่สามารถบริหารจัดการผ่านเว็บ PHP, MySQL

เพื่อขีวิตที่ง่ายขึ้นในการดูแล 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 เพิ่มเติม

01-error-you-have-to-install-php-mcrypt-extension

ตัวอย่างการใช้ 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!”

02-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.”

03-Step-1

 

หน้า Installation step 2 อธิบายวิธีการติดตั้ง

04-Step-2

 

หน้า Installation step 3 ใส่ข้อมูลที่ใช้เชื่อมต่อเข้าฐานข้อมูล

05-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 ใหม่ขึ้นมา

06-Step4

 

หน้า Installation step 5 เพื่อให้ Username, Password ที่ระบุไว้ใน step 4 สามารถแก้ไขข้อมูลในฐานข้อมูลได้ ต้องรันคำสั่ง SQL ตามที่แสดง

07-Step5

 

ตัวอย่างการรันคำสั่ง SQL ใน mysql>

mysql> GRANT SELECT, INSERT, UPDATE, DELETE
 ON pdns.*
 TO 'pdns'@'localhost'
 IDENTIFIED BY 'pdns1234';

 

หน้า Installation step 6 แสดงไฟล์คอนฟิกที่ต้องสร้างชื่อไฟล์ config.inc.php

08-Step6

 

สร้างไฟล์คอนฟิก 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 เสร็จสิ้นการติดตั้ง

09-Step7

 

หลังจากติดตั้ง Poweradmin เสร็จเรียบร้อย ให้ใช้คำสั่ง rm -rf ลบไดเร็คทอรี install ออก

[root@cent6 poweradmin]# rm -rf install

เปิดหน้าเว็บไปที่ 192.168.5.6/poweradmin/ อีกครั้ง

 

หน้า Login เข้าโปรแกรม Poweradmin ใส่ Username: admin แล้วใส่รหัสผ่านที่ระบุไว้ในขั้นตอน Installation step 3

12-login

 

หน้าจอของ Poweradmin

13-welcome

 

คลิ้กที่ลิ้งค์ Add master zone เพื่อเพิ่ม zone ใหม่ สำหรับการทดสอบ แนะนำให้ใส่เป็น example.com แล้วกดปุ่ม [Add zone]

21-Add-master-zone

 

หน้าจอเพิ่มเสร็จสิ้น คลิ้กที่ลิ้งค์ example.com

22-Zone-added
หน้าจอแก้ไข zone ของ example.com

23-Edit-Zone

 

ด้านล่างของหน้าจอแก้ไข ลองเพิ่ม 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 ที่เราเพิ่มบนหน้าเว็บไป แสดงว่าการติดตั้งสำเร็จ

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.