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;
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)
) Engine=InnoDB;
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
(10)
DEFAULT
NULL
,
content
VARCHAR
(255)
DEFAULT
NULL
,
ttl
INT
DEFAULT
NULL
,
prio
INT
DEFAULT
NULL
,
change_date
INT
DEFAULT
NULL
,
primary
key
(id),
CONSTRAINT
`records_ibfk_1`
FOREIGN
KEY
(`domain_id`)
REFERENCES
`domains`
(`id`)
ON
DELETE
CASCADE
)Engine=InnoDB;
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
) Engine=InnoDB;
GRANT
SELECT
ON
supermasters
TO
pdns;
GRANT
ALL
ON
domains
TO
pdns;
GRANT
ALL
ON
records
TO
pdns;
- DNSSEC
create
table
domainmetadata (
id
INT
auto_increment ,
domain_id
INT
NOT
NULL
,
kind
VARCHAR
(16),
content TEXT ,
primary
key
(id )
);
create
table
cryptokeys (
id
INT
auto_increment ,
domain_id
INT
NOT
NULL
,
flags
INT
NOT
NULL
,
active BOOL ,
content TEXT ,
primary
key
(id )
);
alter
table
records
add
ordername
VARCHAR
(255);
alter
table
records
add
auth bool ;
create
index
orderindex
on
records(ordername);
create
table
tsigkeys (
id
INT
auto_increment ,
name
VARCHAR
(255),
algorithm
VARCHAR
(255),
secret
VARCHAR
(255),
primary
key
(id )
);
create
unique
index
namealgoindex
on
tsigkeys (
name
, algorithm );
alter
table
records change
column
type type
VARCHAR
(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.conf
webserver webserver-address=0.0.0.0 webserver-password=<암호>
- Logging
# vi /etc/pdns/pdns.conf
logging-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