통합검색

Linux

[centOS] 네임서버 구축 - PowerDNS 4.1 & Poweradmin 2.1 설치

  • 2022.12.13 10:46:38
 




일반적으로, 네임서버 구축시 bind를 많이 사용 하지만,
DBMS와 연동되어 ui로 간편하게 DNS를 관리할 수 있도록 해주는 PowerDNS를 빼놓을 수는 없다.
다만, powerDNS는 아파치와 MariaDB 데몬이 항시 실행되고 있어야 하기 때문에 서버의 자원을 bind보다는 많이 점유하므로
서버 사양을 고려하여 bind를 대체하여 사용할 수 있을지 잘 판단해 봐야 한다.


[!]YUM으로 pdns 설치[/!] 
YUM으로 간단하게 pdns를 설치할 수 있다.
 
#yum install pdns

CentOS 7.5 기준으로 yum 으로 설치되는 pdns 버전은 4.1.14다.



[!]pdns 에서 사용할 DB 생성[/!] 
pdns는 DBMS를 기반으로 하기 서버에 mariaDB 데몬이 실행되고 있어야 하며
MariaDB 에서 사용할 DB를 하나 만들어야 한다.
 
#mysql -u root -p

로 mysql에 접속한다. 
 
MariaDB [(none)] > use mysql;

Mysql에 접속 되면 위와 같이 mysql DB를 선택한다.
 
MariaDB [(mysql)] > create database pdns_db default character set utf8;

pdns_db 데이터베이스를 생성한다.
 
MariaDB [(mysql)] > flush privileges;

반영을 위해 flush privileges 한다.



[!]pdns DB에 관련 Table 생성[/!] 
앞서 생성한 DB에 pdns 관련 table를 생성한다.
pdns에서 필요로 하는 table은 16개다. 하나라도 누락되면 pdns구동이 되지 않으니 반드시 빠짐없이 생성해야 한다.
아래 sql구문을 복사-붙여넣기 하여 생성해도 된다.
 
CREATE TABLE `comments` (
`id` int(11) NOT NULL,
`domain_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`type` varchar(10) NOT NULL,
`modified_at` int(11) NOT NULL,
`account` varchar(40) NOT NULL,
`comment` text NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `cryptokeys` (
`id` int(11) NOT NULL,
`domain_id` int(11) NOT NULL,
`flags` int(11) NOT NULL,
`active` tinyint(1) DEFAULT NULL,
`content` text
) ENGINE=InnoDB;

CREATE TABLE `domainmetadata` (
`id` int(11) NOT NULL,
`domain_id` int(11) NOT NULL,
`kind` varchar(32) DEFAULT NULL,
`content` text
) ENGINE=InnoDB;

CREATE TABLE `domains` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`master` varchar(128) DEFAULT NULL,
`last_check` int(11) DEFAULT NULL,
`type` varchar(6) NOT NULL,
`notified_serial` int(11) DEFAULT NULL,
`account` varchar(40) DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE `migrations` (
`domain_id` varchar(255) NOT NULL,
`record_id` int(11) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `perm_items` (
`id` int(11) NOT NULL,
`name` varchar(64) NOT NULL,
`descr` varchar(1024) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `perm_templ` (
`id` int(11) NOT NULL,
`name` varchar(128) NOT NULL,
`descr` varchar(1024) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `perm_templ_items` (
`id` int(11) NOT NULL,
`templ_id` int(4) NOT NULL,
`perm_id` int(4) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `records` (
`id` int(11) NOT NULL,
`domain_id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`type` varchar(6) DEFAULT NULL,
`content` varchar(255) DEFAULT NULL,
`ttl` int(11) DEFAULT NULL,
`prio` int(11) DEFAULT NULL,
`change_date` int(11) DEFAULT NULL,
`disabled` char(1) NOT NULL DEFAULT '0',
`ordername` varchar(255) DEFAULT NULL,
`auth` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB;

CREATE TABLE `records_zone_templ` (
`domain_id` int(11) NOT NULL,
`record_id` int(11) NOT NULL,
`zone_templ_id` int(11) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `supermasters` (
`ip` varchar(25) NOT NULL,
`nameserver` varchar(255) NOT NULL,
`account` varchar(40) DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE `tsigkeys` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`algorithm` varchar(50) DEFAULT NULL,
`secret` varchar(255) DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(64) NOT NULL,
`password` varchar(128) NOT NULL,
`fullname` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`description` varchar(1024) NOT NULL,
`perm_templ` int(1) NOT NULL,
`active` int(1) NOT NULL,
`use_ldap` int(1) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `zones` (
`id` int(4) NOT NULL,
`domain_id` int(4) NOT NULL,
`owner` int(4) NOT NULL,
`comment` varchar(1024) DEFAULT NULL,
`zone_templ_id` int(4) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `zone_templ` (
`id` int(11) NOT NULL,
`name` varchar(128) NOT NULL,
`descr` varchar(1024) NOT NULL,
`owner` int(11) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `zone_templ_records` (
`id` int(11) NOT NULL,
`zone_templ_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`type` varchar(6) NOT NULL,
`content` varchar(255) NOT NULL,
`ttl` int(11) NOT NULL,
`prio` int(11) NOT NULL
) ENGINE=InnoDB;

ALTER TABLE `comments`
ADD PRIMARY KEY (`id`),
ADD KEY `comments_domain_id_idx` (`domain_id`),
ADD KEY `comments_name_type_idx` (`name`,`type`),
ADD KEY `comments_order_idx` (`domain_id`,`modified_at`);

ALTER TABLE `cryptokeys`
ADD PRIMARY KEY (`id`),
ADD KEY `domainidindex` (`domain_id`);

ALTER TABLE `domainmetadata`
ADD PRIMARY KEY (`id`),
ADD KEY `domainmetadata_idx` (`domain_id`,`kind`);

ALTER TABLE `domains`
ADD PRIMARY KEY (`id`);

ALTER TABLE `perm_items`
ADD PRIMARY KEY (`id`);

ALTER TABLE `perm_templ`
ADD PRIMARY KEY (`id`);

ALTER TABLE `perm_templ_items`
ADD PRIMARY KEY (`id`);

ALTER TABLE `records`
ADD PRIMARY KEY (`id`),
ADD KEY `rec_name_index` (`name`),
ADD KEY `nametype_index` (`name`,`type`),
ADD KEY `domain_id` (`domain_id`);

ALTER TABLE `tsigkeys`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `namealgoindex` (`name`,`algorithm`);

ALTER TABLE `users`
ADD PRIMARY KEY (`id`);

ALTER TABLE `zones`
ADD PRIMARY KEY (`id`);

ALTER TABLE `zone_templ`
ADD PRIMARY KEY (`id`);

ALTER TABLE `zone_templ_records`
ADD PRIMARY KEY (`id`);

ALTER TABLE `comments`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `cryptokeys`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `domainmetadata`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `domains`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `perm_items`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `perm_templ`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `perm_templ_items`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `records`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `tsigkeys`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `zones`
MODIFY `id` int(4) NOT NULL AUTO_INCREMENT;

ALTER TABLE `zone_templ`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `zone_templ_records`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;



[!]pdns 설정파일 수정[/!] 
pdns와 mariaDB 연동을 위해 pdns 설정 파일을 열어 수정한다.
 
#vi /etc/pdns/pdns.conf

vi 에디터로 설정 파일을 연다
 
launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=db 사용자 아이디
gmysql-password=비밀번호
gmysql-dbname=pdns_db

위 변수를 찾아 mariadb 사용자 정보와 DB명을 입력한다.
 
#systemctl start pdns

설정을 마쳤다면, pdns를 가동시킨다.



[!]poweradmin 설치[/!] 
pdns 설정을 위해 PHP로 개발된 pdns관리 인터페이스 poweradmin을 설치한다.
poweradmin은 PHP기 때문에 서버에 apache 데몬이 실행되고 있어야 한다.
 
#cd /home/poweradmin/public_html 설치할 홈디렉토리
#wget https://jaist.dl.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
#tar xvf poweradmin-2.1.7.tgz

위와 같이 wget으로 공식 웹사이트에서 poweradmin 압축 파일을 다운로드 하고
홈디렉토리 내에 압축을 푼다.
(wget 수행시 파일을 못찾는 경우 본 글 하단에 첨부된 파일로 시도하면 됨)
 
#cp ./inc/config-me.inc.php ./inc/config.inc.php

번들로 들어있는 config-me.inc.php 파일을 복사하여 config.inc.php 파일을 새로 만든다.
 
#vi ./inc/config.inc.php

설정파일 변경을 위해 config.inc.php를 vi에디터로 연다
 
$db_host                = 'localhost';
$db_port                = '3306';
$db_user                = 'DB계정 아이디';
$db_pass                = 'DB계정 패스워드';
$db_name              = '생성한 DB명';

위 변수를 찾아 생성한 DB 정보로 변경한다.



[!]poweradmin 실행 및 설치[/!] 
웹브라우저에서 powerdns를 접속하여 설치를 진행하면 모든 설치 과정이 완료된다.
화면상에 안내된 설명대로 진행하면 어려움 없이 설치 가능하다.











 
첨부파일1 poweradmin-2.1.7.tgz (289.5K) 73 회 다운로드