Пост

Настройка powerdns authoritative and recursor servers

В данной статье мы установим powerdns authoritative and recursor servers c помощью ansible

Установка

По заветам хорошей статьи

Установка будет происходить с помощью ролей ansible

pdns-ansible

pdns_recursor-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 ```bash

    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

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, вам нужно выполнить несколько шагов:

  1. Отредактируйте файл зоны: Измените файл зоны (например, /var/lib/powerdns/zones/master/bk.digital.zone) с помощью вашего текстового редактора, чтобы добавить, изменить или удалить DNS-записи.
  2. Примените изменения командой 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 для максимальной производительности.

Авторский пост защищен лицензией CC BY 4.0 .