PowerDNS는 Authoritative Server와 Recursive Server로 구분하여 제공한다.
- Authoritative Server
Authoritative Server 는 자신이 관리하는 도메인 정보를 관리한다.
만일 DNS 질의가 들어올 경우 자신이 관리하는 도메인 정보일 경우 그 요청에 대한 응답을 제공하며, 그 외의 질의는 응답하지 않는다.
- Recursive Server
Recursive Server는 루트(.) 네임서버의 정보를 통해 각 도메인을 관리하는 DNS 서버들에게 질의하여 해당 호스트의 IP를 알아내는 기능을 한다. 이 때 질의 응답은 당연히 Recursive Server가 하는 것이 아니라 해당 영역의 DNS 서버가 주게 된다.
PowerDNS Authoritative & recursor 서버 설치
- PowerDNS Yum Repository 등록
- PowerDNS 설치
# yum install -y pdns-server# yum install -y pdns-recursor pdns-recursor-rrd --skip-broken# yum install -y mysql-server pdns-server-backend-mysql pdns-server-tools
Authoritative Server Configuration
- MySQL Database 설치
# yum install mysql mysql-server -y# mysql_install_db# service mysqld start# mysqladmin -u root password '<암호>' - PowerDNS Database 설정
- Database 및 User 생성
mysql> CREATE DATABASE powerdns character set utf8;mysql> GRANT ALL ON powerdns.* TO'poweradmin'@'localhost'IDENTIFIED BY'*******';mysql> FLUSH PRIVILEGES; - Tables 생성
USE powerdns;createtabledomains (idINTauto_increment,nameVARCHAR(255)NOTNULL,masterVARCHAR(128)DEFAULTNULL,last_checkINTDEFAULTNULL,typeVARCHAR(6)NOTNULL,notified_serialINTDEFAULTNULL,accountVARCHAR(40)DEFAULTNULL,primarykey(id)) Engine=InnoDB;CREATEUNIQUEINDEXname_indexONdomains(name);CREATETABLErecords (idINTauto_increment,domain_idINTDEFAULTNULL,nameVARCHAR(255)DEFAULTNULL,typeVARCHAR(10)DEFAULTNULL,contentVARCHAR(255)DEFAULTNULL,ttlINTDEFAULTNULL,prioINTDEFAULTNULL,change_dateINTDEFAULTNULL,primarykey(id),CONSTRAINT`records_ibfk_1`FOREIGNKEY(`domain_id`)REFERENCES`domains`(`id`)ONDELETECASCADE)Engine=InnoDB;CREATEINDEXrec_name_indexONrecords(name);CREATEINDEXnametype_indexONrecords(name,type);CREATEINDEXdomain_idONrecords(domain_id);createtablesupermasters (ipVARCHAR(25)NOTNULL,nameserverVARCHAR(255)NOTNULL,accountVARCHAR(40)DEFAULTNULL) Engine=InnoDB;GRANTSELECTONsupermastersTOpdns;GRANTALLONdomainsTOpdns;GRANTALLONrecordsTOpdns; - DNSSEC
createtabledomainmetadata (idINTauto_increment ,domain_idINTNOTNULL,kindVARCHAR(16),content TEXT ,primarykey(id ));createtablecryptokeys (idINTauto_increment ,domain_idINTNOTNULL,flagsINTNOTNULL,active BOOL ,content TEXT ,primarykey(id ));altertablerecordsaddordernameVARCHAR(255);altertablerecordsaddauth bool ;createindexorderindexonrecords(ordername);createtabletsigkeys (idINTauto_increment ,nameVARCHAR(255),algorithmVARCHAR(255),secretVARCHAR(255),primarykey(id ));createuniqueindexnamealgoindexontsigkeys (name, algorithm );altertablerecords changecolumntype typeVARCHAR(10);
- Database 및 User 생성
- PowerDNS Authoritative Server 설정 파일 수정
# vi /etc/powerdns/pdns.conf# Daemon Settings daemon=yes guardian=yes local-address=<서버 IP> # Recursor Settings lazy-recursion=yes recursor=127.0.0.1 # MySQL Backend Setting launch=gmysql gmysql-host=127.0.0.1 gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=poweradmin gmysql-password=<암호>
Recursor Server Configuration
- PowerDNS Recursor Server 설정 파일 수정
# vi /etc/pdns-recursor/recursor.conf# Daemon Settings allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, ::1/128, fe80::/10 local-address=127.0.0.1 quiet=yes
PowerDNS 서비스 등록 및 실행
# chkconfig pdns on# chkconfig pdns-recursor on# service pdns start# service pdns-recursor start |
PowerDNS 기타 설정
- Webserver
PowerDNS는 현재 서비스 상태를 볼 수 있도록 웹 UI를 제공한다. 기본적으로 127.0.0.1 주소로만 개방되어있으며 암호가 Plain Text 방식이므로 보안에 취약할 수 있으므로 가급적 사용을 자제한다.
다음은 서버의 모든 IP에 서비스를 Binding 시키는 예제이다.# vi /etc/pdns/pdns.confwebserver webserver-address=0.0.0.0 webserver-password=<암호>
- Logging
# vi /etc/pdns/pdns.conflogging-facility=0
# vi /etc/rsyslog.conf# Save PowerDNS messages also to pdns.info, pdns.warn, pdns.err local0.info -/var/log/pdns/pdns.info local0.warn -/var/log/pdns/pdns.warn local0.err /var/log/pdns/pdns.err
# service rsyslog restart - Security
PowerDNS의 보안성을 강화시키기 위해 chroot 옵션을 설정한다.chroot=/var/spool/powerdns
# mkdir /var/spool/powerdns# chown powerdns:powerdns /var/spool/powerdns
- Webserver
No comments:
Post a Comment