PowerDNS (PDNS) 설치 및 설정

리눅스/DNS|2015. 1. 26. 17:34
반응형
PowerDNS 는 zone 파일 형식을 DB로 저장, 관리하여
좀더 유용하고 편리하게 사용할수 있게 해줍니다.
poweradmin 이라는 툴을 이용해 웹상에서도 쉽게 제어를 할 수 있습니다.
 
 
1. 설치
yum install pdns pdns-backend-mysql pdns-recursor
 
CentOS 6.4 에서 yum 으로 pdns 설치가 되지 않을경우 아래 url 참고하여 설치 진행을 해보시기 바랍니다.
 
 
 
2. DB 생성
mysql 에 root 관리자로 로그인하여 DB를 생성 합니다.
 
mysql -u root -p
Enter password: (패스워드 입력)
 
mysql> create database powerdns;
mysql> grant all privileges on powerdns.* to powerdns@localhost identified by 'sysdocu@pass';
mysql> flush privileges;
mysql> exit
 
아래 박스의 내용으로 pdns.sql 파일을 만들고 생성했던 DB에 insert 시킵니다.
 
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(10000) 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 -p powerdns < pdns.sql
Enter password: (패스워드 입력)
 
 
3. 설정
아래 설정파일에서 기본으로 주석되어있는 행을 해제하고, 내용을 추가합니다.
 
vi /etc/pdns/pdns.conf
 
// 기본으로 주석 되어있는 부분입니다. 주석을 해제하여 해당 값으로 변경합니다.
allow-recursion=127.0.0.1,192.168.10.2    // 로컬호스트와 서버IP (recursion 을 원하지 않을경우 삭제하면 됩니다.)
config-dir=/etc/pdns

daemon=yes
disable-axfr=yes
guardian=yes
launch=gmysql
local-port=53
module-dir=/usr/lib/pdns    // 64bit 의 경우 /usr/lib64/pdns
recursor=168.126.63.1
setgid=pdns

setuid=pdns
socket-dir=/var/run

version-string=powerdns
 
// 추가로 입력해줘야 할 부분입니다.
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=sysdocu@pass
gmysql-dbname=powerdns

gmysql-port=3306
gmysql-socket=/tmp/mysql.sock    // 소켓 위치를 확실하게 적어야 합니다.
 
  
4. 구동
/etc/init.d/pdns start
여기까지만 해도 DNS를 DB화 하여 관리가 가능합니다.
하지만 레코드 등록시 MySQL 에 로그인해서 일일이 타이핑하기 싫으신분은
웹사이트에서 관리할 수 있는 PowerADMIN 을 설치하시면 됩니다.
 
 
* 참고
PowerDNS 기본 쿼리입니다.
 
mysql> use powerdns;
mysql> INSERT INTO `domains` VALUES (1,'sysdocu.com','',NULL,'MASTER',1,NULL);
mysql> INSERT INTO `records` VALUES (1,1,'sysdocu.com','MX','mail.sysdocu.com',300,10,1267002606);
mysql> INSERT INTO `records` VALUES (2,1,'mail.sysdocu.com','A','192.168.10.1',300,0,1267002606);
mysql> INSERT INTO `records` VALUES (3,1,'sysdocu.com','NS','ns.sysdocu.com',300,0,1267002606);
mysql> INSERT INTO `records` VALUES (4,1,'sysdocu.com','A','192.168.10.1',300,0,1267002606);
mysql> INSERT INTO `records` VALUES (5,1,'sysdocu.com','SOA','ns.sysdocu.com dnsmaster@sysdocu.com 2011120800 10800 3600 432000 300',300,0,1267002606);
mysql> INSERT INTO `records` VALUES (6,1,'www.sysdocu.com','A','192.168.10.1',300,0,1267002606);
mysql> INSERT INTO `records` VALUES (7,1,'www1.sysdocu.com','A','192.168.10.1',300,0,1267002606);
mysql> INSERT INTO `records` VALUES (8,1,'www2.sysdocu.com','A','192.168.10.1',300,0,1267002606);
mysql> INSERT INTO `records` VALUES (9,1,'ns.sysdocu.com','A','192.168.10.1',300,0,1267002606);
 
 
5. PowerADMIN 설치
웹에서 관리할 수 있도록 별도의 툴을 설치할 수 있습니다.
 
# tar xvzf poweradmin-2.1.6.tgz
# mv poweradmin-2.1.6 /home/sysdocu/public_html/poweradmin
# cd /home/sysdocu/public_html/poweradmin/inc
# cp -arp config-me.inc.php config.inc.php
 
웹브라우저에서 PowerADMIN 의 설치 디렉토리로 접속합니다.
 
설치를 진행하시면 됩니다.
 
 
[네임서버 위임시 참고사항]
PDNS 네임서버에서 특정 서브도메인(예: dns2.sysdocu.com)을 다른 네임서버로 위임을 해주었다면 PDNS 네임서버에서는 BIND와 다르게 해당 레코드가 질의되지 않습니다.
그렇지만 코넷이나 데이콤 네임서버 등 외부 네임서버에서는 정상 질의가 되므로, 서버나 PC 내부의 네임서버 설정을 PDNS 네임서버로 등록하여 사용할 일이 없다면 PDNS 네임서버 구성을 그대로 진행해도 됩니다.
(국내 문서는 거의 희박하고, 구글에서도 아직 해결책을 찾지 못했습니다. 해결책을 찾을 경우 바로 업데이트 하도록 하겠습니다.)

 

반응형

댓글()