PowerDNS

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

DNS 솔루션인 PowerDNS를 정리 합니다.

PowerDNS 개요

PowerDNS의 테이블간 관계도

PowerDNS Architecture.png

CentOS 6.5에 설치

PowerDNS 설치

CensOS용 EPEL 설치를 합니다.

PowerDNS를 설치 합니다.

yum install pdns pdns-backend-mysql pdns-recursor


MariaDB에서 Database 등을 생성 합니다.

vi pdns.sql

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;


mysql -uroot -p mysql

create database powerdns;
grant all privileges on powerdns.* to powerdns@127.0.0.1 identified by 'demo1234';
grant all privileges on powerdns.* to powerdns@localhost identified by 'demo1234';
update user
  set select_priv = 'Y', 
      insert_priv = 'Y', 
      update_priv = 'Y', 
      delete_priv = 'Y', 
      create_priv = 'Y', 
      drop_priv = 'Y', 
      reload_priv = 'Y', 
      shutdown_priv = 'Y', 
      process_priv = 'Y', 
      file_priv = 'Y', 
      grant_priv = 'Y', 
      references_priv = 'Y', 
      index_priv = 'Y', 
      alter_priv = 'Y', 
      show_db_priv = 'Y', 
      super_priv = 'Y', 
      create_tmp_table_priv = 'Y', 
      lock_tables_priv = 'Y', 
      execute_priv = 'Y', 
      repl_slave_priv = 'Y', 
      repl_client_priv = 'Y', 
      create_view_priv = 'Y', 
      show_view_priv = 'Y', 
      create_routine_priv = 'Y', 
      alter_routine_priv = 'Y', 
      create_user_priv = 'Y'
where user = 'powerdns';
commit;
flush privileges;

select host, user, password from user where user = 'powerdns' order by user, host;
select * from user where user = 'powerdns' order by user, host;

use powerdns;
source pdns.sql
commit;
show tables;
quit;


vi /etc/pdns/pdns.conf

setuid=pdns                           #--- 이미 있음
setgid=pdns                           #--- 이미 있음
#launch=bind                         #--- 삭제

launch=gmysql
allow-recursion=127.0.0.1,192.168.70.1
config-dir=/etc/pdns
daemon=yes
disable-axfr=yes
guardian=yes
local-port=53
module-dir=/usr/lib64/pdns
recursor=127.0.0.1:5300
socket-dir=/var/run
version-string=powerdns
 
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=demo1234
gmysql-dbname=powerdns
gmysql-port=3306
#gmysql-socket=/var/lib/mysql/mysql.sock          #--- 향후 사용


vi /etc/pdns-recursor/recursor.conf

local-port = 5300
allow-from=127.0.0.0/8


setup 명령을 사용하여 방화벽 설정을 합니다.

53/tcp, 53/udp


PowerDNS를 시작 합니다.

service pdns restart

service pdns-recursor restart


PowerDNS 설치 확인

yum install bind-utils

dig @localhost www.jopenbusiness.com
nslookup www.jopenbusiness.com localhost

PowerAdmin 설치

PowerAdmin 사이트 정보


PowerAdmin 설치


PowerAdmin을 다운로드 합니다.

wget http://jaist.dl.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
tar xvfz poweradmin-2.1.7.tgz
chown -R apache:apache poweradmin-2.1.7
mv poweradmin-2.1.7 /nas/www/ossnode101/public_html/poweradmin


필요한 PHP 라이브러리를 설치 합니다.

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm             #--- EPEL 라이브러리가 없으면 설정 합니다.


yum install php-mcrypt


http://ossnode101.ossbiz.co.kr/poweradmin/install/ 로 접속하여 설치를 진행 합니다.

Step 1
File:PowerAdmin Install 001.png

Step 2
PowerAdmin Install 002.png

Step 3
PowerAdmin Install 003.png

Step 4
PowerAdmin Install 004.png

Step 5
PowerAdmin Install 005.png

Step 6
PowerAdmin Install 006.png

Step 7
PowerAdmin Install 007.png


설치 완료 후 install 폴더를 삭제 합니다.

cd /nas/www/ossnode101/public_html/poweradmin

rm -rf install


http://ossnode101.ossbiz.co.kr/poweradmin/ 사이트에 admin / demo1234 사용자로 접속하여 사용 합니다.


설치 후 config.inc.php 파일이 없다는 오류가 표시되면서 정상적으로 동작하지 않을 경우 아래와 같이 작업 합니다.

cd inc
cp config-me.inc.php config.inc.php


vi config.inc.php

$db_host = 'localhost';
$db_port = '3306';
$db_user = 'powerdns';
$db_pass = 'demo1234';
$db_name = 'powerdns';
$db_type = 'mysql';
$session_key = 'dfjdd762he';
$iface_lang = 'en_EN';

PowerDNS 설정

Database 입출력으로 관리

records 테이블의 type 종류

type 상세
NS Name Server
A 도메인에 IP 할당
MX Mail Exchange
CNAME 도메인 별칭에 IP 할당
PTR IP에 도메인 할당


DNS 설정 샘플

설치 후 config.inc.php 파일이 없다는 오류가 표시되면서 정상적으로 동작하지 않을 경우 아래와 같이 작업 합니다.

 #--- 도메인 등록
INSERT INTO domains (name, master, type, notified_serial) VALUES ('jopenbusiness.com', , 'MASTER', 1);
select id, name from domains where name = 'jopenbusiness.com';

 #--- NS : Name Server 등록
INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) 
       VALUES (1, 'jopenbusiness.com', 'NS', 'ns.jopenbusiness.com', 300, 0, 1267002606);

 #--- A : 도메인에 IP 할당
INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) 
       VALUES (1, 'mail.jopenbusiness.com', 'A', '192.168.70.1', 300, 0, 1267002606);

 #--- MX : Mail Exchange 설정
INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) 
       VALUES (1, 'jopenbusiness.com', 'MX', 'mail.jopenbusiness.com', 300, 10, 1267002606);
       
 #--- CNAME : 도메인의 별칭에 IP 할당
INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) 
       VALUES (1, 'mail01.jopenbusiness.com', 'CNAME', '192.168.70.1', 300, 0, 1267002606);
       
 #--- PTR : IP에 도메인 할당
INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) 
       VALUES (1, '192.168.70.1', 'PTR', 'mail.jopenbusiness.com', 300, 0, 1267002606);

 #--- SOA : 
INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) 
       VALUES (1, 'jopenbusiness.com', 'SOA', 'ns.jopenbusiness.com dnsmaster@jopenbusiness.com2011120800 10800 3600 432000 300', 300, 0, 1267002606);

PowerAdmin으로 관리

PowerAdmin 메뉴

Index PowerAdmin 메뉴 표시
Search zones and records Zone과 records 검색
List zones

Zone 목록 조회 및 수정
Zone에 records를 등록할 수 있습니다.

List supermasters Super Master 목록 조회
Add master zone master zone 등록
Add slave zone slave zone 등록
Add supermaster Super Master 네임서버 등록
Change password 사용자 암호 변경
User administartion

사용자 정보 관리
Permission template을 사용하여 사용자의 권한 관리

Logout 로그 아웃


DNS 등록 절차

"Add master zone" 메뉴에서 도메인 (zztest.com)을 등록 합니다.

PowerAdmin setting01.png

"List zones" 메뉴를 선택 합니다.
 zztest.com 존의 수정 화면에서 records를 등록 합니다.
PowerAdmin setting02.png

"Search zones and records" 에서 아래 정보를 확인할 수 있습니다.
PowerAdmin setting03.png

DNS 등록이 정상적으로 설정 되었는지 확인 합니다.

dig @localhost www.zztest.com

DNS Server 등록

Whois에 DNS 서버를 등록하는 방법을 설명 합니다.

"도메인 활용/부가서비스 -> 네임서버 고급설정" 메뉴를 선택 합니다.
도메인을 선택한 후 "DNS 호스트 설정" 버튼을 선택하여 DNS 호스트를 등록 합니다.
(주의, 등록한 DNS host는 등록하려는 DNS Server에 설정되어 있어야 합니다.)

File:Whois 001.png

"변경/이전 -> 등록정보/네임서버 변경" 메뉴를 선택 합니다.
도메인을 선택한 후 "네임서버 변경" 버튼을 선택하여 네임서버에 새로 등록한 DNS 호스트를 설정 합니다.

Whois 002.png

참고 문헌