이 문서는 powerdns / MySQL / web으로 DNS를 구성하는 방법을 제공합니다. Web으로 domain name 관리할 수 있어서 관리자의 수고가 줄어듭니다.

Overview

목표 구성

적용 솔루션 (powerdns)

PDNS는 PowerDNS BV사에서 만든 네임서버 입니다. 도메인 관리를 database를 통해 도메인 관리를 하기 때문에 대량의 domain 운영이 가능하고 캐쉬 잘못에 의한 오류 가능성이 없습니다.

MySQL 설치 (PostgreSQL 도 지원)

powerdns는 MySQL과 PostgreSQL 그리고 SQLite를 지원합니다. 이 문서는 MySQL database을 고려합니다.

PDNS 설치 전 MySQL을 설치합니다.

Database 구성 (MySQL)

$ mysql -uroot -p
mysql > create database powerdns;
mysql > GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';
mysql > FLUSH PRIVILEGES;

PDNS 설치

설치 과정에서 database 생성을 위해 미리 configuration 파일 생성

  • Database table 생성이 안되었다면 "/usr/share/doc/pdns-backend-mysql/README.Debian"을 참조하여 수동으로 table 생성


# MySQL Configuration file

launch=gmysql

gmysql-host=localhost
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=password


 

# yum -y install pdns pdns-backend-mysql


PDNS DB 구성

pdns backend (MySQL) 연결 설정

# MySQL Configuration file

launch=gmysql

gmysql-host=localhost
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=password

PDNS 서비스 재시작

pdns 서비스가 자동 시작되도록 등록하고 서비스 재시작

$ chkconfig pdns on
$ service pdns start

PDNS 서비스 검증

dig 명령 수행 결과가 다음 예와 유사한지 확인

root@ns1:~# dig @127.0.0.1

; <<>> DiG 9.9.5-3-Ubuntu <<>> @127.0.0.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27248
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;.              IN  NS

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Nov 02 18:58:20 EST 2014
;; MSG SIZE  rcvd: 29

Apple 장치 호환성


웹 서버 설치

PowerAdmin은 web 서버를 포함하지 않고 PHP로 제작된 웹 기능을 제공하기 때문에 웹서버 (Nginx, Apache, ...)를 설치해야 한다. 이 문서는 Apache를 웹 서버로 기준으로 설명한다.

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


httpd 서비스 재시작

Apache 서비스가 자동시작되도록 등록하고 재시작 한다.

$ service httpd restart
$ chkconfig httpd on

Pear 패키지 설치

$ yum -y install php-pear-MDB2 php-pear-MDB2-Driver-mysql


PowerAdmin (Web 인터페이스) 설치


powerdns의 웹  인터페이스를 제공하는 PowerAdmin을 설치한다.

다운로드 및 압축 풀기

$ cd /tmp/
$ wget https://github.com/downloads/poweradmin/poweradmin/poweradmin-2.1.6.tgz
$ tar xvfz poweradmin-2.1.6.tgz
$ mv /var/www/html /var/www/html.bak
$ mv poweradmin-2.1.6 /var/www/html
$ cd poweradmin/inc/
$ mv config-me.inc.php config.inc.php
$ chown -R www-data.www-data /var/www/html

 Database 접속 정보 설정

Modify db_pass and session_key to your own values :

$db_host                = 'localhost';
$db_port                = '3306';
$db_user                = 'powerdns';
$db_pass                = 'password';
$db_name                = 'powerdns';
$db_type                = 'mysql';
$session_key            = 'Passw0rd';



$ service httpd restart

Web을 통해 PowerAdmin 설정


Click on Install -> Choose I prefer to proceed in English -> Go to Step2 -> Go to Step3 ->

Username: powerdns
Password: password
Database Type: MySQL
Hostname: localhost
DB Port: 3306
Database: powerdns
PowerAdmin Administrator Password: Passw0rd

Go to Step4 -> This step is optional (SKIP) -> Go to Step5 -> Go to Step6 -> Go to Step7.

설치 폴더 제거

/var/www/html/install 폴더를 다른 이름으로 변경
$ mv /var/www/html/install /var/www/html/install.bak

도메인 관리

로그인

브라우져를 통해 http://<서버 IP> 접속

master zone 추가

Zone (domain)을 추가한다.

reverse zone (PTR) 추가 (옵션)

Problem with Record (PTR)은 IP를 기준으로 domain name을 추적할 때 사용되는 기록이다.

도메인 등록

Step 1) list zone >> 원하는 zone의 연필 모양 icon 클릭

Step 2) 추가할 도메인 이름과 IP 주소, 그리고 추가 정보 설정

Step 3) 등록 결과 메시지

Step 4) 등록 결과 확인 (찾기)

Troubleshooting

Apple 장치에서 외부 주소 얻을 수 없는 경우

구성 후 Apple 장치 (Mac, iOS)에서 정상동작 하지 않을 수 있다. Apple 장치에서 외부 도메인 (예: google.com) 주소를 얻어오지 못하는 현상이 발생할 수 있다. 이 문제는 Recusor 구성을 통해 문제를 해소할 수 있다.

Step 1) recursor 설치

$ yum install dns pdns-recursor

Step 2) pdns 설정 변경

launch+=gmysql


# gmysql parameters
gmysql-host=localhost
gmysql-port=
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=curvc****
#gmysql-dnssec=yes
# gmysql-socket=

recursor=127.0.0.1:5678

Step 3) recursor 설정

forward-zones=i.curvc.com=127.0.0.1:5678;8.8.8.8 #forward-zones=<내부 전용 도메인, 외부와 공용이라면 '.'>=<내부 도메인 서버 주소>;<외부 도메인 서버 주소>
local-port=5678
serve-rfc1918=no
trace=on

Step 4) 서비스 재시작

pdns와 pdns-recursor 서비스  재시작