PowerDNS는 C++로 작성되고 GPL에 따라 라이선스가 부여된 DNS 서버 프로그램입니다. 그것은 대부분의 유닉스 파생 제품에서 실행됩니다. PowerDNS는 단순한 BIND 스타일 영역-파일에서 관계형 데이터베이스, 및 로드 밸런싱/장애 조치 알고리듬에 이르기까지 다양한 백엔드를 제공합니다. DNS recursor는 별도의 프로그램으로 제공됩니다.
Installation
마리아디비를 사용할 예정이기 때문에, 해당 기사로 가셔서 먼저 설치하고 설정하십시오.
그런-다음 패키지를 설치하기 위해 필요한 패키지를 먼저 설치합니다:
- sudo apt install software-properties-common gnupg2 -y
저장소를 /etc/apt/sources.list.d/pdns.list에 추가합니다:
deb [arch=amd64] http://repo.powerdns.com/debian bullseye-auth-45 main
우선 순위를 /etc/apt/preferences.d/pdns에 지정합니다:
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600
키를 얻고, 패키지를 설치합니다:
- wget -qO- https://repo.powerdns.com/FD380FBB-pub.asc | gpg --dearmor > pdns.gpg
- sudo mv pdns.gpg /etc/apt/trusted.gpg.d/
- sudo apt update
- sudo apt install pdns-server
- sudo apt install pdns-backend-mysql
Create PowerDNS Database
데이터베이스를 생성합니다:
- sudo mysql -u root -p
MariaDB [(none)]> create database domain_pdns;
MariaDB [(none)]> grant all on domain_pdns.* to pdns_id@'localhost' identified by 'PdnSPassW0rd';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
데이터베이스에 필요한 스키마를 사용하여 테이블을 만듭니다:
- sudo mysql -u pdns_id -p domain_pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
- sudo mysqlshow domain_pdns
Configure PowerDNS Database Connection Details
위에서 입력한 정보를 /etc/powerdns/pdns.d/pdns.local.gmysql.conf에 기록합니다:
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=domain_pdns
gmysql-user=pdns_id
gmysql-password=PdnSPassW0rd
gmysql-dnssec=yes
# gmysql-socket=
그런-다음 사용자와 모드를 바꿉니다:
- sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gmysql.conf
- sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Verify PowerDNS database connection
그런-다음 데이터베이스에 접근되는지 확인을 합니다:
- sudo systemctl stop pdns.service
- sudo pdns_server --daemon=no --guardian=no --loglevel=9
이상이 없으면, 서비스를 시작하고 동작 중인지 확인을 합니다:
- sudo systemctl restart pdns
- ss -alnp4 | grep pdns
History
PowerDNS 개발은 1999년에 시작되었고 원래는 상업용 독점 제품이었습니다. 2002년 11월에, 소스 코드가 오픈-소스 GPL v2 라이선스에 따라 공개되었습니다.
Features
PowerDNS Authoritative Server (pdns_server)는 단일 코어와 다중-스레드를 실행하는 여러 동적으로 로드-가능한 백엔드로 구성됩니다. 코어는 모든 패킷 처리와 DNS 인텔리전스를 처리하고, 반면에 하나 이상의 백엔드는 임의적인 저장 방법을 사용하여 DNS 레코드를 전달합니다.
영역 전송과 업데이트 알림이 지원되고, 프로세스는 권한이 없고 chroot로 실행될 수 있습니다. 다양한 캐시가 질의 처리 속도를 높이기 위해 유지됩니다. 실행-시간 제어는 다중 라우터 트래픽 그래퍼 / rrdtool 형식에서 개별 영역, 캐시 제거, 영역 알림, 및 덤프 통계를 다시 로드할 수 있는 pdns_control 명령을 통해 사용할 수 있습니다. 실시간 정보는 옵션으로 제공되는 내장 웹 서버를 통해서도 얻어질 수 있습니다.
PowerDNS에 대한 관리 인터페이스를 생성하기 위한 많은 독립적인 프로젝트가 있습니다.
DNSSEC
PowerDNS Authoritative Server는 버전 3.0부터 DNSSEC를 지원합니다. 사전-서명된 영역이 제공될 수 있지만, 역시 온라인 서명 & 키 관리를 수행할 수도 있습니다. 이것은 상대적으로 쉽다는 장점이 있지만, 암호화 키 자료가 서버 자체에 있다는 단점이 있습니다 (예를 들어 HSM과 함께 사용하지 않을 때 임의의 HTTPS 서버에서도 마찬가지입니다).
Recursor
PowerDNS Recursor (pdns_recursor)는 별도의 프로세스로 실행되는 확인하는(resolving) DNS 서버입니다.
PowerDNS의 이 부분은 간단한 협력 멀티태스킹 라이브러리인 Boost와 MTasker 라이브러리의 사용을 통해 기본 스레드와 사용자-공간 스레드의 조합을 사용합니다. 그것은 역시 독립형 패키지로도 제공됩니다.
만약 목표가 pdns_recursor 자체를 실행하는 것이 신뢰할 수 있는 구성 요소 뒤에 있는 것보다 훨씬 더 효율적이기 때문에 단순히 캐싱/재귀/이름 서비스를 제공하는 것이라면, pdns_recursor에 대해 게이트키퍼로 pdns_server 프로세스를 실행할 필요가 없습니다.
DNSSEC 검증에 대한 지원이 버전 4.0에서 pdns_recursor에 추가되었습니다.
Troubleshootings
Unable to bind to TCP socket 0.0.0.0
53: Address already in use : named, systemd-resolverd 서비스를 중지하더라도 이 메시지가 나올 수 있습니다. 아래와 같이 찾아냅니다:
- sudo lsof -i :53
dnsmasq가 출력될 수 있으며, 어쨌든, 해당 프로세서를 죽입니다:
- sudo killall dnsmasq
- sudo systemctl restart pdns