Настройка powerdns authoritative and recursor servers
Установка
По заветам хорошей статьи
Установка будет происходить с помощью ролей ansible
В качестве GUI будет использован PowerDNS-Admin Развернутый в docker
- В переменных конфигурируем ДНС
## Конфигурация powerdns-server
pdns_config:
master: yes
slave: no
api-key: 12345678qwerty
api: yes
local-address: 127.0.0.1, 10.0.0.251
local-port: 5353
webserver: yes
webserver-address: 10.0.0.251
webserver-port: 8081
webserver-password: "webserver-password"
webserver-allow-from: 127.0.0.1/8,10.0.0.0/24,172.18.0.0/16
include-dir: /etc/powerdns/pdns.d # подключаем BIND и PG бэкенды
loglevel: 5
allow-axfr-ips: 10.0.0.252/32
## Конфигурация powerdns-recursor
pdns_rec_config:
allow-from: '127.0.0.1/8,192.168.0.0/24,10.0.0.0/16'
local-address: 0.0.0.0
local-port: 53
disable-packetcache: yes
max-cache-ttl: 86400
max-negative-ttl: 10
webserver: yes
webserver-address: 0.0.0.0
webserver-port: 8082
webserver-password: "webserver-password"
webserver-allow-from: 127.0.0.1/8,10.0.0.0/24,172.18.0.0/16
dnssec: "off"
server-id: '1'
api-key: ud22eseNtDuaKG
loglevel: 5
quiet: yes
trace: fail
# forward-zones-file: /etc/powerdns/recursor-forward.zones # файл с форвард зонами
hint-file: /usr/share/dns/root.hints
include-dir: /etc/powerdns/recursor.d
# forward-zones:
# - "gizex.pro=10.0.0.250;10.0.0.251:5353"
# - "zabbix.gizex.pro=10.0.0.250"
# - "boyzcraft.ru=10.0.0.251:5353;10.0.0.250"
forward-zones-recurse:
- "gizex.pro=10.0.0.251:5353;10.0.0.250;10.0.0.252:5353"
- "gzx=10.0.0.251:5353;10.0.0.250;10.0.0.252:5353"
- "gzx.local=10.0.0.251:5353;10.0.0.250;;10.0.0.252:5353"
- ".=8.8.8.8;1.1.1.1"
-
# Подключаем бэкенды psql и bind
pdns_backends:
'gpgsql:one':
'user': powerdns
'host': 10.0.0.101
'password': yourpassword
'dbname': powerdns
'bind':
'config': '/etc/powerdns/named.conf'
'supermaster-config': '/var/lib/powerdns/supermaster.conf'
'supermaster-destdir': '/var/lib/powerdns/zones.slave.d'
pdns_install_repo: "{{ pdns_auth_powerdns_repo_48 }}"
pdns_rec_install_repo: "{{ pdns_rec_powerdns_repo_48 }}"
- Конфигурируем файл с зонами
bind/etc/powerdns/backend_bind/zone_bind.conf
# Master zone configuration for .gzx
zone "gzx" {
type native;
file "/var/lib/powerdns/zones/master/gzx.zone";
};
# Slave zone configuration for .gzx
zone "gzx" {
type slave;
masters {
10.0.0.251:5353; # Замените на IP-адрес вашего PowerDNS-сервера мастера
};
file "/var/lib/powerdns/zones/slave/gzx.zone";
};
# Master zone configuration for gizex.pro
zone "gizex.pro" {
type master;
file "/var/lib/powerdns/zones/master/gizex.pro.zone";
};
# Slave zone configuration for gizex.pro
zone "gizex.pro" {
type slave;
masters {
10.0.0.251:5353; # Замените на IP-адрес вашего PowerDNS-сервера мастера
};
file "/var/lib/powerdns/zones/slave/gizex.pro.zone";
};
- Далее необходимо задать файл с днс записями,
nano /var/lib/powerdns/zones/master/gzx.zone
$ORIGIN gzx.
nextcloud IN A 10.0.0.200
nextcloud.gzx IN A 10.0.0.200
grafana IN A 10.0.0.201
grafana.gzx IN A 10.0.0.201
Конфигурация БД
- Создание нового пользователя: Используйте команду
CREATE ROLEдля создания нового пользователя. Например, для создания пользователяpowerdns_userс паролемyourpassword, используйте:
CREATE ROLE powerdns_user WITH LOGIN PASSWORD 'yourpassword';
- Создание базы данных: Теперь создайте базу данных
powerdns.
CREATE DATABASE powerdns;
\c powerdns;
GRANT ALL PRIVILEGES ON DATABASE powerdns TO powerdns_user;
- Для бэкенда
psqlнеобходимо создать схему в БД
Форвард зон
- Настраиваем файл конфигурации рекурсора
/etc/powerdns/recursor-forward.zones
# forward zones
h.lan=10.0.0.251:5353
gzx=10.0.0.250, 10.0.0.251:5353
powerdns.lan=10.0.0.251:5353
# forward zones recurse
+gzx.local=10.0.0.250 , 10.0.0.251:5353
+gizex.pro=10.0.0.250 , 10.0.0.251:5353
+.=10.0.0.250
- Раскатываем powerdns и рекурсор
ansible-playbook playbook-core.yml -l dns-2 -t deploy_power_dns,deploy_power_dns_recursor
- Поднимаем PowerDNS-Admin
docker run -d \
-e SECRET_KEY='12345678qwerty' \
-v pda-data:/data \
-p 9191:80 \
powerdnsadmin/pda-legacy:latest
Конфигурация
Создать зону
pdnsutil create-zone powerdns.lan ns1.powerdns.lan.
Редактировать зону
pdnsutil edit-zone powerdns.lan.
Посмотреть записи в зоне
pdnsutil list-zone powerdns.lan.
Посмотреть все зоны
pdnsutil list-zone powerdns.lan.
Применить изменения в зоне PowerDNS, вам нужно выполнить несколько шагов:
- Отредактируйте файл зоны: Измените файл зоны (например,
/var/lib/powerdns/zones/master/bk.digital.zone) с помощью вашего текстового редактора, чтобы добавить, изменить или удалить DNS-записи. - Примените изменения командой
pdns_control bind-reload-now ZONE
Для запуска зонной передачи с Master сервера на Slave сервере используйте команду pdns_control retrieve с указанием имени зоны:
pdns_control retrieve gizex.pro
Примечание: В данном случае, gizex.pro - это имя зоны, которую вы хотите обновить. Выполнение этой команды должно инициировать зонную передачу для указанной зоны с Master сервера.
Примечания
Powerdns
Внимание: Если есть одна и та же зона на двух бэкендах и при этом в одной есть запись, а в другой записи нет, то это вызовет проблемы.
Powerdnsбудет отправлять запрос то в одну зону, то в другую. Из-за этого ДНС имя не будет резолвится, когдаpowerdnsбудет обращаться к бекенду, где нет записи
DnsDist
https://dnsdist.org/
Выступает в качестве балансировщика dns запросов. По хорошему ставить на отдельный хост
Dnsdist — балансировщик с защитой от DNS- и DoS-атак. L7 LoadBalancer
Что ещё, кроме балансировки, умеет dnsdist? Отбрасывать неугодные по содержанию запросы, кешировать запросы, лимитировать клиентов по DNS query и по IP, использовать в качестве фильтра eBPF для максимальной производительности.