◇ PowerDNS [공식 홈페이지]
이 솔루션은 BIND와 같은 도메인 네임 시스템(Domain Name System, DNS) 역할을 하고 있으며 호스트의 도메인 이름을 네트워크[IP] 주소로 변경하거나 또는 그 반대로 인식하게 해주는 소프트웨어를 말합니다. 예를 들어 제 블로그에 연결된 도메인 [ https://foxydog.tistory.com ] 입력하면 그 서버(PC)의 IP를 찾아갈 수 있게 해 준다는 뜻입니다.
PowerDNS는 [ PowerDNS.COM BV ] 팀에서 개발을 하고 배포를 해왔지만 현재는 [ Open-Xchange Inc ]에 합병되어 공식적으로 솔루션 판매도 이루어지고 있습니다. 하지만 걱정할 필요 없이 100% 오픈 소스 기반으로 배포되고 있으므로 개인 및 기업에서 네임서버 구축 후 운영을 해도 전혀 문제가 되지 않습니다.
◇ PowerAdmin [공식 홈페이지]
PowerDNS서버를 위한 웹 인터페이스 관리 도구입니다.
명령어가 아닌 웹 관리자에서 직접 추가 및 변경을 쉽게 할 수 있습니다.
■ [설치환경 및 준비물]
릴리즈 설치 테스트 : 2020-07-22
서버준비 | CentOS 8 리눅스 설치 서버 [포스팅 참고] |
OS Version | CentOS Linux release 8.2.2004 (Core) |
커널(Kernel) | 5.7.2-1.el8.elrepo.x86_64 (기본커널로 진행해도 무방) |
DB | MariaDB 10.5 |
WEB | Apache 2.4.X / PHP 7.4.X |
PowerDNS | PowerDNS Authoritative Server 4.3.X |
웹관리자 | PowerAdmin 2.1.7 |
※ 포스팅 제목에 테스트[TEST]라고 붙은 이유는 아직 공식 커뮤니티 사이트에서(Github 커뮤니티 사이트에서도 명확한 답변이 나오지 않는 점을 알 수 있습니다. [링크])도 제대로 된 버그 픽스나 설치되었다는 자료가 확인되지 않습니다. 미리 말씀드리자면 리눅스 CentOS 8에서 MariaDB10.X 설치된 시스템에 PowerDNS에 필요한 소프트웨어 최신 버전인 pdns-backend-mysql-4.3 정식 배포판 YUM(RPM) 패키지 설치하게 되면 DB가 강제로 오라클 [Mysql(mysql-common-8.X]로 설치가 되어 MariaDB와 충돌되는 문제가 발생을 합니다.
※ 제가 최초일지는 모르겠지만 수십 번 테스트 결과 설치할 수 있는 꼼수(?)를 발견하여 공유합니다. 일단 정상 작동까지는 확인되었으나 설치 버전을 최신으로 하다 보니 발생한 문제가 많아 어떻게 진행을 했는지 모든 설치 과정을 트러블슈팅(troubleshooting)화하여 빠짐없이 적도록 하겠습니다. 스압 주의해주시기 바랍니다.
※ VM가상 내부에서만 테스트를 해보았기 때문에 실서버에 적용을 해도 되는지에 대해서는 명확하지 않으므로 참고만 하시기 바랍니다. 추후 시간이 될 경우 실서버 테스트도 진행하려고 합니다.
※ [2020-08-04] 실서버 테스트시 검증 확인 완료
■ 진행순서
※ 진행하기전 참고!
◇ 일반적으로 MariaDB를 먼저 설치하고 PowerDNS를 설치하지만 이럴 경우 다음과 같이 충돌발생
▶ 패키지 설치시 충돌 메세지
file /usr/share/mysql/charsets/swe7.xml
from install of mysql-common-8.0.17-3.module_el8.0.0+181+899d6349.x86_64 conflicts
with file from package MariaDB-common-10.5.4-1.el8.x86_64
▶ 한글메세지
mysql-common-8.0.17-3.module_el8.0.0+181+899d6349.x86_64에서 설치되는
/usr/share/mysql/charsets/swe7.xml 파일은 MariaDB-common-10.5.4-1.el8.x86_64 패키지의 파일과 충돌합니다
◇ 그래서 순서를 PowerDNS를 먼저 설치하고 MariaDB를 설치 합니다.
STEP01 → PowerDNS Authoritative Server 4.3.X 설치하기[ 저장소 링크 ]
1-1 최신 버전을 설치하기 위해 PowerDNS저장소 등록하기(전체 한줄 명령어)
[root@localhost ~]# yum install epel-release && dnf install -y 'dnf-command(config-manager)' && dnf config-manager --set-enabled PowerTools && curl -o /etc/yum.repos.d/powerdns-auth-43.repo https://repo.powerdns.com/repo-files/centos-auth-43.repo
1-2 PowerDNS Authoritative Server 4.3.X 설치 [ 공식 홈페이지 문서 참고 ]
[root@localhost ~]# yum install pdns pdns-backend-mysql
1-3 디폴트로 설치된 오라클 [MysqlDB] 라이브러리 삭제
※ 반대로 설치한다고 해도 MariaDB와 충돌이 발생 하므로 먼저 두개의 패키지를 강제로 삭제 합니다.
◇ RPM 설치 확인
[root@localhost ~]# rpm -qa | grep mysql
pdns-backend-mysql-4.3.0-1pdns.el8.x86_64
mysql-libs-8.0.17-3.module_el8.0.0+181+899d6349.x86_64 [삭제할 패키지 확인]
mysql-common-8.0.17-3.module_el8.0.0+181+899d6349.x86_64 [삭제할 패키지 확인]
◇ 삭제 전 특정 공유 라이브러리 백업 [ libmysqlclient.so.21 나중에 필요함 ]
[root@localhost ~]# mv /usr/lib64/mysql /usr/lib64/mysql_old
[root@localhost ~]# ls -al /usr/lib64/mysql_old/
lrwxrwxrwx 1 root root 25 10월 8 2019 libmysqlclient.so.21 [파일 확인] -> libmysqlclient.so.21.1.17
-rwxr-xr-x 1 root root 7556688 10월 8 2019 libmysqlclient.so.21.1.17 [파일 확인]
◇ RPM 강제 옵션 [ --nodeps ] 이용하여 삭제
[root@localhost ~]# rpm -e --nodeps mysql-common-8.0.17-3.module_el8.0.0+181+899d6349.x86_64
[root@localhost ~]# rpm -e --nodeps mysql-libs-8.0.17-3.module_el8.0.0+181+899d6349.x86_64
STEP02 → MariaDB10.5 설치하기[ 저장소 링크 ]
2-1 설치하기 위한 저장소 추가 (생성 후 저장)
[root@localhost ~]# vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.5 CentOS repository list - created 2020-07-22 04:12 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
2-2 MariaDB10.5 패키지 설치
[root@localhost ~]# yum install MariaDB-server
2-3 활성화 및 구동
[root@localhost ~]# systemctl enable mariadb | 부팅 자동 시작 |
[root@localhost ~]# systemctl start mariadb | MariaDB 서비스 시작 |
[root@localhost ~]# ps -ef |grep mysql /usr/sbin/mariadbd |
구동 확인 |
2-4 MariaDB 기본설정 ( DB가 구동된 상태에서 진행가능 )
[root@localhost ~]# mysql_secure_installation
Enter current password for root (enter for none): | 패스워드가 없기때문에 엔터 |
Switch to unix_socket authentication [Y/n] Y | 소켓 인증 전환 설정 Y |
Change the root password? [Y/n] Y | 패스워드 변경 설정 Y |
New password: | 패스워드 입력 |
Re-enter new password: | 패스워드 재입력 |
Remove anonymous users? [Y/n] Y | 익명 사용자를 삭제 하시겠습니까? 보안을 위해 Y |
Disallow root login remotely? [Y/n] Y | DB원격 접속을 허용하지 않을 것인가? 보안을 위해 Y |
Remove test database and access to it? [Y/n] Y | TEST 데이터베이스를 제거하고 엑세스 할 것인가? 보안을 위해 Y |
Reload privilege tables now? [Y/n] | 현재 설정한 값을 적용할 것인가? Y |
Thanks for using MariaDB! | MariaDB를 사용해 주셔서 감사합니다! |
STEP03 →PowerDNS가 사용할 Database, 유저 및 테이블 생성[ 공식 문서 : MYSQL 구성 예제 ]
◇ [DB 접속]
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.5.4-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
◇ [데이터베이스 생성]
MariaDB [(none)]> create database pdns;
Query OK, 1 row affected (0.001 sec)
◇ [pdns 유저 권한 추가]
MariaDB [(none)]> GRANT ALL ON pdns.* TO 'pdns'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.002 sec)
[예시 : GRANT ALL ON 데이터베이스 이름.* TO '유저 ID'@'localhost' IDENTIFIED BY '패스워드'; ]
◇ [pdns 유저 SOA권한 추가]
MariaDB [(none)]> GRANT ALL ON pdns.* TO 'pdns'@'testdns' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.002 sec)
◇ [적용]
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
◇ [여기서 부터는 PowerDNS 사용할 테이블 생성]
MariaDB [(none)]> use pdns;
Database changed
MariaDB [pdns]> 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;
Query OK, 0 rows affected (0.006 sec)
MariaDB [pdns]> CREATE UNIQUE INDEX name_index ON domains(name);
Query OK, 0 rows affected (0.004 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> 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;
Query OK, 0 rows affected (0.006 sec)
MariaDB [pdns]> CREATE INDEX nametype_index ON records(name,type);
Query OK, 0 rows affected (0.004 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> CREATE INDEX domain_id ON records(domain_id);
Query OK, 0 rows affected (0.005 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> CREATE INDEX recordorder ON records (domain_id, ordername);
Query OK, 0 rows affected (0.006 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;
Query OK, 0 rows affected (0.006 sec)
MariaDB [pdns]> 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;
Query OK, 0 rows affected (0.005 sec)
MariaDB [pdns]> CREATE INDEX comments_domain_id_idx ON comments (domain_id);
Query OK, 0 rows affected (0.005 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> CREATE INDEX comments_name_type_idx ON comments (name, type);
Query OK, 0 rows affected (0.006 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
Query OK, 0 rows affected (0.006 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;
Query OK, 0 rows affected (0.007 sec)
MariaDB [pdns]> CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
Query OK, 0 rows affected (0.005 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> 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;
Query OK, 0 rows affected (0.005 sec)
MariaDB [pdns]> CREATE INDEX domainidindex ON cryptokeys(domain_id);
Query OK, 0 rows affected (0.005 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [pdns]> CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB;
Query OK, 0 rows affected (0.006 sec)
MariaDB [pdns]> CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Query OK, 0 rows affected (0.005 sec)
Records: 0 Duplicates: 0 Warnings: 0
◇ [테이블 정상 생성 확인]
MariaDB [pdns]> show tables;
+----------------+
| Tables_in_pdns |
+----------------+
| comments |
| cryptokeys |
| domainmetadata |
| domains |
| records |
| supermasters |
| tsigkeys |
+----------------+
7 rows in set (0.001 sec)
◇ [종료]
MariaDB [pdns]> quit
Bye
STEP04 → PowerDNS(pdns.conf) 파일 설정 [추가 후 저장]
[root@localhost ~]# vi /etc/pdns/pdns.conf
268 #################################
269 # launch Which backends to launch and order to query them in
270 #
271 # launch=\nlaunch=
272 [아래와 같이 추가]
273 launch=gmysql
274
275 gmysql-host=localhost
276 gmysql-user=pdns
277 gmysql-password=test123
278 gmysql-dbname=pdns
STEP05 (중요) → PowerDNS 활성화 및 서비스 시작
5-1 부팅 자동 시작 활성화
[root@localhost ~]# systemctl enable pdns
5-2 PowerDNS 서비스 시작 (※트러블슈팅 과정, 꼭 순서대로 확인 진행)
◇ [1차 시도] 서비스 시작 시 에러발생
[root@localhost ~]# systemctl start pdns
Job for pdns.service failed because the control process exited with error code.
See "systemctl status pdns.service" and "journalctl -xe" for details.
◇ 에러로그 확인
[root@localhost ~]# journalctl -xe
localhost.localdomain pdns_server[3414]: Jul 22 01:26:40 Unable to open /etc/pdns/pdns.conf
localhost.localdomain pdns_server[3414]: Unable to launch, no backends configured for querying
[conf 파일을 불러오지 못해 에러가 발생하는 문제는 대부분 실행 권한 문제로 발생]
◇ 권한 확인
[root@localhost ~]# ls -al /etc/pdns/pdns.conf
-rw------- 1 root root 17956 7월 22 01:18 /etc/pdns/pdns.conf
◇ 권한 수정 [최소 보안 유지를 위해 그룹 권한까지만 부여]
[root@localhost ~]# chmod 660 /etc/pdns/pdns.conf
[root@localhost ~]# chown pdns:root /etc/pdns/pdns.conf
[root@localhost ~]# ls -al /etc/pdns/pdns.conf
-rw-rw---- 1 pdns root 17956 7월 22 01:18 /etc/pdns/pdns.conf
◇ [2차 시도] 서비스 시작 시 에러발생
[root@localhost ~]# systemctl start pdns
Job for pdns.service failed because the control process exited with error code.
See "systemctl status pdns.service" and "journalctl -xe" for details.
◇ 에러로그 확인
[root@localhost ~]# journalctl -xe
localhost.localdomain pdns_server[5843]: Loading '/usr/lib64/pdns/libgmysqlbackend.so
localhost.localdomain pdns_server[5843]:
Unable to load module '/usr/lib64/pdns/libgmysqlbackend.so':
libmysqlclient.so.21: cannot open shared object file: No such file or directory
[libgmysqlbackend.so 모듈을 불러오지 못하는 에러]
localhost.localdomain pdns_server[5843]: DNSBackend unable to load module in gmysql
◇ 파일 확인
[root@localhost ~]# ls -al /usr/lib64/pdns/
-rwxr-xr-x 1 root root 349832 4월 6 10:09 libbindbackend.so
-rwxr-xr-x 1 root root 160152 4월 6 10:09 libgmysqlbackend.so [파일은 존재함]
-rwxr-xr-x 1 root root 69536 4월 6 10:09 librandombackend.so
◇ 라이브러리 의존성 문제일 확률이 높음 [ldd 의존성 확인 명령어]
[root@localhost ~]# ldd /usr/lib64/pdns/*
/usr/lib64/pdns/libgmysqlbackend.so:
linux-vdso.so.1 (0x00007fffa3de2000)
libmysqlclient.so.21 => not found [원인 확인]
◇ 의존성 문제 확인 되어 libmysqlclient.so.21 (Mysql 라이브러리) 라이브러리를 연결해주기
※ 처음에 백업했던 위치 확인, 기억이 안난다면 절대 경로 확인
[root@localhost mysql]# find / -name libmysqlclient.so.21
/usr/lib64/mysql_old/libmysqlclient.so.21
◇ libmysqlclient.so.21 의존성 찾을 수 있게 [ ldso.conf ] 절대경로 추가 수정
[root@localhost ~]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib64/mysql_old/ [라인 추가]
◇ 바로 적용을 위해 명령어 수행
[root@localhost ~]# ldconfig
◇ 의존성 재 확인 [정상 확인 완료]
[root@localhost ~]# ldd /usr/lib64/pdns/* | grep libmysqlclient.so.21
libmysqlclient.so.21 => /usr/lib64/mysql_old/libmysqlclient.so.21 (0x00007f6020fba000)
◇ [3차 시도] 서비스 시작 시 에러발생
[root@localhost ~]# systemctl start pdns
Job for pdns.service failed because the control process exited with error code.
See "systemctl status pdns.service" and "journalctl -xe" for details.
◇ 에러로그 확인
[root@localhost ~]# journalctl -xe
localhost.localdomain pdns_server[16810]: Unable to bind UDP socket to '0.0.0.0:53'
Address already in use [이미 UDP 53 포트가 사용중으로 실행 에러 발생]
localhost.localdomain pdns_server[16810]: Fatal error: Unable to bind to UDP socket
◇ UDP 53 사용중인 포트 확인 [ netstat ] (스크린샷 대처)
◇ 해당 프로세스 비활성화 및 중지
[root@localhost ~]# systemctl disable systemd-resolved.service
[root@localhost ~]# systemctl stop systemd-resolved.service
◇ 서비스 시작 및 구동 확인! [최종 구동 확인]
[root@localhost ~]# systemctl start pdns
[root@localhost ~]# ps -ef | grep pdns
/usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no
STEP06 → Apache(httpd), PHP7.4 설치 및 구동
6-1 PHP7.4 버전을 설치하기 위한 사전 준비 [ APM 포스팅 설치중 PHP부분 참고 ]
◇ PHP [REMI] 저장소 설치
[root@localhost ~]# yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
◇ PHP [7.4] 모듈을 사용하기 위한 활성화 및 디폴트 설정
[root@localhost ~]# yum module enable php:remi-7.4
6-2 Apache(httpd), PHP7.4 및 관련 패키지 한번에 설치하기
[root@localhost ~]# yum install httpd php php-devel php-gd php-imap php-ldap php-mysqlnd php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mhash php-pecl-dbase php-pecl-mcrypt gettext
6-3 Apache(httpd) 활성화 및 서비스 구동 확인
[root@localhost ~]# systemctl enable httpd | 부팅 자동 시작 |
[root@localhost ~]# systemctl start httpd | Apache 서비스 시작 |
[root@localhost ~]# ps -ef |grep httpd /usr/sbin/httpd -DFOREGROUND /usr/sbin/httpd -DFOREGROUND |
구동 확인 |
STEP07 → 웹 경로에 [PowerAdmin] 다운 후 압축 해제[ 공식 홈페이지 ]
◇ 웹 설치 경로[디폴트] 이동
[root@localhost ~]# cd /var/www/html
◇ [wget]을 이용해 2.1.7 릴리즈 버전 직접 다운
[root@localhost html]# wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
◇ 압축 해제
[root@localhost html]# tar xvf poweradmin-2.1.7.tgz
STEP08 → 웹 접속을 위한 방화벽(iptables) 80번 포트 허용하기
※ 라인 순서 중요 보이는 그대로 넣을 것
8-1 iptables 파일 추가 후 저장
[root@localhost html]# vi /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT [80포트 라인추가]
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
8-2 iptables 재시작
[root@localhost html]# systemctl restart iptables
8-3 80포트 추가 확인
[root@localhost html]# iptables -nL | grep 80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
STEP09 → 웹 인터페이스 관리 도구인 [ PowerAdmin ] 설치 진행
9-1 본인 PC에서 [ URL : http://192.168.232.139/poweradmin-2.1.7/install/ ] 접속을 합니다.
9-2 설치전 주의사항으로 다음
9-3 데이터베이스 정보 업데이트 하기
9-4 접속할 계정 권한 생성 및 마스터 네임서버 호스트 설정
9-5 DB에 유저 접근 권한 계정 권한 부여 [이미 했기 때문에 할 필요 없음]
9-6 /inc/config.inc.php 파일에 적용 후 다음 진행
◇ 경로 이동
[root@localhost html]# cd /var/www/html/poweradmin-2.1.7/inc
◇ 샘플 파일 이름 변경
[root@localhost inc]# mv config-me.inc.php config.inc.php
◇ 위 스크린샷 값대로 수정 후 저장 [표시된 값만 설정 할 것]
[root@localhost inc]# vi config.inc.php
[아래 표시된 부분만 세팅과 동일하게 설정할 것]
// NOTE: Do not edit this file, otherwise it's very likely your changes
// will be overwritten with an upgrade.
// Instead, create the file "inc/config.inc.php" and set the variables you
// want to set there. Your changes will override the defaults provided by us.
// Better description of available configuration settings you can find here:
// <https://github.com/poweradmin/poweradmin/wiki/Configuration-File>
// Database settings
$db_host = 'localhost';
$db_port = '3306';
$db_user = 'pdns';
$db_pass = 'test123';
$db_name = 'pdns';
$db_type = 'mysql';
//$db_file = ''; # used only for SQLite, provide full path to database file
//$db_debug = false; # show all SQL queries
$db_layer = 'PDO'; # or MDB2
//$db_ssl_ca = '';
// Security settings
// This should be changed upon install
$session_key = 'd1qN7c[_)_zYM=cwTpbrbIuPNISjF1[E%)kmLBL90EtI![';
$password_encryption = 'md5'; // or md5salt
// Interface settings
$iface_lang = 'en_EN';
$iface_style = 'example';
$iface_rowamount = 50;
$iface_expire = 1800;
$iface_zonelist_serial = false;
$iface_title = 'Poweradmin';
$iface_add_reverse_record = true;
// Predefined DNS settings
$dns_hostmaster = 'master.testdns.com';
$dns_ns1 = 'ns1.testdns.com';
$dns_ns2 = 'ns2.testdns.com';
$dns_ttl = 86400;
$dns_fancy = false;
$dns_strict_tld_check = false;
$dns_top_level_tld_check = false; // Don't allow to create top level TLDs
$dns_third_level_check = false;
9-7 마지막 설정 안내 순차적으로 진행
◇ 경로 이동
[root@localhost html]# cd /var/www/html/poweradmin-2.1.7
◇ 동적 DNS공급 사용 적용
[root@localhost poweradmin-2.1.7]# cp install/htaccess.dist .htaccess
◇ 인스톨 파일 삭제
[root@localhost poweradmin-2.1.7]# rm -rf /var/www/html/poweradmin-2.1.7/install
STEP10 → PowerAdmin 웹 관리자 접속 확인 [ URL : http://192.168.232.139/poweradmin-2.1.7/ ]
※ 기본ID [ admin ] / 패스워드는 본인이 설정한 값
※ 정상적으로 로그인된 화면
STEP11 → 도메인 생성 테스트
11-1 [ Add master zone ] 에서 도메인 테스트로 [ test.com ] 이라는 도메인을 생성하려고 하였으나 에러 발생
Error 메시지 : You have invalid characters in your hostname
Error 메시지 : test.com failed - Invalid hostname.
11-2 서버 에러로그 확인
[root@localhost ~]# tail -f /var/log/php-fpm/www-error.log
[23-Jul-2020 00:19:47 UTC] PHP Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /var/www/html/poweradmin-2.1.7/inc/dns.inc.php on line 321
이 오류를 검색해보니 PHP7.3 이상부터는 문자열 처리하는 방식이 변경된 것으로 보입니다.
해당 라인 [321]을 열어보면 특수문자같은게 확인이 되는데요. 시스템상에서는 역슬래시[ \ ] 입니다.
[root@localhost php-fpm]# vi /var/www/html/poweradmin-2.1.7/inc/dns.inc.php
( - ) 하이픈 앞뒤에 ( \ ) 역슬래시가 포함되어있을 경우 문자열 인식에 문제가 발생하는 것으로 확인됩니다.
개발자가 아니다보니 혹시나 해서 위치를 계속 수정해서 테스트 해보았더니 [ \ ] 역슬래시 뒤에 있다고 발생하는게 아닌 문자열 처리하는 순서배열에 문제가 있는 것으로 보이네요. 다음가 같이 [ - ] 하이픈을 [ [ ] 대괄호 뒤에 이동합니다.
디폴트 문자열 | 321 if (!preg_match('/^[\w-\/]+$/', $hostname_label)) { |
수정 | 321 if (!preg_match('/^[-\w\/]+$/', $hostname_label)) { |
11-3 다시 [ Add master zone ] 에서 도메인 생성 시 정상 확인
11-4 일반 [ A/MX/CNAME ] 레코드도 등록 테스트 해보았으나 동일하게 발생
Error 메세지 : You have invalid characters in your hostname
11-5 서버 에러로그 확인
[root@localhost ~]# tail -f /var/log/php-fpm/www-error.log
[23-Jul-2020 01:03:15 UTC] PHP Warning: preg_match(): Compilation failed: invalid range in character class at offset 8 in /var/www/html/poweradmin-2.1.7/inc/dns.inc.php on line 315
이번에는 라인 [315]줄에서 문제가 발생했네요.
[root@localhost php-fpm]# vi /var/www/html/poweradmin-2.1.7/inc/dns.inc.php
동일하게 중간에 있는 [ - ] 하이픈을 [ [ ]대괄호 뒤에 이동 합니다.
디폴트 문자열 | 315 if (!preg_match('/^(\*|[\w-\/]+)$/', $hostname_label)) { |
수정 | 315 if (!preg_match('/^(\*|[-\w\/]+)$/', $hostname_label)) { |
11-6 레코드도 정상적으로 생성 되는 것을 확인
STEP12 → 네임서버 질의 테스트
[root@localhost ~]# dig @localhost test.test-2.com
STEP13 [마지막] → 도메인 삭제 테스트
존파일은 정상적으로 삭제가 되나 두가지의 에러가 발생을 합니다.
Error : Failed to call pdnssec utility
Error : Failed to deactivate DNSSEC keys.
[ PowerDNS ] 최근 버전에서는 [ PowerAdmin ] 에서 처리하는 커맨드 명령어가 없거나 변경되어 나는 에러가 제법 있습니다. 단순하게 오류 안나게만 하면 되는 부분으로 다음과 같이 처리해주면 됩니다.
◇ Error : Failed to call pdnssec utility 에러 처리 방법
[root@localhost ~]# vi /var/www/html/poweradmin-2.1.7/inc/config.inc.php
디폴트 설정 | 65 $pdnssec_command = '/usr/bin/pdnssec'; |
수정 | 65 $pdnssec_command = '/usr/bin/pdnsutil'; |
◇ Error : Failed to deactivate DNSSEC keys 에러 처리 방법
[root@localhost ~]# vi /var/www/html/poweradmin-2.1.7/delete_domain.php
해당 라인 삭제 [74] | 71 if ($confirm == '1') { 72 if ($zone_info['type'] == 'MASTER') { 73 $zone_name = get_zone_name_from_id($zone_id); 74 dnssec_unsecure_zone($zone_name); [라인삭제] 75 } |
이후 삭제 테스트시 더이상 오류가 발생하지 않습니다.
마무리
이로서 설치에서 구동까지 테스트에서는 정상 작동 확인되었습니다. 저는 현재 [ CentOS7 / MariaDB-10.1 /pdns-4.2.X / PowerAdmin-2.1.7 ] 버전으로 직접 설치 및 운영을 최소 1년이상으로 운영을 해보았는데 문제가 없었기 때문에 최신버전에서도 추가 및 삭제 질의 응답까지 동일하게 하는 것으로 보아 실전투입해도 괜찮을까 합니다. 나중에 시간이 지나면 리눅스 Redhat/CentOS 에서 패키지 설치에 대한 버그 픽스가 나올 것으로 예상이 되지만 이것만큼은 2019년도에 나온것치고는 아직도 이슈가 많이 발생을 하네요. 제가 직접 구입한 도메인으로 실서버에 테스트 후 운영에 문제가 없다면 정식버전으로 포스팅 하도록 하겠습니다. 최신버전으로 설치하시는 분들은 위 트러블슈팅을 참고하면 좋을 것으로 보입니다. 긴글 읽으신다고 고생하셨습니다.
'◈『Open(Source) Solution』 > 네임서버(DNS)' 카테고리의 다른 글
PowerAdmin(PowerDNS) - 네임서버 레코드 종류 (0) | 2020.08.03 |
---|---|
CentOS 8 네임서버(PowerDNS) - MariaDB(Replication) 이용한 1차 / 2차 네임서버 구성 (0) | 2020.07.29 |
CentOS 8 - 네임서버(PowerDNS 4.X) - 로그[Logging] 설정 (0) | 2020.07.27 |