Возможно несколько сценариев установки. В данном примере будет рассмотрен вариант установки авторитарного сервера с пользовательскими доменами, отдельным рекурсивным сервером и балансировщиком dnsdist
Шаг 1. Установка пакетов
Добавим репозиторий авторитарного сервера и установим его:
# systemctl status pdns -l ● pdns.service - PowerDNS Authoritative Server Loaded: loaded (/usr/lib/systemd/system/pdns.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2018-03-01 22:56:50 MSK; 29s ago Docs: man:pdns_server(1) man:pdns_control(1) https://doc.powerdns.com Main PID: 28456 (pdns_server) CGroup: /system.slice/pdns.service └─28456 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no
Mar 01 22:56:50 owndns.ru pdns_server[28456]: PowerDNS Authoritative Server 4.1.1 (C) 2001-2017 PowerDNS.COM BV Mar 01 22:56:50 owndns.ru pdns_server[28456]: Using 64-bits mode. Built using gcc 4.8.5 20150623 (Red Hat 4.8.5-16) on Feb 16 2018 10:08:16 by buildbot@aa8d6590639b. Mar 01 22:56:50 owndns.ru pdns_server[28456]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2. Mar 01 22:56:50 owndns.ru pdns_server[28456]: Polled security status of version 4.1.1 at startup, no known issues reported: OK Mar 01 22:56:50 owndns.ru pdns_server[28456]: Creating backend connection for TCP Mar 01 22:56:50 owndns.ru pdns_server[28456]: Master/slave communicator launching Mar 01 22:56:50 owndns.ru systemd[1]: Started PowerDNS Authoritative Server. Mar 01 22:56:50 owndns.ru pdns_server[28456]: About to create 3 backend threads for UDP Mar 01 22:56:50 owndns.ru pdns_server[28456]: No master domains need notifications Mar 01 22:56:50 owndns.ru pdns_server[28456]: Done launching threads, ready to distribute questions
Шаг 4. Настройка рекурсивного сервера
Открываем конфигурационный файл /etc/pdns-recursor/recursor.conf и приводим к следующему виду:
# systemctl status pdns-recursor ● pdns-recursor.service - PowerDNS Recursor Loaded: loaded (/usr/lib/systemd/system/pdns-recursor.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2018-03-01 23:13:42 MSK; 2s ago Docs: man:pdns_recursor(1) man:rec_control(1) https://doc.powerdns.com Main PID: 28548 (pdns_recursor) CGroup: /system.slice/pdns-recursor.service └─28548 /usr/sbin/pdns_recursor --daemon=no --write-pid=no --disable-syslog --log-timestamp=no
Mar 01 23:13:42 owndns.ru pdns_recursor[28548]: Enabled TCP data-ready filter for (slight) DoS protection Mar 01 23:13:42 owndns.ru pdns_recursor[28548]: Listening for TCP queries on 127.0.0.1:5301 Mar 01 23:13:42 owndns.ru pdns_recursor[28548]: Set effective group id to 995 Mar 01 23:13:42 owndns.ru pdns_recursor[28548]: Set effective user id to 997 Mar 01 23:13:42 owndns.ru pdns_recursor[28548]: Launching 3 threads Mar 01 23:13:42 owndns.ru systemd[1]: Started PowerDNS Recursor. Mar 01 23:13:43 owndns.ru pdns_recursor[28548]: Done priming cache with root hints Mar 01 23:13:43 owndns.ru pdns_recursor[28548]: Done priming cache with root hints Mar 01 23:13:43 owndns.ru pdns_recursor[28548]: Done priming cache with root hints Mar 01 23:13:43 owndns.ru pdns_recursor[28548]: Enabled 'epoll' multiplexer
Шаг 5. Установка и настройка балансировщика dnsdist
Dnsdist - это высокопроизводительный DNS-, DoS- и abuse балансировщик. Основная его задача заключается в маршрутизации трафика на лучший сервер, обеспечивающий максимальную производительность для разрешенных пользователей, в то время как происходит шунтирование или блокировка зловредного трафика.
Обладает огромным количество фичей:
• Фильтровать трафик (из ядра) • Проверять прямой трафик с консоли • Задерживать и ограничивать скорость плохих запросов • Интеллектуальная балансировка нагрузки • Ограничение QPS и пр.
Если хотим открыть рекурсию для всех, то убираем все правила, и добавляем recursive_ips:addMask('0.0.0.0/0'). ВНИМАНИЕ! В таком режиме есть вероятность DDoS-атаки!
# systemctl status dnsdist ● dnsdist.service - DNS Loadbalancer Loaded: loaded (/usr/lib/systemd/system/dnsdist.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2018-03-01 23:17:51 MSK; 3s ago Docs: man:dnsdist(1) http://dnsdist.org Process: 28590 ExecStartPre=/usr/bin/dnsdist -u dnsdist -g dnsdist --check-config (code=exited, status=0/SUCCESS) Main PID: 28592 (dnsdist) Tasks: 16 (limit: 8192) CGroup: /system.slice/dnsdist.service └─28592 /usr/bin/dnsdist -u dnsdist -g dnsdist --supervised --disable-syslog
Mar 01 23:17:51 owndns.ru dnsdist[28592]: Added downstream server 127.0.0.1:5300 Mar 01 23:17:51 owndns.ru dnsdist[28592]: Added downstream server 127.0.0.1:5301 Mar 01 23:17:51 owndns.ru dnsdist[28592]: Listening on 127.0.0.1:53 Mar 01 23:17:51 owndns.ru dnsdist[28592]: Listening on 195.209.55.51:53 Mar 01 23:17:51 owndns.ru dnsdist[28592]: Listening on [2a05:4800:2:55::51]:53 Mar 01 23:17:51 owndns.ru dnsdist[28592]: dnsdist 1.2.0 comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistri...version 2 Mar 01 23:17:51 owndns.ru dnsdist[28592]: ACL allowing queries from: 0.0.0.0/0 Mar 01 23:17:51 owndns.ru dnsdist[28592]: Marking downstream 127.0.0.1:5300 as 'up' Mar 01 23:17:51 owndns.ru systemd[1]: Started DNS Loadbalancer. Mar 01 23:17:51 owndns.ru dnsdist[28592]: Marking downstream 127.0.0.1:5301 as 'up' Hint: Some lines were ellipsized, use -l to show in full.