이 문서는 powerdns / MySQL / web으로 DNS를 구성하는 방법을 제공합니다. Web으로 domain name 관리할 수 있어서 관리자의 수고가 줄어듭니다.
PDNS는 PowerDNS BV사에서 만든 네임서버 입니다. 도메인 관리를 database를 통해 도메인 관리를 하기 때문에 대량의 domain 운영이 가능하고 캐쉬 잘못에 의한 오류 가능성이 없습니다.
powerdns는 MySQL과 PostgreSQL 그리고 SQLite를 지원합니다. 이 문서는 MySQL database을 고려합니다.
PDNS 설치 전 MySQL을 설치합니다.
$ mysql -uroot -p mysql > create database powerdns; mysql > GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password'; mysql > FLUSH PRIVILEGES; |
설치 과정에서 database 생성을 위해 미리 configuration 파일 생성
|
# yum -y install pdns pdns-backend-mysql |
pdns backend (MySQL) 연결 설정
# MySQL Configuration file launch=gmysql gmysql-host=localhost gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=password |
pdns 서비스가 자동 시작되도록 등록하고 서비스 재시작
$ chkconfig pdns on $ service pdns start |
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 |
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 |
Apache 서비스가 자동시작되도록 등록하고 재시작 한다.
$ service httpd restart $ chkconfig httpd on |
$ yum -y install php-pear-MDB2 php-pear-MDB2-Driver-mysql |
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 |
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 |
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> 접속
Zone (domain)을 추가한다.
Problem with Record (PTR)은 IP를 기준으로 domain name을 추적할 때 사용되는 기록이다.
Step 1) list zone >> 원하는 zone의 연필 모양 icon 클릭
Step 2) 추가할 도메인 이름과 IP 주소, 그리고 추가 정보 설정
Step 3) 등록 결과 메시지
Step 4) 등록 결과 확인 (찾기)
구성 후 Apple 장치 (Mac, iOS)에서 정상동작 하지 않을 수 있다. Apple 장치에서 외부 도메인 (예: google.com) 주소를 얻어오지 못하는 현상이 발생할 수 있다. 이 문제는 Recusor 구성을 통해 문제를 해소할 수 있다.
$ yum install dns pdns-recursor |
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 |
forward-zones=i.curvc.com=127.0.0.1:5678;8.8.8.8 #forward-zones=<내부 전용 도메인, 외부와 공용이라면 '.'>=<내부 도메인 서버 주소>;<외부 도메인 서버 주소> local-port=5678 serve-rfc1918=no trace=on |
pdns와 pdns-recursor 서비스 재시작