PowerDNS 제품군 구성
PowerDNS Authoritative Server | 도메인에 대한 권한 있는 응답 제공 | A, MX, NS 등 Authoritative DNS 응답 |
PowerDNS Recursor | 외부 DNS 질의 해결 (Resolver) | 클라이언트를 대신하여 다른 DNS 서버 질의 |
PowerDNS Authoritative Server 구성 요소
컴포넌트설명
pdns_server | 메인 DNS 서비스 데몬. 설정에 따라 UDP/TCP 53 포트에서 요청 수신 |
Backend Modules | DNS zone 데이터를 저장/조회하기 위한 백엔드. MySQL, PostgreSQL, SQLite, BIND 파일, LDAP 등 |
API/Webserver | HTTP 기반 REST API 및 웹 인터페이스 제공 (Zone 관리, 통계 등) |
pdnsutil | CLI 유틸리티. 존 추가, 레코드 수정 등 |
Configuration (pdns.conf) | 모든 설정이 이 파일에 저장됨 |
PowerDNS Recursor 구성 요소
컴포넌트설명
pdns_recursor | Resolver 데몬. 클라이언트 요청 수신 후 recursive query 수행 |
Lua Scripting Engine | 요청 필터링, 로깅, 정책 정의에 사용 |
Configuration (recursor.conf) | 설정 파일 (forward zones, ACL 등) |
Control Socket / API | 통계, 상태 확인 등을 위한 명령어 통신 또는 REST API |
Dockerhub
Auth | https://hub.docker.com/r/powerdns/pdns-auth-49 | powerdns/pdns-auth-49:4.9.5 |
Recursor | https://hub.docker.com/r/powerdns/pdns-recursor-52 | powerdns/pdns-recursor-52:5.2.2 |
Docker compose로 만들어 보기
choonhoson@Choonhoui-MacBookAir test-powerdns % tree
.
├── docker-compose.yml
├── init.sql
├── pdns.conf
└── recursor.yml
docker-compose.yml
version: '3.8'
services:
# PowerDNS Authoritative Server
pdns-auth:
image: powerdns/pdns-auth-49:4.9.5
container_name: pdns-auth
depends_on:
- postgres
ports:
- "53:53/udp"
- "53:53/tcp"
- "8081:8081"
volumes:
- ./pdns.conf:/etc/powerdns/pdns.conf:ro
restart: always
# PowerDNS Recursor
pdns-recursor:
image: powerdns/pdns-recursor-52:5.2.2
container_name: pdns-recursor
ports:
- "54:53/udp"
- "54:53/tcp"
volumes:
- ./recursor.yml:/etc/powerdns/recursor.yml
restart: always
# PostgreSQL for PowerDNS backend
postgres:
image: postgres:14
container_name: postgres
environment:
- POSTGRES_DB=powerdns
- POSTGRES_USER=powerdns
- POSTGRES_PASSWORD=powerdns123
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
restart: always
pdns.conf
launch=gpgsql
gpgsql-host=postgres
gpgsql-user=powerdns
gpgsql-password=powerdns123
gpgsql-dbname=powerdns
api=yes
api-key=supersecretapikey
webserver=yes
webserver-address=0.0.0.0
webserver-port=8081
webserver-allow-from=0.0.0.0/0
loglevel=6
log-dns-details=yes
recursor.yml
dnssec:
log_bogus: true
incoming:
listen:
- 0.0.0.0:5301
- '[::]:5301'
recursor:
extended_resolution_errors: true
forward_zones:
- zone: example.com
forwarders:
- 127.0.0.1:5301
outgoing:
source_address:
- 0.0.0.0
- '::'
logging:
loglevel: 6
init.sql 파일 (링크)
https://github.com/PowerDNS/pdns/blob/master/modules/gpgsqlbackend/schema.pgsql.sql
728x90