Настройка powerdns authoritative and recursor servers
В данной статье мы установим powerdns authoritative and recursor servers c помощью ansible
Установка
По заветам хорошей статьи
Установка будет происходить с помощью ролей ansible
В качестве GUI будет использован PowerDNS-Admin Развернутый в docker
- В переменных конфигурируем ДНС
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
## Конфигурация 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_rec_install_repo: ""
- Конфигурируем файл с зонами
bind
/etc/powerdns/backend_bind/zone_bind.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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";
};
- Далее необходимо задать файл с днс записями,
1
nano /var/lib/powerdns/zones/master/gzx.zone
```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
1
2
3
4
5
6
7
##### Конфигурация БД
---
- **Создание нового пользователя**: Используйте команду `CREATE ROLE` для создания нового пользователя. Например, для создания пользователя `powerdns_user` с паролем `yourpassword`, используйте:
```sql
CREATE ROLE powerdns_user WITH LOGIN PASSWORD 'yourpassword';
-
Создание базы данных: Теперь создайте базу данных
powerdns
.1 2 3
CREATE DATABASE powerdns; \c powerdns; GRANT ALL PRIVILEGES ON DATABASE powerdns TO powerdns_user;
- Для бэкенда
psql
необходимо создать схему в БД
Форвард зон
- Настраиваем файл конфигурации рекурсора
/etc/powerdns/recursor-forward.zones
```bashforward 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
1
2
3
- Раскатываем powerdns и рекурсор
```bash
ansible-playbook playbook-core.yml -l dns-2 -t deploy_power_dns,deploy_power_dns_recursor
- Поднимаем PowerDNS-Admin
1 2 3 4 5
docker run -d \ -e SECRET_KEY='12345678qwerty' \ -v pda-data:/data \ -p 9191:80 \ powerdnsadmin/pda-legacy:latest
Конфигурация
Создать зону
1
pdnsutil create-zone powerdns.lan ns1.powerdns.lan.
Редактировать зону
1
pdnsutil edit-zone powerdns.lan.
Посмотреть записи в зоне
1
pdnsutil list-zone powerdns.lan.
Посмотреть все зоны
1
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 с указанием имени зоны:
1
pdns_control retrieve gizex.pro
[!info] В данном случае, gizex.pro - это имя зоны, которую вы хотите обновить. Выполнение этой команды должно инициировать зонную передачу для указанной зоны с Master сервера.
Примечания
Powerdns
[!warning] Если есть одна и та же зона на друх бэкандах и при этом в одной есть запись, а в другой записи нет, то это вызовет проблемы.
Powerdns
будет отправлять запрос то в одну зону, то в другую. Из-за этого ДНС имя не будет резолвится, когдаpowerdns
будет обращаться к бекенду, где нет записи
DnsDist
https://dnsdist.org/ Выступает в качестве балансировщика dns
запросов. По хорошему ставить на отдельный хост Dnsdist — балансировщик с защитой от DNS- и DoS-атак. L7 LoadBalancer
Что ещё, кроме балансировки, умеет dnsdist? Отбрасывать неугодные по содержанию запросы, кешировать запросы, лимитировать клиентов по DNS query и по IP, использовать в качестве фильтра eBPF для максимальной производительности.