상단

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

 
 
 

PowerDNS 개요


 

PowerDNS의 테이블간 관계도

 

[700px|PowerDNS Architecture.png](File:PowerDNS Architecture.png.md)

 

CentOS 6.5에 설치


 

PowerDNS 설치


 

[CensOS용 EPEL 설치](CentOS.md#EPEL .EC.84.A4.EC.B9.98.md)를 합니다.

 

PowerDNS를 설치 합니다.

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | yum install pdns pdns-backend-mysql pdns-recursor
 
|}

 
 
 

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

 

vi pdns.sql

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | 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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | 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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | 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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | local-port = 5300
allow-from=127.0.0.0/8
 
|}

 
 
 

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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | 53/tcp, 53/udp |}

 
 
 

PowerDNS를 시작 합니다.

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | service pdns restart

 

service pdns-recursor restart

 

|}

 
 
 

PowerDNS 설치 확인

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | yum install bind-utils

 

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

 

|}

 

PowerAdmin 설치


 

'''PowerAdmin 사이트 정보'''

 
 
 
 
 

'''PowerAdmin 설치'''

 
 
 

PowerAdmin을 다운로드 합니다.

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | 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 라이브러리를 설치 합니다.

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | 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/](http://ossnode101.ossbiz.co.kr/poweradmin/install/) 로 접속하여 설치를 진행 합니다.

Step 1
[File:PowerAdmin Install 001.png](File:PowerAdmin Install 001.png.md)

 

Step 2
[700px|PowerAdmin Install 002.png](File:PowerAdmin Install 002.png.md)

 

Step 3
[700px|PowerAdmin Install 003.png](File:PowerAdmin Install 003.png.md)

 

Step 4
[700px|PowerAdmin Install 004.png](File:PowerAdmin Install 004.png.md)

 

Step 5
[700px|PowerAdmin Install 005.png](File:PowerAdmin Install 005.png.md)

 

Step 6
[700px|PowerAdmin Install 006.png](File:PowerAdmin Install 006.png.md)

 

Step 7
[700px|PowerAdmin Install 007.png](File:PowerAdmin Install 007.png.md)

 


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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | cd /nas/www/ossnode101/public_html/poweradmin

 

rm -rf install

 

|}

 
 
 

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

 
 
 

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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | cd inc
cp config-me.inc.php config.inc.php

 

|}

 
 
 

vi config.inc.php

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | $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 종류'''

 

{| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" 
|- | style="text-align: center; background-color: rgb(148, 138, 84);" | '''type'''

| style="text-align: center; background-color: rgb(148, 138, 84);" | '''상세''' 
|- | style="text-align: center;" | NS

Name Server
style="text-align: center;"
도메인에 IP 할당
-
style="text-align: center;"
Mail Exchange
-
style="text-align: center;"
도메인 별칭에 IP 할당
-
style="text-align: center;"
IP에 도메인 할당
}
 
 
 

'''DNS 설정 샘플'''

 

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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" |  #--- 도메인 등록
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 메뉴'''

 

{| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" 
|- | style="text-align: center; background-color: rgb(148, 138, 84);" | Index

PowerAdmin 메뉴 표시
style="text-align: center; background-color: rgb(148, 138, 84);"
Zone과 records 검색
-
style="text-align: center; background-color: rgb(148, 138, 84);"
Zone 목록 조회 및 수정
Zone에 records를 등록할 수 있습니다.
 

|- 
| style="text-align: center; background-color: rgb(148, 138, 84);" | List supermasters

Super Master 목록 조회
style="text-align: center; background-color: rgb(148, 138, 84);"
master zone 등록
-
style="text-align: center; background-color: rgb(148, 138, 84);"
slave zone 등록
-
style="text-align: center; background-color: rgb(148, 138, 84);"
Super Master 네임서버 등록
-
style="text-align: center; background-color: rgb(148, 138, 84);"
사용자 암호 변경
-
style="text-align: center; background-color: rgb(148, 138, 84);"
사용자 정보 관리
Permission template을 사용하여 사용자의 권한 관리
 

|- 
| style="text-align: center; background-color: rgb(148, 138, 84);" | Logout 
| 로그 아웃 |}

 
 
 

'''DNS 등록 절차'''

 

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

 

[700px|PowerAdmin setting01.png](File:PowerAdmin setting01.png.md)

 

"List zones" 메뉴를 선택 합니다.
 zztest.com 존의 수정 화면에서 records를 등록 합니다.
[700px|PowerAdmin setting02.png](File:PowerAdmin setting02.png.md)

 

"Search zones and records" 에서 아래 정보를 확인할 수 있습니다.
[700px|PowerAdmin setting03.png](File:PowerAdmin setting03.png.md)

 

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

 

{| cellspacing="1" cellpadding="1" style="color: rgb(0, 0, 0); font-family: sans-serif; line-height: 19.0499992370605px; width: 853px;" 
|- | style="background-color: rgb(241, 241, 241);" | dig @localhost www.zztest.com

 

|}

 

DNS Server 등록


 

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

 

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

 

[File:Whois 001.png](File:Whois 001.png.md)

 

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

 

[700px|Whois 002.png](File:Whois 002.png.md)

 

참고 문헌


  • [Network](Network.md)
  • [DNS](DNS.md)
  • [http://www.jopenbusiness.com/mediawiki/index.php/CentOS#DNS_.EC.84.9C.EB.B2.84_.EA.B5.AC.EC.B6.95 DNS 서버 구축] : bind를 사용한 [DNS](DNS.md) 서버 구축
분류: [Network](분류_Network.md)
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :