서버 관리 · 7 min read · Oct 01, 2025

CentOS 7에 PowerDNS 및 Poweradmin 설치하는 방법

PowerDNS (pdns)는 C++로 작성된 오픈 소스 DNS 서버로, GPL 라이센스 하에 배포됩니다. 이는 전통적인 DNS 서버인 Bind의 좋은 대안이 되었으며, 더 나은 성능과 낮은 메모리 요구 사항으로 설계되었습니다. PowerDNS는 권한 있는 서버와 재귀 서버 두 가지 제품을 제공합니다. PowerDNS 권한 있는 서버는 일반 Bind 존 파일, MySQL, PostgreSQL, SQLite3 또는 LDAP와 같은 RDBMS를 포함한 다양한 백엔드를 통해 구성할 수 있습니다.

이 튜토리얼에서는 MariaDB 데이터베이스 서버를 백엔드로 사용하고 Poweradmin을 통해 간편한 DNS 관리를 위해 PowerDNS 권한 있는 서버를 설치하고 구성하는 방법을 보여드리겠습니다.

전제 조건

  • CentOS 7 서버
  • 루트 권한

우리가 할 일:

  1. EPEL 및 Remi 리포지토리 설치
  2. MariaDB 설치 및 구성
  3. PowerDNS 설치
  4. Poweradmin 설치
  5. Poweradmin 설치 후 작업
  6. 샘플 존 생성

1단계 - EPEL 및 Remi 리포지토리 설치

먼저 PowerDNS 설치를 위한 종속성을 설치해야 합니다. EPEL 리포지토리와 PHP 7.2 설치를 위한 REMI를 설치할 것입니다.

다음 명령어를 사용하여 EPEL 및 PHP Remi 리포지토리를 설치합니다.

yum -y install epel-release  
 yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

이 리포지토리가 시스템에 추가되면 ‘yum-utils’ 패키지를 설치합니다.

yum -y install yum-utils

그리고 다음 명령어를 사용하여 PHP 7.2 Remi 리포지토리를 활성화합니다.

yum-config-manager --enable remi-php72

2단계 - MariaDB 설치 및 구성

PowerDNS 권한 있는 서버는 MySQL/MariaDB 데이터베이스 서버를 포함한 다양한 백엔드를 지원합니다. ‘백엔드‘라는 용어는 서버가 DNS 레코드(및 일부 메타 데이터)를 포함하는 데이터 저장소를 참조하는 것입니다. 이 가이드에서는 MariaDB를 백엔드로 사용할 것입니다.

다음 yum 명령어를 사용하여 MariaDB를 설치합니다.

yum -y install mariadb mariadb-server

설치가 완료되면 MariaDB 서비스를 시작하고 부팅 시 자동으로 시작되도록 추가합니다.

systemctl start mariadb  
 systemctl enable mariadb

다음으로, ‘mysql_secure_installation’이라는 대화형 도구를 사용하여 MariaDB의 루트 비밀번호를 구성할 것입니다.

아래 명령어를 실행합니다.

mysql_secure_installation

데이터베이스 서버의 루트 비밀번호를 구성하라는 메시지가 표시됩니다. 루트 비밀번호를 설정하려면 ‘Y’를 입력하고 강력한 비밀번호를 입력합니다.

Set root password? [Y/n] Y  
New password:   
Re-enter new password: 

다른 항목에 대해서는 ‘Y’를 입력하여 예라고 답합니다.

Remove anonymous users? [Y/n] Y  
Disallow root login remotely? [Y/n] Y  
Remove test database and access to it? [Y/n] Y  
Reload privilege tables now? [Y/n] Y

결과적으로 MariaDB 데이터베이스 서버가 설치되고 인증을 위한 루트 비밀번호가 설정되었습니다.

다음으로 PowerDNS 설치를 위한 새 데이터베이스와 사용자를 생성합니다. 루트 사용자와 비밀번호로 MySQL 셸에 로그인합니다.

아래 MySQL 명령어를 실행합니다.

mysql -u root -p  
 PASSWORD

이제 ‘powerdns’라는 새 데이터베이스를 생성하고 ‘pdns’라는 새 사용자에게 비밀번호 ‘pdnspassword2018’으로 모든 데이터베이스 권한을 부여합니다.

create database powerdns;  
 grant all privileges on powerdns.* to pdns@localhost identified by 'pdnspassword2018';  
 flush privileges;

PowerDNS 데이터베이스 설치

그 후, 아래 MySQL 쿼리를 실행하여 PowerDNS 데이터베이스의 테이블 구조를 생성합니다.

use powerdns;  
   
 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                    BIGINT 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,  
   disabled              TINYINT(1) DEFAULT 0,  
   ordername             VARCHAR(255) BINARY DEFAULT NULL,  
   auth                  TINYINT(1) DEFAULT 1,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX nametype_index ON records(name,type);  
 CREATE INDEX domain_id ON records(domain_id);  
 CREATE INDEX recordorder ON records (domain_id, ordername);  
   
   
 CREATE TABLE supermasters (  
   ip                    VARCHAR(64) NOT NULL,  
   nameserver            VARCHAR(255) NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   PRIMARY KEY (ip, nameserver)  
 ) Engine=InnoDB;  
   
   
 CREATE TABLE comments (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   name                  VARCHAR(255) NOT NULL,  
   type                  VARCHAR(10) NOT NULL,  
   modified_at           INT NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   comment               VARCHAR(64000) NOT NULL,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX comments_domain_id_idx ON comments (domain_id);  
 CREATE INDEX comments_name_type_idx ON comments (name, type);  
 CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);  
   
   
 CREATE TABLE domainmetadata (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   kind                  VARCHAR(32),  
   content               TEXT,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);  
   
   
 CREATE TABLE cryptokeys (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   flags                 INT NOT NULL,  
   active                BOOL,  
   content               TEXT,  
   PRIMARY KEY(id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainidindex ON cryptokeys(domain_id);  
   
   
 CREATE TABLE tsigkeys (  
   id                    INT AUTO_INCREMENT,  
   name                  VARCHAR(255),  
   algorithm             VARCHAR(50),  
   secret                VARCHAR(255),  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);  
   
 quit;

결과적으로 MySQL/MariaDB 데이터베이스와 PowerDNS 설치를 위한 사용자가 생성되었습니다.

3단계 - PowerDNS 설치

다음 명령어를 사용하여 PowerDNS 및 필요한 모든 패키지를 설치합니다.

yum -y install pdns pdns-backend-mysql bind-utils

PowerDNS 패키지를 설치한 후 ‘/etc/pdns/‘ 디렉토리로 이동하여 vim 편집기를 사용하여 구성 파일 ‘pdns.conf’를 편집합니다.

cd /etc/pdns/  
 vim pdns.conf

기본적으로 PowerDNS는 ‘bind’를 백엔드로 사용하고 있습니다. 따라서 ‘launch=bind’ 구성 앞에 주석 ‘#’을 입력하고 아래와 같이 MySQL 백엔드 구성을 붙여넣습니다.

#launch=bind  
  
launch=gmysql  
gmysql-host=localhost  
gmysql-user=pdns  
gmysql-password=pdnspassword2018  
gmysql-dbname=powerdns

저장하고 닫습니다.

PowerDNS 설치

이제 pdns 서비스를 시작하고 부팅 시 자동으로 시작되도록 추가합니다.

systemctl start pdns  
 systemctl enable pdns

그 후, 방화벽에 DNS 서비스를 추가합니다.

firebase-cmd --add-service=dns --permanent  
 firebase-cmd --reload

방화벽 구성

PowerDNS 서비스가 실행 중인지 확인하려면 다음 명령어를 사용합니다.

netstat -tap | grep pdns  
 netstat -tulpn | grep 53  
 dig @10.9.9.10

결과적으로 pdns 서비스가 포트 53에서 실행 중이며 PowerDNS 서버로부터 응답을 받습니다.

PowerDNS 상태 확인

4단계 - Poweradmin 설치

이번 단계에서는 PowerDNS를 위한 DNS 관리 도구인 ‘Poweradmin’을 설치할 것입니다. 이는 PHP 기반의 웹 애플리케이션이므로 애플리케이션을 실행하기 위해 PHP와 웹 서버를 설치해야 합니다.

다음 명령어를 사용하여 httpd 웹 서버와 PHP 패키지를 설치합니다.

yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

설치 후, 추가 PHP Pear 패키지를 설치해야 합니다. 다음 명령어를 실행합니다.

yum -y install php-pear-DB php-pear-MDB2-Driver-mysqli

httpd 및 PHP 설치가 완료되면 httpd 서비스를 시작하고 부팅 시 자동으로 시작되도록 추가합니다.

systemctl start httpd  
 systemctl enable httpd

다음으로 ‘/var/www/html’ 디렉토리로 이동하여 poweradmin 소스 코드를 다운로드합니다.

cd /var/www/html/  
 wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

poweradmin 압축 파일을 추출하고 이름을 변경합니다.

tar xvf poweradmin-2.1.7.tgz  
 mv poweradmin-2.1.7/ poweradmin/

그 후, 방화벽에 HTTP 및 HTTPS 프로토콜을 추가합니다.

firebase-cmd --add-service={http,https} --permanent  
 firebase-cmd --reload

이제 Poweradmin 설치 후 작업을 준비합니다.

5단계 - Poweradmin 설치 후 작업

웹 브라우저를 열고 서버 IP 주소와 함께 /poweradmin/install/ 경로 URL을 입력하여 설치를 진행합니다. 제 IP는:

http://10.9.9.10/poweradmin/install/

선호하는 언어를 선택하고 ‘Go to Step 2’ 버튼을 클릭합니다.

이제 ‘Go to Step 3’ 버튼을 클릭합니다.

그리고 데이터베이스 구성 화면이 표시됩니다. 우리가 생성한 PowerDNS 데이터베이스 세부정보와 PowerDNS의 관리자 비밀번호를 입력합니다.

PowerAdmin 데이터베이스 설정

‘Go to Step 4’ 버튼을 클릭합니다.

그 후, 제한된 권한을 가진 새 사용자를 생성해야 합니다. 다음과 같이 세부정보를 입력하고 사용자, 비밀번호 등을 자신의 것으로 변경합니다.

이제 ‘Go to Step 5’ 버튼을 클릭합니다.

아래와 같은 페이지가 표시됩니다.

서버 터미널로 다시 돌아가 루트 사용자와 비밀번호로 로그인합니다. 그런 다음 페이지에 있는 MySQL 쿼리를 실행합니다.

mysql -u root -p  
 PASSWORD  
   
 GRANT SELECT, INSERT, UPDATE, DELETE  
 ON powerdns.*  
 TO 'hakase'@'localhost'  
 IDENTIFIED BY 'hakase-labs123';

MySQL 명령어

이제 웹 브라우저로 돌아가 ‘Go to Step 6’ 버튼을 클릭합니다.

아래와 같은 페이지가 표시됩니다.

설치 단계 6

설치 프로그램이 새 구성 ‘../inc/config.inc.php’를 생성할 수 없었습니다. 따라서 수동으로 생성해야 합니다.

터미널 서버로 다시 돌아가 ‘/var/www/html/poweradmin’ 디렉토리로 이동하여 새 구성 파일 ‘inc/config.inc.php’를 생성합니다.

cd /var/www/html/poweradmin  
 vim inc/config.inc.php

이제 페이지의 PHP 스크립트를 붙여넣습니다.

저장하고 닫은 후, 다시 브라우저로 돌아가 버튼을 클릭합니다.

데이터베이스 구성 파일

설치가 완료되었습니다.

선택적으로:

다른 동적 제공업체에서 사용하는 URL을 지원하려면 htaccess 파일을 복사합니다.

cd /var/www/html/poweradmin  
 cp install/htaccess.dist .htaccess

그 후, ‘install’ 디렉토리를 반드시 제거해야 합니다.

rm -rf /var/www/html/poweradmin/install

웹 브라우저로 돌아가 아래 URL을 사용하여 Poweradmin 대시보드에 로그인합니다.

http://10.9.9.10/poweradmin/

기본 사용자 ‘admin’과 비밀번호로 로그인하고 ‘Go’ 버튼을 클릭합니다.

결과적으로 Poweradmin 대시보드가 표시되며 설치가 완료됩니다.

6단계 - 샘플 존 및 DNS 레코드 생성

이 단계에서는 ‘emma.io’라는 도메인에 대한 새 DNS 존을 생성하여 PowerDNS 및 Poweradmin 설치를 테스트할 것입니다.

Poweradmin 대시보드에서 ‘Add master zone’ 메뉴를 클릭합니다.

존 이름을 도메인 이름 ‘emaa.io’로 설정하고 ‘Add zone’ 버튼을 클릭합니다.

‘List zones’ 메뉴를 클릭하여 모든 사용 가능한 존을 가져옵니다. 그리고 ‘emma.io’ 존의 ‘edit’ 버튼을 클릭합니다.

‘List zones’ 메뉴를 클릭하여 모든 사용 가능한 존을 가져옵니다. 그리고 ‘emma.io’ 존의 ‘edit’ 버튼을 클릭합니다.

존 목록

이제 ‘Add record’ 버튼을 클릭하여 도메인 ‘emma.io’에 대한 DNS 존과 DNS 레코드를 성공적으로 추가합니다.

다음으로 ‘dig’ DNS 유틸리티 명령을 사용하여 도메인 ‘emma.io’를 테스트할 것입니다.

도메인 ‘emma.io’의 네임서버 또는 ns 레코드를 확인합니다.

dig NS emma.io @10.9.9.10

dig 명령으로 존 확인

도메인 ‘emma.io’의 A DNS 레코드를 확인합니다.

dig A emma.io @10.9.9.10

dig 명령 결과

결과적으로 도메인 ‘emma.io’는 우리의 DNS 서버 ‘ns1.hakase-labs.io’에서 네임서버를 가지고 있으며, 해당 도메인 이름의 ‘A’는 서버 IP 주소 ‘10.9.9.11’와의 구성과 일치합니다.

마지막으로 CentOS 7에서 PowerDNS 및 Poweradmin의 설치와 구성이 성공적으로 완료되었습니다.

참고

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.