· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
PowerDNS




PowerDNS manual


PowerDNS BV <pdns@powerdns.com>


It is a book about a Spanish guy called Manual. You should read it.
-- Dilbert



1. 동적 네임서버 PowerDNS


PowerDNS은 여러가지 백엔드를 지원하는 다양한 기능의 네임서버입니다.

백엔드는 일반 텍스트 파일이거나 그 외의 동적인 것일 수 있습니다.

적절한 예는 관계형 데이터 베이스, 로드밸런싱, 장애복구 알고리즘 등을 포함합니다.

프로그램을 작성한 회사의 이름은 PowerDNS BV이고, 네임서버의 데몬의 이름은 PDNS입니다.


1.1. PDNS의 기능과 설계


PDNS는 네임서버만을 위해 만들어 졌습니다. PDNS는 아는 도메인에 대해서만 응답합니다. 다른 도메인에 대해서는 응답하지 않습니다. PDNS-Recursor를 사용 하면 가능하나 별도의 PDNS 와는 다른 별도의 데몬으로 동시에 같은 포트로 서비스는 할수 없습니다.

PDNS는 데이터베이스를 사용해 응답하기 때문에, 믿을 수 있습니다. PDNS는 캐쉬에 의해 잘못된 응답을 하는 일은 없습니다.

PDNS의 디자인 목표는 쉬운 설정을 통한 작은 크기와 많은 수의 도메인에 대한 쿼리에도 응답할 수 있게 하는 것입니다.

다른 주 목표는 보안입니다. PDNS의 코드는 매우 짧고 검사하기 쉽습니다. 같은 방식으로 라이브러리는 버퍼오버플로우의 위험이 적은 것을 사용했습니다.

마지막으로, PDNS는 가용성과 코드의 오염문제를 위해 많은 통계를 제공합니다.


1.3. Release notes

생략합니다. 내용은 ChangeLog 입니다.


1.4. 보안


2003년 1월 8일 이후 2.9.4 이후의 버전에서는 어떤 보안 문제도 발견되지 않았습니다. 이페이지는 보안문제가 발견될때 업데이트될 것입니다. 공지는 PowerDNS의 모든 메일링리스트와 버그트래킹을 통해 이루어집니다.

2.9이전의 PowerDNS는 외부의 DOS공격에 대한 취약점을 가지고 있으므로, 2.9.4 이후의 버전으로 업그레이드 하시기 바랍니다.

보안문제에 대해 알려주실 것이 있으면 <powerdns@powerdns.com> 와 <ahu@ds9a.nl>로 메일을 보내주시기 바랍니다. 우리는 Rain Forest Puppy Full Disclosure Policy (RFPolicy) v2.0를 지키고 있습니다. 당신도 같이 하기를 바랍니다.

PowerDNS는 GPL을 따르고 있음을 기억하시기 바랍니다. PowerDNS는 어떤 보증도 하지 않습니다. 이 라이센스는 배포되는 프로그램에도 포함되어 있으며 이 문서에도 포함되어 있습니다. (Appendix E)


1.5. Acknowledgements


PowerDNS는 아래의 사람/기관 에게 많은 도움을 받았습니다 :

  • Dave Aaldering

  • Wichert Akkerman

  • Antony Antony

  • Mike Benoit (NetNation Communication Inc.)

  • Peter van Dijk

  • Koos van den Hout

  • Andre Koopal

  • Eric Veldhuyzen

  • Paul Wouters

  • Thomas Wouters

  • IETF Namedroppers mailinglist

Thanks!

(these people don't share the blame for any errors or mistakes in powerdns - those are all ours)


2. Installing on Unix


2.9 이상의 버전은 소스나 패키지를 통한 설치를 합니다. 예전 버전은 바이너리 인스톨러를 사용했습니다.


2.1. 이 부분에서 일어날 수 있는 문제


이 부분에서 에러가 발생할 수 있습니다. 일반적인 문제는 다음과 같은것들 입니다.:

공유라이브러리의 로딩에러 : libstdc++.so.x: cannot open shared object file: No such file or directory

이런 에러들은 PDNS 배포본과 당신의 시스템이 맞지 않을 경우에 발생합니다. 당신의 OS에 맞는 정적(static) PDNS 배포본을 설치하고 다시 시도해 보십시오. 만약 시도할 수 없다면 <pdns@powerdns.com>로 연락하시기 바랍니다.


2.2. 테스트


설치가 끝나고 백엔드 설정을 하기 전에 기본적인 테스트를 하는 것이 좋습니다. 테스트를 위해 PowerDNS는 example.com 에 대해 설정한 바인드백엔드(bindbackend)를 가지고 있습니다. pdns.conf에 다음의 두 줄을 추가 합니다:
           launch=bind
           bind-example-zones
이 설정은 powerdns를 바인드백엔드로 실행시키고 example에 대해 응답하게 합니다.

테스트를 위해 PDNS를 SysV init.d 디렉토리에서 모니터 모드로 시작합니다 : /etc/init.d/pdns monitor 모니터 모드에서, pdns프로세스는 포어그라운드(foreground)로 동작하며 모든 상황을 출력합니다. 만약 모든것이 제대로 동작한다면, 다음과 같이 example.com 도메인에 대한 쿼리를 시도합니다:
           host www.example.com 127.0.0.1

www.example.com의 IP는 1.2.3.4로 나옵니다. host 명령은 보통 dnsutils 패키지에 들어있습니다. 그 외의 명령으로 dig www.example.com A @127.0.0.1 또는 nslookup www.example.com 127.0.0.1 가 있습니다.

  • example.com SOA record

  • example.com NS record pointing to ns1.example.com

  • example.com NS record pointing to ns2.example.com

  • example.com MX record pointing to mail.example.com

  • example.com MX record pointing to mail1.example.com

  • mail.example.com A record pointing to 4.3.2.1

  • mail1.example.com A record pointing to 5.4.3.2

  • ns1.example.com A record pointing to 4.3.2.1

  • ns2.example.com A record pointing to 5.4.3.2

  • host-0 to host-9999.example.com A record pointing to 2.3.4.5

테스트가 성공했다면 QUIT명령으로 모니터 모드를 끝내십시오. SHOW * 명령으로 내부 수치를 확인할 수 있습니다. 문제 해결에 관한 내용은 다음 섹션을 보시기 바랍니다.


2.2.1. 일반적 에러들


이 지점에서 에러가 발생할 수 있습니다. 일반적인 에러는 다음과 같은 것들입니다:

binding to UDP socket: Address already in use

이 에러는 다른 네임서버가 이미 53번 포트를 사용하고 있다는 뜻입니다. 현재 구동중인 네임서버가 있다면 중지시키십시오. 그것이 어렵다면 다른 포트로 PDNS를 구동할 수도 있습니다. pdns.conf에 local-port=5300를 추가하고 다시 시도해 보십시오. 하지만, 대부분의 DNS클라이언트는 53번을 기준으로 동작합니다.

binding to UDP socket: Permission denied

53번 포트의 사용은 수퍼유저만 가능합니다. 수퍼유저가 아니라면 PDNS를 다른 포트로 구동해야 합니다. pdns.conf에 local-port=5300를 추가하고 다시 시도해 보십시오. 하지만, 대부분의 DNS클라이언트는 53번을 기준으로 동작합니다.

Unable to launch, no backends configured for querying

pdns.conf에 launch=bind 항목을 추가 하십시오.

Multiple IP addresses on your server, PDNS sending out answers on the wrong one, Massive amounts of 'recvfrom gave error, ignoring: Connection refused'

한 컴퓨터에서 여러개의 IP주소를 사용중이라면, UNIX는 패킷을 받은 인터페이스가 아닌 다른 인터페이스로 응답을 보내는 경우가 있습니다. 이런 경우에는 local-address를 쉼표(,)로 지정된 특정 IP주소로 지정해서 사용합니다. 두번째 에러는 IP주소와 ICMP에러에 대한 응답에 반응하지 않는 경우에 발생합니다.


2.3. 유닉스에서 PDNS의 가동


PDNS는 보통 SysV-style init.d 스크립트로 제어됩니다. init.d 스크립트는 보통 /etc/init.d 나 /etc/rc.d/init.d 에 있습니다.

사용할 수 있는 커맨드는 다음과 같습니다:

monitor

모니터는 데몬을 보는 특별한 방법입니다. PDNS데몬을 포그라운드로 실행해서 로그를 출력하고, 시작시에 일어나는 문제가 무엇인지 알 수 있게 도와줍니다. 또한, 로(raw) 콘트롤 소켓을 사용할 수 있습니다. 데몬과 외부의 모든 통신이 이 소켓을 사용합니다. 하지만, 컨트롤 콘솔은 공식적으로 제공되는 것은 아닙니다. 다음의 명령들이 사용가능합니다 : QUIT, SHOW *, SHOW 변수이름, RPING.

start

PDNS를 백그라운드에서 시작합니다. 데이터베이스 연결같은 것에 시간이 걸려서 데몬을 실행하기까지 지체될 수도 있습니다. status 명령으로 쿼리가 성공했는지 확인할 수 있습니다. 여러번 start 명령을 내리더라도 실행중인 PDNS프로세스가 있다면 추가로 실행되지는 않습니다.

restart

PDNS가 동작중이라면 재시작을, 그렇지 않다면 시작합니다.

status

PDNS 상태를 봅니니다. 프로그램이 시작되었는지 확인할 수 있습니다. status는 주 PDNS 프로세스의 PID를 알려줍니다.

stop

PDNS를 정지시킵니다. 하지만 정지 되었는지 확인하지는 않습니다. 정지되었는지 확인하려면 status 명령을 사용하십시오.

dump

PDNS데몬의 상황을 보여주는 수치를 출력해 줍니다. show명령을 통해 하나씩 확인하는 것도 가능합니다.

show 변수

dump명령에서 제공되는 것과 같은 수치를 지정된 하나만 출력해 줍니다.

mrtg

퍼포먼스 모니터링에 관한 것은 Chapter 6을 보십시오.

3. Installing on Microsoft Windows


주의 PowerDNS는 1.99.12 버전부터 윈도우를 지원하지만, 최근이고 아직 베타상태입니다.
신뢰성을 위해 유닉스 버전을 이용하는것을 추천합니다. 더불어 ODBC백엔드는 마스터/슬레이브를 지원하지 않습니다. 마스터/슬레이브 지원은 조만간 이루어질 것입니다.

1.99.12부터 PowerDNS는 윈도우 프로그램으로 동작합니다. PDNS는 NT service로 동작가능하고 모든 ODBC드라이버를 사용할 수 있습니다.

PowerDNS를 설치하기 위한 사양은 다음과 같습니다:

  • 윈도우NT(서비스팩 2.5이상 설치), 2000, XP.

  • 올바른 존정보(powerdns.mdb 예제파일과 같은 형식을 제공하는)를 포함하고 있는 ODBC소스.

당신의 시스템이 요구사양을 만족한다면, http://www.powerdns.com/pdns/ 에서 인스톨러를 다운 받으십시오. 다운받은 powerdns-VERSION.exe 를 사용해서 설치를 시작합니다.

설치가 끝난 후 사용가능한 ODBC를 만들어야 합니다. ODBC 설정창을 엽니다 : 시작 -> 설정 -> 제어판 -> 관리도구 -> 데이터 원본(ODBC)

우리는 소스를 생성하는 방법에 대한 설명을 포함하고 있는 예제 존정보 데이터베이스를 사용할 것입니다.

ODBC관리자에서 시스템 DNS탭으로 갑니다.

주의 : 반드시 사용자 DNS가 아닌, 시스템 DNS를 생성해야 합니다
그렇지 않으면 ODBC백엔드는 동작하지 않습니다.

추가(D)...를 누르고 드라이버를 선택합니다.

Microsoft Access Driver를 선택하세요(*.mdb).

데이터원본이름에 PowerDNS를 넣고 설명은 비우셔도 됩니다.

선택(S)...를 눌러서 데이터데이스를 선택합니다. (예: C:\Program Files\PowerDNS\powerdns.mdb).

다 됐으면 OK를 누르세요.

더 많은 정보는 A.10을 참고 하십시오.


3.1. Microsoft Windows에서 PDNS의 설정

pdns를 설치한 디렉토리(예. C:\Program Files\PowerDNS\)안의 pdns.conf 파일안의 프로그램 파라메터를 조정할 수 있습니다.
pdns.exe --help를 실행해서 사용가능한 파라메터의 리스트를 볼 수 있습니다.

주의
기본 설정파일은 프로그램 설치시 함께 설치 됩니다.


3.2. Microsoft Windows에서의 PDNS 구동


만약 pdns를 Windows NT, 2000, XP에 설치했다면 pdns를 기본 서비스로 동작시킬 수 있습니다.

어떻게 하나 : 서비스로 갑니다(시작->설정->제어판->관리도구->서비스) 그리고 PDNS(설치시 서비스로 등록을 선택했어야 합니다)를 더블클릭해서 시작버튼을 누릅니다. 진행바가 보이고 서비스 상태가 '시작됨'으로 바뀔 것입니다.

pdns.exe --ntservice 로 시작할 수도 있습니다.

설치시 서비스로 등록하지 않았다면 커맨드라인에서 다음과 같이 입력해서 등록할 수 있습니다. pdns.exe --register-service

시작->실행..에서 콘솔로 실행할 수도 있습니다. 이 방식으로 커맨드라인 파라메터를 설정할 수도 있습니다. (커맨드 라인 옵션부분을 보십시오)

설치할때 시작메뉴에 PowerDNS를 추가해서, 메뉴에서 pdns를 실행할 수도 있습니다.


4. 데이터베이스 연결설정


이 챕터에서는 Generic MySQL 백엔드를 설정하는 법을 설명합니다. MySQL백엔드의 이름은 'gmysql'이며 사용하려면 pdns.conf에서의 설정이 필요합니다. 다음을 설정파일에 추가하십시요:
         launch=gmysql
         gmysql-host=127.0.0.1
         gmysql-user=root
         gmysql-dbname=pdnstest

이전의 bind-example-zones를 포함한 모든 설정을 제거하십시오. 바인드 모듈은 더이상 사용하지 않습니다.

주의 : 데이터베이스에 접속하지 않고 호스트네임에 대한 질의가 가능한지 확인하십시요.
닭과 달걀의 문제를 막기 위해 여기에 IP 주소를 공급하는 것을 조언합니다.

주의 : 이 설정은 분명히 'g'mysql 백엔드에 대한 설정입니다.
만약 'mysql'백엔드를 사용한다면 A.5 절을 참조하십시오.

PDNS를 모니터 모드로 시작합니다:
         # /etc/init.d/pdns monitor
         (...)
         15:31:30 PowerDNS 1.99.0 (Mar 12 2002, 15:00:28) starting up
         15:31:30 About to create 3 backend threads
         15:31:30 [gMySQLbackend] Failed to connect to database: Error: Unknown database 'pdnstest'
         15:31:30 [gMySQLbackend] Failed to connect to database: Error: Unknown database 'pdnstest'
         15:31:30 [gMySQLbackend] Failed to connect to database: Error: Unknown database 'pdnstest'

위와 같은 결과가 나올것입니다. 아직은 MySQL에서 무엇도 읽어올 수 없습니다. 이부분에서 MySQL 접속에러나 MySQL서버에러같은 위결과와 다른 에러를 볼 경우엔, 그에러를 먼저 해결한 후 진행하십시오.

이 챕터의 내용은 MySQL의 일반적인 것들입니다, 아래의 명령들을 DBA에게 물어볼 필요는 없습니다.


4.1. MySQL 설정


유효한 사용자로 MySQL에 접속해서 아래의 커맨드를 입력합니다:
 create table domains (
  id              INT auto_increment,
  name            VARCHAR(255) NOT NULL,
  master          VARCHAR(20) 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)
 )type=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(6) DEFAULT NULL,
   content         VARCHAR(255) DEFAULT NULL,
   ttl             INT DEFAULT NULL,
   prio            INT DEFAULT NULL,
   change_date     INT DEFAULT NULL,
   primary key(id)
 )type=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
 );

 GRANT SELECT ON supermasters TO pdns;
 GRANT ALL ON domains TO pdns;
 GRANT ALL ON records TO pdns;

이제 빈 데이터 베이스가 생겼습니다. PDNS를 모니터 모드로 실행하면 다음과 같이 아무 에러 없이 실행되어야 합니다:
           # /etc/init.d/pdns monitor
           (...)
           15:31:30 PowerDNS 1.99.0 (Mar 12 2002, 15:00:28) starting up
           15:31:30 About to create 3 backend threads
           15:39:55 [gMySQLbackend] MySQL connection succeeded
           15:39:55 [gMySQLbackend] MySQL connection succeeded
           15:39:55 [gMySQLbackend] MySQL connection succeeded

샘플 쿼리를 보내면 데이터가 없다는 결과가 나올 것입니다:
           $ host www.test.com 127.0.0.1
           www.test.com A record currently not present at localhost

그리고 모니터 콘솔에는 다음과 같은 메세지가 나타날 것입니다:
           Mar 12 15:41:12 We're not authoritative for 'www.test.com', sending unauth normal response

이제 데이터베이스에 레코드를 입력합니다:
           # mysql pdnstest
           mysql> INSERT INTO domains (name, type) values ('test.com', 'NATIVE');
           INSERT INTO records (domain_id, name, content, type,ttl,prio)
           VALUES (1,'test.com','localhost ahu@ds9a.nl 1','SOA',86400,NULL);
           INSERT INTO records (domain_id, name, content, type,ttl,prio)
           VALUES (1,'test.com','dns-us1.powerdns.net','NS',86400,NULL);
           INSERT INTO records (domain_id, name, content, type,ttl,prio)
           VALUES (1,'test.com','dns-eu1.powerdns.net','NS',86400,NULL);
           INSERT INTO records (domain_id, name, content, type,ttl,prio)
           VALUES (1,'www.test.com','199.198.197.196','A',120,NULL);
           INSERT INTO records (domain_id, name, content, type,ttl,prio)
           VALUES (1,'mail.test.com','195.194.193.192','A',120,NULL);
           INSERT INTO records (domain_id, name, content, type,ttl,prio)
           VALUES (1,'localhost.test.com','127.0.0.1','A',120,NULL);
           INSERT INTO records (domain_id, name, content, type,ttl,prio)
           VALUES (1,'test.com','mail.test.com','MX',120,25);

이제 www.test.com에 대한 쿼리를 다시 보내면 다음과 같은 결과가 나올것입니다:
           $ host www.test.com 127.0.0.1
           www.test.com          A       199.198.197.196
          
           $ host -v -t mx test.com 127.0.0.1
           Address: 127.0.0.1
           Aliases: localhost

           Query about test.com for record types MX
           Trying test.com ...
           Query done, 1 answer, authoritative status: no error
           test.com              120     IN      MX      25 mail.test.com
           Additional information:
           mail.test.com         120     IN      A       195.194.193.192

결과를 확인하고 싶다면, PDNS모니터 콘솔에서 SHOW * 커맨드를 사용하면 됩니다:
           % show *
           corrupt-packets=0,latency=0,packetcache-hit=2,packetcache-miss=5,packetcache-size=0,
           qsize-a=0,qsize-q=0,servfail-packets=0,tcp-answers=0,tcp-queries=0,
           timedout-packets=0,udp-answers=7,udp-queries=7,
           %

수치들은 조금씩 다를 수 있습니다. 이제 QUIT로 끝내고, start 로 PDNS를 일반 데몬으로 실행한 뒤 상태를 확인합니다.
           # /etc/init.d/pdns start
           pdns: started
           # /etc/init.d/pdns status
           pdns: 8239: Child running
           # /etc/init.d/pdns dump 
           pdns: corrupt-packets=0,latency=0,packetcache-hit=0,packetcache-miss=0,
           packetcache-size=0,qsize-a=0,qsize-q=0,servfail-packets=0,tcp-answers=0,
           tcp-queries=0,timedout-packets=0,udp-answers=0,udp-queries=0,

당신은 이제 데이터베이스로 동작하는 네임서버를 가졌습니다! 현재 사용하고 있는 다른 존파일을 변환하기 위해서는 Appendix A에 있는 zone2sql을 사용하십시오.


4.1.1. 일반적인 문제


대부분의 문제는 PDNS가 데이터베이스에 접속할 수 없을 경우에 발생합니다.

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

이 에러는 MySQL설치시 소켓의 위치가 다른경우에 발생할 수 있습니다. 소켓을 찾아서 MySQL 설정부분의 gmysql-socket 에서 소켓의 위치를 지정해 주십시요. (보통 /var/run/mysqld.sock 에 들어있습니다.)

다른 방법으로 소켓에 접속하지 않고 설정에서 gmysql-host=127.0.0.1 으로 지정하는 방법이 있습니다.

Host 'x.y.z.w' is not allowed to connect to this MySQL server

이 에러는 일반적인 MySQL에러입니다. MySQL콘솔 유틸리티로 MySQL데이터베이스에 접속해서 PDNS에 관련된 MySQL의 설정을 수정하시기 바랍니다. MySQL에 관련된 더 이상의 내용은 MySQL의 문서를 참조하시기 바랍니다.

5. Dynamic resolution using the PipeBackend

6. Logging & Monitoring PDNS performance

7. Security settings & considerations

8. Virtual hosting

9. Performance related settings

10. Migrating to PDNS

11. Recursion

12. PowerDNS resolver/recursing nameserver

13. Master/Slave operation & replication

14. Fancy records for seamless email and URL integration

15. Index of all settings

16. Index of all internal metrics

17. Supported record types and their storage

18. HOWTO & Frequently Asked Questions




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2017-08-24 01:53:11
Processing time 0.0300 sec