이 문서는 powerdns / MySQL / web으로 DNS를 구성하는 방법을 제공합니다. Web으로 domain name 관리할 수 있어서 관리자의 수고가 줄어듭니다.
Overview
목표 구성
- 내부 망에서 사용하는 도메인과 공인 도메인 혼용 지원
- 이를 위해
- DHCP 서버 dns 설정에 내부 (private) dns 서버 추가 (primary dns: 첫 번째 dns)
- 고정 IP를 사용하는 PC의 경우 dns 서버 추가 (primary dns: 첫 번째 dns)
적용 솔루션 (powerdns)
PDNS는 PowerDNS BV사에서 만든 네임서버 입니다. 도메인 관리를 database를 통해 도메인 관리를 하기 때문에 대량의 domain 운영이 가능하고 캐쉬 잘못에 의한 오류 가능성이 없습니다.
MySQL 설치 (PostgreSQL 도 지원)
powerdns는 MySQL과 PostgreSQL 그리고 SQLite를 지원합니다. 이 문서는 MySQL database을 고려합니다.
PDNS 설치 전 MySQL을 설치합니다.
Database 구성 (MySQL)
- powerdns database 생성
- powerdns database 사용자 생성
- powerdns database 사용자에게 powerdns database 엑세스 권한 부여
$ mysql -uroot -p mysql > create database powerdns; mysql > GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password'; mysql > FLUSH PRIVILEGES;
PDNS 설치
# yum -y install pdns pdns-backend-mysql
- Database table 생성이 안되었다면 "/usr/share/doc/pdns-backend-mysql/README.Debian"을 참조하여 수동으로 table 생성
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';
- 설정 적용을 위해 httpd 서비스 재기동
$ service httpd restart
Web을 통해 PowerAdmin 설정
- 브라우져를 통해 http://<IP> 접속 (예: http://192.168.0.3)
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> 접속
- User name: admin
- Password: Passw0rd
master zone 추가
Zone (domain)을 추가한다.
reverse zone (PTR) 추가 (옵션)
Problem with Record (PTR)은 IP를 기준으로 domain name을 추적할 때 사용되는 기록이다.
- 등록할 domain의 network (subnet)에 해당하는 zone 생성
- 예) 192.168.0.0/24 네트웍 이라면 → 0.168.192.in-addr.arpa
- 예) 10.0.0.0/8 네트웍 이라면 → 10.in-addr.arpa
도메인 등록
Step 1) list zone >> 원하는 zone의 연필 모양 icon 클릭
Step 2) 추가할 도메인 이름과 IP 주소, 그리고 추가 정보 설정
- IP 주소에 해당하는 reverse DNS zone을 구성했다면, Add also reverse record 선택 → 자동으로 reverse DNS (PTR) zone에 추가됨
Step 3) 등록 결과 메시지
Step 4) 등록 결과 확인 (찾기)
Troubleshooting
Apple 장치에서 외부 주소 얻을 수 없는 경우
구성 후 Apple 장치 (Mac, iOS)에서 정상동작 하지 않을 수 있다. Apple 장치에서 외부 도메인 (예: google.com) 주소를 얻어오지 못하는 현상이 발생할 수 있다. 이 문제는 Recusor 구성을 통해 문제를 해소할 수 있다.
Step 1) recursor 설치
$ yum install dns pdns-recursor
Step 2) pdns 설정 변경
- recursor 서비스 추가 (recursor=127.0.0.1:5678)
launch+=gmysql # gmysql parameters gmysql-host=localhost gmysql-port= gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=curvc1004 #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 서비스 재시작