PowerDNS 설치 · 6 min read · Oct 01, 2025

Debian Lenny에서 MySQL 백엔드를 사용하는 PowerDNS 및 Poweradmin 설치하기

Debian Lenny에서 MySQL 백엔드를 사용하는 PowerDNS 및 Poweradmin 설치하기

버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요

이 문서에서는 Debian Lenny 시스템에서 PowerDNS 이름 서버( MySQL 백엔드 사용)와 PowerDNS용 Poweradmin 제어판을 설치하는 방법을 보여줍니다. PowerDNS는 고성능의 권위 있는 이름 서버로, 여기서 설명하는 설정에서는 MySQL 데이터베이스에서 DNS 레코드를 읽습니다( MyDNS와 유사), PostgreSQL과 같은 다른 백엔드도 지원됩니다. Poweradmin은 PowerDNS를 위한 웹 기반 제어판입니다.

이것이 당신에게 작동할 것이라는 보장은 하지 않습니다!

1. 사전 노트

이 예제에서는 hostname이 server1.example.com이고 IP 주소가 192.168.0.100인 Debian Lenny 호스트를 사용하고 있으며, 이 튜토리얼의 처음 6장에 따라 설정되었습니다: 완벽한 서버 - Debian Lenny (Debian 5.0) [ISPConfig 2].

이 예제에서는 PowerDNS 서버 하나만 설정할 것입니다(마스터); PowerDNS 슬레이브를 추가하는 것은 마스터에서 슬레이브로 MySQL 데이터베이스 복제를 사용하여 쉽게 수행할 수 있으므로 존 전송이 필요하지 않습니다(이것은 다시 MyDNS와 유사합니다). MySQL 데이터베이스 복제는 이 튜토리얼에 따라 설정할 수 있습니다: MySQL에서 데이터베이스 복제 설정하는 방법 (PowerDNS는 또한 기본 존 전송을 지원합니다( MySQL 복제를 사용할 수 없는 시나리오에 대해) - http://downloads.powerdns.com/documentation/html/replication.html 참조).

2. MySQL 설치하기

MySQL을 설치하기 위해 다음을 실행합니다.

aptitude install mysql-server mysql-client

MySQL root 사용자에 대한 비밀번호를 제공하라는 메시지가 표시됩니다. 이 비밀번호는 root@localhost 사용자와 [email protected]에 유효하므로 나중에 MySQL root 비밀번호를 수동으로 지정할 필요가 없습니다:

MySQL “root” 사용자에 대한 새 비밀번호: <– yourrootsqlpassword
MySQL “root” 사용자에 대한 비밀번호 반복: <– yourrootsqlpassword

MySQL이 모든 인터페이스에서 수신 대기하도록 하려면(이는 MySQL 데이터베이스 복제에 중요합니다!), localhost뿐만 아니라 /etc/mysql/my.cnf를 편집하고 bind-address = 127.0.0.1 줄의 주석을 제거합니다:

vi /etc/mysql/my.cnf

| [...] #bind-address = 127.0.0.1 [...] |

그런 다음 MySQL을 재시작합니다:

/etc/init.d/mysql restart

이제 네트워킹이 활성화되었는지 확인합니다. 다음을 실행합니다:

netstat -tap | grep mysql

출력은 다음과 같아야 합니다:

server1:~# netstat -tap | grep mysql  
tcp        0      0 *:mysql                 *:*                     LISTEN     3031/mysqld  
server1:~#

3. PowerDNS 설치하기

PowerDNS를 설치하기 위해 다음을 실행합니다:

aptitude install pdns-server pdns-backend-mysql

PowerDNS 구성은 /etc/powerdns 디렉토리에 위치합니다 - 잠시 후에 그에 대해 설명하겠습니다.

이제 MySQL에 연결합니다:

mysql -u root -p

MySQL root 비밀번호를 입력하면 MySQL 셸에 들어가게 됩니다. MySQL 셸에서 PowerDNS용 데이터베이스를 생성합니다:

CREATE DATABASE powerdns;

다음으로 PowerDNS용 데이터베이스 사용자( powerdns)를 생성합니다:

GRANT ALL ON powerdns.* TO 'power_admin'@'localhost' IDENTIFIED BY 'power_admin_password';  
GRANT ALL ON powerdns.* TO 'power_admin'@'localhost.localdomain' IDENTIFIED BY 'power_admin_password';  
FLUSH PRIVILEGES;

( power_admin_password를 원하는 비밀번호로 교체하십시오.)

이제 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)  
);
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(6) DEFAULT NULL,  
content VARCHAR(255) DEFAULT NULL,  
ttl INT DEFAULT NULL,  
prio INT DEFAULT NULL,  
change_date INT DEFAULT NULL,  
primary key(id)  
);
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  
);

… 그리고 마지막으로 MySQL 셸을 종료합니다:

quit;

이제 PowerDNS가 MySQL 백엔드를 사용하도록 구성해야 합니다:

vi /etc/powerdns/pdns.conf

pdns.conf에 launch=gmysql 줄을 추가합니다:

| [...] ################################# # launch Which backends to launch and order to query them in # # launch= launch=gmysql [...] |

그런 다음 /etc/powerdns/pdns.d/pdns.local을 열고 다음과 같이 만듭니다:

vi /etc/powerdns/pdns.d/pdns.local

| # Here comes the local changes the user made, like configuration of # the several backends that exists. gmysql-host=127.0.0.1 gmysql-user=power_admin gmysql-password=power_admin_password gmysql-dbname=powerdns |

그런 다음 pdns를 재시작합니다:

/etc/init.d/pdns restart

그게 전부입니다. PowerDNS는 이제 사용할 준비가 되었습니다. 더 많은 정보를 원하시면 문서를 참조하세요: http://downloads.powerdns.com/documentation/html/index.html

4. Poweradmin 설치하기

이제 PowerDNS를 위한 웹 기반 제어판인 Poweradmin을 설치해 보겠습니다. Poweradmin은 PHP로 작성되었으므로 웹 서버(이 예제에서는 Apache2를 사용하고 있습니다)와 PHP를 설치해야 합니다:

aptitude install apache2 libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php-pear php5-imap php5-mcrypt php5-mhash php5-ming php5-mysql php5-xmlrpc gettext

Poweradmin은 또한 다음 두 개의 PEAR 패키지가 필요합니다:

pear install DB  
pear install pear/MDB2#mysql

이제 Poweradmin의 모든 필수 요소가 설치되었으며, Poweradmin 설치를 시작할 수 있습니다(저는 /var/www의 하위 디렉토리에 설치할 것입니다 - /var/www는 Debian의 Apache 기본 웹 사이트의 문서 루트입니다; 다른 문서 루트로 vhost를 생성한 경우 경로를 조정하십시오).

https://www.poweradmin.org/trac/wiki/GettingPoweradmin으로 이동하여 최신 Poweradmin 패키지를 다운로드합니다. 예를 들어 다음과 같이:

cd /tmp  
wget https://www.poweradmin.org/download/poweradmin-2.1.4.tgz

그런 다음 /var/www/poweradmin 디렉토리에 다음과 같이 설치합니다:

tar xvfz poweradmin-2.1.4.tgz  
mv poweradmin-2.1.4 /var/www/poweradmin  
touch /var/www/poweradmin/inc/config.inc.php  
chown -R www-data:www-data /var/www/poweradmin/

이제 브라우저를 열고 웹 기반 Poweradmin 설치 프로그램을 시작합니다 (http://server1.example.com/poweradmin/install/index.php 또는 http://192.168.0.100/poweradmin/install/index.php).

언어를 선택하세요(영어 또는 네덜란드어):

3단계로 이동 버튼을 클릭하여 진행합니다:

이제 데이터베이스 세부정보를 입력합니다. MySQL root 사용자에 대한 세부정보를 입력하는 것이 중요합니다. 이전에 생성한 powerdns MySQL 사용자가 아닙니다! Poweradmin 웹 인터페이스의 admin 사용자에 대한 비밀번호도 제공하십시오(이는 나중에 사용자가 Poweradmin에 로그인하는 데 사용할 비밀번호입니다):

다음 페이지에서 설치 프로그램이 MySQL 쿼리를 실행하라고 요청합니다. 우리는 이미 3장에서 유사한 작업을 수행했기 때문에(두 개의 GRANT 문) 우리는 설정이 완료되었습니다. 6단계로 이동을 클릭합니다:

7단계로 이동을 클릭합니다: ![](/files/477ce083-3b1b-484d-b278-bbb687471d1f.png) 설치가 이제 완료되었습니다... ![](/files/7e99ac27-89d2-41e0-be3f-597ce25af296.png) ... 그러나 보안상의 이유로 설치 디렉토리를 삭제해야 합니다:

rm -fr /var/www/poweradmin/install/


이제 http://server1.example.com/poweradmin 또는 http://192.168.0.100/poweradmin로 이동하여 admin 사용자 이름과 설치 중에 생성한 비밀번호로 로그인할 수 있습니다:

![](/files/187028cf-3e53-4d47-8327-2d7177b53329.png)

Poweradmin 웹 인터페이스는 다음과 같습니다:

![](/files/9e2931fb-0f8d-4d89-a82e-1af59cad4078.png)

존을 생성하려면 Add master zone으로 이동하여 도메인 이름(예: example.com)을 입력합니다. 해당 존에 대한 www A 레코드("웹 서버") 및 MX 레코드("메일 서버")의 IP 주소를 미리 입력할 수 있습니다. Create zone without applying records-template 체크박스를 선택하지 않으면 Poweradmin이 해당 존에 대해 자동으로 일부 NS, A(예: www) 및 MX 레코드를 생성합니다:

![](/files/e0fc75f0-c517-430c-979a-deb8d805a366.png)

그 후 List zones로 이동합니다. 이제 새 존이 거기에 표시되어야 하며, 이미 여덟 개의 레코드가 있습니다. 편집 아이콘을 클릭하여 이 여덟 개의 레코드를 확인합니다:

![](/files/cb4f069e-b061-4b46-9943-d22394a9dd8d.png)

이것들은 존을 생성할 때 Create zone without applying records-template 체크박스를 선택하지 않으면 자동으로 생성되는 레코드입니다. 이제 이들을 편집하거나 레코드를 추가 및 삭제할 수 있습니다:

![](/files/17cd6418-5205-46a2-abf5-380569ec004e.png)

물론 모든 레코드를 수동으로 하나씩 생성할 수도 있습니다 - IP 주소 필드를 비워두고 Add master zone 페이지에서 Create zone without applying records-template 체크박스를 선택하십시오:

![](/files/bcb04e27-2c8e-46cb-86f7-14fd60541a94.png)

List zones 페이지에서 새 존에 단 하나의 레코드( SOA 레코드)가 있음을 확인할 수 있습니다. 편집 아이콘을 클릭합니다...

![](/files/6362e931-6844-492c-a3c7-2b4cf235195d.png)

... 그런 다음 Add record를 클릭하여 추가 레코드를 추가합니다...

![](/files/2ba33f58-7b75-48ce-ac27-ae921e6568a0.png)

..., 예를 들어 NS 레코드...

![](/files/3e97957a-7505-4c69-b485-57bdd09f47b9.png)

... 및 A 레코드(예: mydomain.com(이름 필드는 비워두세요!) 및 www.mydomain.com)...

![](/files/5d60687b-78eb-48a3-9421-af01ea0aba7f.png)

![](/files/d857e828-1f3e-4ebc-8a2d-277243545810.png)

... 및 MX 레코드:

![](/files/9f8c0537-fa9b-4c40-826a-3fdb8683eb29.png)

PTR 레코드를 생성하려면 Add master zone 페이지로 이동하여 in-addr.arpa라는 존을 생성합니다( IP 주소 필드를 비워두고 Create zone without applying records-template 체크박스를 선택하십시오):

![](/files/47d461ae-19da-4b1f-ab23-042805b3d065.png)

IP 1.2.3.4에서 server1.example.com으로 가리키는 PTR 레코드를 생성하려면 List zones에서 레코드를 생성하고 이름 필드에 4.3.2.1을 입력합니다(이는 IP의 역순) 및 Content 필드에 server1.example.com을 입력합니다:

![](/files/bd59392f-1137-4155-9471-fcb51cc6470f.png)

레코드를 생성한 후 dig 명령으로 확인할 수 있습니다(자세한 내용은

man dig


참조), 예를 들어 다음과 같이:

dig @localhost mx example.com

server1:~# dig @localhost mx example.com

; <> DiG 9.3.4 <> @localhost mx example.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37939
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;example.com. IN MX

;; ANSWER SECTION:
example.com. 86400 IN MX 10 mail.example.com.

;; ADDITIONAL SECTION:
mail.example.com. 86400 IN A 1.2.3.4

;; Query time: 9 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jan 12 19:56:46 2009
;; MSG SIZE rcvd: 66

server1:~#


### 5. 링크

- PowerDNS: http://www.powerdns.com/  
- PowerDNS 문서: http://downloads.powerdns.com/documentation/html/index.html  
- Poweradmin: http://www.poweradmin.org/  
- Debian: http://www.debian.org/
Share: X/Twitter LinkedIn

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

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