본문 바로가기
open source solution

pdns 4.1.8 with pdns recursor 4.1.9

by open_tracking 2019. 6. 10.

기존 powerdns 와 구성하는 방법이 recursor 때문에 달라져서 올립니다.

 

환경은 centos 7.6 입니다.

 

먼저 netstat -antp에서 dnsmasq 53번 포트를 먹고 있다면

Dnsmasq를 삭제해준다.

 

[root@localhost ~] yum install epel-release.noarch

[root@localhost ~] yum -y install mariadb-server mariadb

[root@localhost ~] systemctl start mariadb

[root@localhost ~] systemctl enable mariadb

[root@localhost ~] mysql_secure_installation

(루트 패스워드 설정)

 

[root@localhost ~] yum -y install pdns pdns-backend-mysql

[root@localhost ~] mysql -u root -p

MariaDB [(none)]> CREATE DATABASE powerdns;

MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY '설정할비밀번호';

MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'centos7.localdomain' IDENTIFIED BY '설정할비밀번호';

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> connect 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                    BIGINT AUTO_INCREMENT,

  domain_id             INT DEFAULT NULL,

  name                  VARCHAR(255) DEFAULT NULL,

  type                  VARCHAR(10) DEFAULT NULL,

  content               VARCHAR(64000) DEFAULT NULL,

  ttl                   INT DEFAULT NULL,

  prio                  INT DEFAULT NULL,

  change_date           INT DEFAULT NULL,

  disabled              TINYINT(1) DEFAULT 0,

  ordername             VARCHAR(255) BINARY DEFAULT NULL,

  auth                  TINYINT(1) DEFAULT 1,

  PRIMARY KEY (id)

) Engine=InnoDB;

 

CREATE INDEX nametype_index ON records(name,type);

CREATE INDEX domain_id ON records(domain_id);

CREATE INDEX recordorder ON records (domain_id, ordername);

 

 

CREATE TABLE supermasters (

  ip                    VARCHAR(64) NOT NULL,

  nameserver            VARCHAR(255) NOT NULL,

  account               VARCHAR(40) NOT NULL,

  PRIMARY KEY (ip, nameserver)

) Engine=InnoDB;

 

 

CREATE TABLE comments (

  id                    INT AUTO_INCREMENT,

  domain_id             INT NOT NULL,

  name                  VARCHAR(255) NOT NULL,

  type                  VARCHAR(10) NOT NULL,

  modified_at           INT NOT NULL,

  account               VARCHAR(40) NOT NULL,

  comment               VARCHAR(64000) NOT NULL,

  PRIMARY KEY (id)

) Engine=InnoDB;

 

CREATE INDEX comments_domain_id_idx ON comments (domain_id);

CREATE INDEX comments_name_type_idx ON comments (name, type);

CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);

 

 

CREATE TABLE domainmetadata (

  id                    INT AUTO_INCREMENT,

  domain_id             INT NOT NULL,

  kind                  VARCHAR(32),

  content               TEXT,

  PRIMARY KEY (id)

) Engine=InnoDB;

 

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

 

 

CREATE TABLE cryptokeys (

  id                    INT AUTO_INCREMENT,

  domain_id             INT NOT NULL,

  flags                 INT NOT NULL,

  active                BOOL,

  content               TEXT,

  PRIMARY KEY(id)

) Engine=InnoDB;

 

CREATE INDEX domainidindex ON cryptokeys(domain_id);

 

 

CREATE TABLE tsigkeys (

  id                    INT AUTO_INCREMENT,

  name                  VARCHAR(255),

  algorithm             VARCHAR(50),

  secret                VARCHAR(255),

  PRIMARY KEY (id)

) Engine=InnoDB;

 

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

 

MariaDB [powerdns]> exit

(mariadb를 빠져나온다.)

 

[root@localhost ~] vi /etc/pdns/pdns.conf

launch=gmysql

gmysql-host=localhost

gmysql-user=powerdns

gmysql-password=설정할비밀번호

gmysql-dbname=powerdns

[root@localhost ~] systemctl enable pdns.service

[root@localhost ~] systemctl start pdns.service

[root@localhost ~] yum install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

[root@localhost ~] yum -y install php-pear-DB php-pear-MDB2-Driver-mysql

[root@localhost ~] systemctl enable httpd.service

[root@localhost ~] systemctl start httpd.service

ps

Poweradmin 2.1.7버전 다운로드해서

/var/www/html 경로에서 압출풀기

( 다운로드 및 압축해제 과정 생략)

 

[root@localhost ~] firewall-cmd --permanent --zone=public --add-service=http

[root@localhost ~] firewall-cmd --permanent --zone=public --add-port=53/udp

[root@localhost ~] firewall-cmd --reload

웹페이지 접속하기

http://자신의IP/poweradmin-2.1.7/install/

스탭 1~2는 생략

 

 

poweradmin install 에서  step5에서 나오는

 

MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE

ON powerdns.*

TO 'pdnshope'@'localhost'

IDENTIFIED BY '설정할비밀번호';

 

이러한 항목이 나오는데 웹에서 그대로 복사해서 mysql에 붙여넣기

 

 

[root@localhost ~] vi /var/www/html/poweradmin-2.1.7/inc/config.inc.php

해당 항목 복사 붙여넣기

( 마지막에 ?> 로 닫아야하는데 현재 그림에서 안보이니 주의할 것!

php구문상 <?php로 열었으니 ?>로 닫아야함. )

/var/www/html/poweradmin-2.1.7/install  install 파일 삭제

[root@localhost ~]#  rm -rf /var/www/html/poweradmin-2.1.7/install

 

http://해당IP/poweradmin-2.1.7

로그인 ID : admin

로그인 PW : 설정한 PW

 

 

 

 

 

DNS 정보 추가 과정 ( 사진으로 설명)

위와 같이 끝난후

상단 list zones 클릭하면 아래와 같은 화면이 나옴.

아래와 같이 네모 박스에 입력 할 수 있습니다.

 

 

이렇게하면 test.hope201.com에대한 A,mx레코드 값이 입력 들어 갔습니다.

 

이제 테스트를 해보겠습니다.

[root@localhost ~]# dig test.hope201.com @192.168.137.45

 

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> test.hope201.com @192.168.137.45

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39679

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; WARNING: recursion requested but not available

 

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 1680

;; QUESTION SECTION:

;test.hope201.com.              IN      A

 

;; ANSWER SECTION:

test.hope201.com.       86400   IN      A       192.168.137.45

 

;; Query time: 0 msec

;; SERVER: 192.168.137.45#53(192.168.137.45)

;; WHEN:   6 03 17:36:40 KST 2019

;; MSG SIZE  rcvd: 61

 

위처럼 쿼리가 잘 된 것을 확인 할 수 있습니다.

 

한가지 주의사항은 TTL 값이 기본이 86400입니다.

TTL값이 길어지면 poweradmin에서 DNS를 변경하였어도 86400초만큼 시간이 다 될동안 변경사항이 적용되지 않습니다.

따라서 기본값 86400으로 주지 마시고 적당한 값을 주는것을 추천드립니다.

DNS서버가 엄청 노후되지 않은 서버가 아니라면 86400보단 600이나 1200을 추천드립니다.

 

 

 

Recursor 소개

Recursor는 없는 쿼리가 들어왔을때 지정한 IP로 쿼리를 날려서 해당 서버에 있다면 가져오게 됩니다.

 

설치

[root@localhost ~] yum install pdns-recursor

 

설정

[root@localhost ~] vi /etc/pdns-recursor/recursor.conf

local-address=0.0.0.0

local-port=53

forward-zones=test.hope201.com=192.168.137.45:5300;

forward-zones-recurse=.=8.8.8.8

 

 

( 만약에 pdns에 등록된 도메인이 여러개이면

forward-zones=test.hope201.com=192.168.137.45:5300;, 도메인=192.168.137.45:5300;

이러한 형식으로 ,(콤마)를 찍고 추가해주는 방식입니다.

 

[root@localhost ~] vi /etc/pdns/pdns.conf

local-port=5300

 

[root@localhost ~] firewall-cmd --permanent --zone=public --add-port=5300/udp

[root@localhost ~] firewall-cmd --reload

[root@localhost ~] systemctl restart pdns

[root@localhost ~] systemctl restart pdns-recursor

댓글