R&D/클라우드

Power DNS 란?

sunshout1 2025. 5. 19. 20:11

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