Поиск по сайту:

Как установить PowerDNS Server и PowerDNS Admin в Ubuntu 20.04


Это руководство существует для этих версий ОС

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 20.04 (Focal Fossa)

На этой странице

  1. Предпосылки
  2. Установка и настройка сервера MariaDB
  3. Установите PowerDNS
  4. Настройка PowerDNS
  5. Установить администратора PowerDNS
    1. Установите необходимые зависимости
    2. Загрузить администратора PowerDNS
    3. Определить подключение к базе данных
    4. Включить API администрирования PowerDNS

    PowerDNS — это бесплатный авторитетный сервер имен с открытым исходным кодом. Он написан на C++ и работает в операционных системах Unix, Linux и macOS. Он использует MySQL, MariaDB, PostgreSQL и Oracle для хранения файлов и записей зон.

    PowerDNS Admin — это веб-инструмент, используемый для управления PowerDNS. Вы можете создавать зоны DNS и управлять ими с помощью веб-браузера. Он поставляется с богатым набором функций. Некоторые из них перечислены ниже:

    • Поддержка IPv4 и IPv6
    • Страница статуса с полезной информацией
    • Автоматическое создание/обновление обратных записей PTR
    • Поддержка массового создания доменов
    • Поддержка шаблонов доменов
    • Поддержка DNSSec
    • Поддержка локальной базы данных, SAML, LDAP, аутентификации пользователей Active Directory.

    В этом руководстве мы покажем вам, как установить PowerDNS и администратора PowerDNS на сервере Ubuntu 20.04.

    Предпосылки

    • Сервер под управлением Ubuntu 20.04.
    • Действительное доменное имя, указанное с IP-адресом вашего сервера.
    • Пароль root настраивается на сервере.

    Установка и настройка сервера MariaDB

    Прежде чем начать, вам нужно будет установить сервер базы данных MariaDB в вашей системе. По умолчанию последняя версия MariaDB недоступна в стандартном репозитории Ubuntu 20.04. Поэтому вам нужно будет добавить репозиторий MariaDB в вашу систему.

    Сначала установите необходимые пакеты с помощью следующей команды:

    apt-get install software-properties-common gnupg2 -y

    После установки всех пакетов добавьте ключ подписи MariaDB с помощью следующей команды:

    apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'

    Затем добавьте репозиторий MariaDB с помощью следующей команды:

    add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirrors.ukfast.co.uk/sites/mariadb/repo/10.5/ubuntu focal main'

    Затем установите сервер MariaDB, выполнив следующую команду:

    apt-get install mariadb-server -y

    После установки вам нужно будет создать базу данных и пользователя для PowerDNS.

    Сначала войдите в MariaDB с помощью следующей команды:

    mysql

    После входа в систему создайте базу данных и пользователя с помощью следующей команды:

    MariaDB [(none)]> create database pdns;
    MariaDB [(none)]> grant all on pdns.* to identified by 'password';

    Затем сбросьте привилегии и выйдите из оболочки MariaDB с помощью следующей команды:

    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> exit;

    Установите PowerDNS

    Во-первых, вам нужно будет отключить службу systemd-resolved в вашей системе. Вы можете отключить его с помощью следующей команды:

    systemctl disable --now systemd-resolved

    Затем удалите файл resolv.conf по умолчанию и создайте новый файл:

    rm -rf /etc/resolv.conf
    echo "nameserver 8.8.8.8" > /etc/resolv.conf

    Затем установите сервер PowerDNS с помощью следующей команды:

    apt-get install pdns-server pdns-backend-mysql -y

    После установки PowerDNS вы можете перейти к следующему шагу.

    Настроить PowerDNS

    Во-первых, вам нужно будет импортировать схему базы данных PowerDNS в базу данных PowerDNS. Вы можете импортировать его с помощью следующей команды:

    mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

    Далее вам нужно будет определить детали подключения к базе данных PowerDNS. Вы можете сделать это, отредактировав файл pdns.local.gmysql.conf:

    nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf

    Измените следующие строки:

    # MySQL Configuration
    #
    # Launch gmysql backend
    launch+=gmysql
    
    # gmysql parameters
    gmysql-host=127.0.0.1
    gmysql-port=3306
    gmysql-dbname=pdns
    gmysql-user=pdnsadmin
    gmysql-password=password
    gmysql-dnssec=yes
    # gmysql-socket=
    

    Сохраните и закройте файл, затем дайте права доступа к файлу pdns.local.gmysql.conf:

    chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf

    Затем остановите сервер PowerDNS и проверьте PowerDNS с помощью следующей команды:

    systemctl stop pdns
    pdns_server --daemon=no --guardian=no --loglevel=9

    Если все в порядке, вы должны получить следующий вывод:

    Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
    Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
    Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
    Nov 02 10:43:47 Done launching threads, ready to distribute questions
    

    Затем запустите сервер PowerDNS с помощью следующей команды:

    systemctl start pdns

    На данный момент PowerDNS запущен и прослушивает порт 53. Вы можете проверить это с помощью следующей команды:

    ss -alnp4 | grep pdns

    Вы должны получить следующий результат:

    udp     UNCONN   0        0                0.0.0.0:53             0.0.0.0:*      users:(("pdns_server",pid=33140,fd=5))                                         
    tcp     LISTEN   0        128              0.0.0.0:53             0.0.0.0:*      users:(("pdns_server",pid=33140,fd=7))                                         
    

    Установите администратора PowerDNS

    В этом разделе мы покажем вам, как установить администратора PowerDNS с помощью Nginx.

    Установите необходимые зависимости

    Сначала установите все зависимости, необходимые для администратора PowerDNS, с помощью следующей команды:

    apt-get install nginx python3-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential libmariadb-dev git python3-flask -y

    После установки всех зависимостей добавьте репозиторий Node.js с помощью следующей команды:

    curl -sL https://deb.nodesource.com/setup_14.x | bash -

    Затем установите Node.js с помощью следующей команды:

    apt-get install nodejs -y

    Затем добавьте репозиторий пряжи с помощью следующей команды:

    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

    Затем обновите репозиторий и установите Yarn с помощью следующей команды:

    apt-get update -y
    apt-get install yarn -y

    На этом этапе все необходимые зависимости установлены, теперь можно переходить к следующему шагу.

    Скачать администратор PowerDNS

    Затем загрузите последнюю версию администратора PowerDNS из репозитория Git в корневой каталог Nginx:

    git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns

    Затем измените каталог на загруженный каталог и создайте виртуальную среду Python с помощью следующей команды:

    cd /var/www/html/pdns/
    virtualenv -p python3 flask

    Затем активируйте виртуальную среду и установите все зависимости Python с помощью следующей команды:

    source ./flask/bin/activate
    pip install -r requirements.txt

    Затем деактивируйте из виртуальной среды с помощью следующей команды:

    deactivate

    Определить подключение к базе данных

    Затем вам нужно будет определить детали подключения к базе данных PowerDNS в файле default_config.py:

    nano /var/www/html/pdns/powerdnsadmin/default_config.py

    Измените следующие строки:

    SALT = 'yoursecretekey'
    SECRET_KEY = 'yoursecretekey'
    BIND_ADDRESS = '0.0.0.0'
    PORT = 9191
    HSTS_ENABLED = False
    OFFLINE_MODE = False
    
    SQLA_DB_USER = 'pdnsadmin'
    SQLA_DB_PASSWORD = 'password'
    SQLA_DB_HOST = '127.0.0.1'
    SQLA_DB_NAME = 'pdns'
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    

    Сохраните и закройте файл, затем измените каталог на pdns и активируйте виртуальную среду:

    cd /var/www/html/pdns/
    source ./flask/bin/activate

    Затем обновите базу данных с помощью следующей команды:

    export FLASK_APP=powerdnsadmin/__init__.py
    flask db upgrade
    yarn install --pure-lockfile
    flask assets build

    Затем деактивируйте виртуальную среду с помощью следующей команды:

    deactivate

    Включить API администрирования PowerDNS

    Администратор PowerDNS использует JSON API для чтения статистики и изменения содержимого зоны, метаданных и материала ключа DNSSEC. Вы можете включить его, отредактировав файл pdns.conf:

    nano /etc/powerdns/pdns.conf

    Измените следующие строки:

    api=yes
    api-key=yoursecretekey
    

    Сохраните и закройте файл, затем перезапустите службу PowerDNS, чтобы изменения вступили в силу:

    systemctl restart pdns

    Настройте Nginx для администратора PowerDNS

    Далее вам нужно будет настроить Nginx для администратора PowerDNS. Для этого создайте файл конфигурации виртуального хоста Nginx с помощью следующей команды:

    nano /etc/nginx/conf.d/pdns-admin.conf

    Добавьте следующие строки:

    server {
      listen	*:80;
      server_name               pdnsadmin.example.com;
    
      index                     index.html index.htm index.php;
      root                      /var/www/html/pdns;
      access_log                /var/log/nginx/pdnsadmin_access.log combined;
      error_log                 /var/log/nginx/pdnsadmin_error.log;
    
      client_max_body_size              10m;
      client_body_buffer_size           128k;
      proxy_redirect                    off;
      proxy_connect_timeout             90;
      proxy_send_timeout                90;
      proxy_read_timeout                90;
      proxy_buffers                     32 4k;
      proxy_buffer_size                 8k;
      proxy_set_header                  Host $host;
      proxy_set_header                  X-Real-IP $remote_addr;
      proxy_set_header                  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_headers_hash_bucket_size    64;
    
      location ~ ^/static/  {
        include  /etc/nginx/mime.types;
        root /var/www/html/pdns/powerdnsadmin;
    
        location ~*  \.(jpg|jpeg|png|gif)$ {
          expires 365d;
        }
    
        location ~* ^.+.(css|js)$ {
          expires 7d;
        }
      }
    
      location / {
        proxy_pass            http://unix:/run/pdnsadmin/socket;
        proxy_read_timeout    120;
        proxy_connect_timeout 120;
        proxy_redirect        off;
      }
    
    }
    

    Сохраните и закройте файл, затем проверьте Nginx на наличие синтаксической ошибки с помощью следующей команды:

    nginx -t

    Вы должны получить следующий результат:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    Затем измените владельца pdns на www-data:

    chown -R www-data:www-data /var/www/html/pdns

    Наконец, перезапустите службу Nginx, чтобы применить изменения:

    systemctl restart nginx

    Создайте файл службы Systemd для администратора PowerDNS

    Далее вам нужно будет создать файл службы systemd для управления службой PowerDNS.

    Сначала создайте файл службы pdns с помощью следующей команды:

    nano /etc/systemd/system/pdnsadmin.service

    Добавьте следующие строки:

    [Unit]
    Description=PowerDNS-Admin
    Requires=pdnsadmin.socket
    After=network.target
    
    [Service]
    PIDFile=/run/pdnsadmin/pid
    User=pdns
    Group=pdns
    WorkingDirectory=/var/www/html/pdns
    ExecStart=/var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket 'powerdnsadmin:create_app()'
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s TERM $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

    Сохраните и закройте файл, затем создайте файл сокета pdnsadmin с помощью следующей команды:

    nano /etc/systemd/system/pdnsadmin.socket

    Добавьте следующие строки:

    [Unit]
    Description=PowerDNS-Admin socket
    
    [Socket]
    ListenStream=/run/pdnsadmin/socket
    
    [Install]
    WantedBy=sockets.target
    

    Сохраните и закройте файл, затем создайте необходимые файлы и каталоги с помощью следующей команды:

    echo "d /run/pdnsadmin 0755 pdns pdns -" >> /etc/tmpfiles.d/pdnsadmin.conf
    mkdir /run/pdnsadmin/
    chown -R pdns: /run/pdnsadmin/
    chown -R pdns: /var/www/html/pdns/powerdnsadmin/

    Затем перезагрузите демон systemd с помощью следующей команды:

    systemctl daemon-reload

    Затем включите службу pdnsadmin для запуска при перезагрузке системы с помощью следующей команды:

    systemctl enable --now pdnsadmin.service pdnsadmin.socket

    Затем проверьте состояние обеих служб с помощью следующей команды:

    systemctl status pdnsadmin.service pdnsadmin.socket

    Вы должны получить следующий результат:

    ? pdnsadmin.service - PowerDNS-Admin
         Loaded: loaded (/etc/systemd/system/pdnsadmin.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2020-11-02 10:54:19 UTC; 5s ago
    TriggeredBy: ? pdnsadmin.socket
       Main PID: 38881 (gunicorn)
          Tasks: 2 (limit: 2353)
         Memory: 62.5M
         CGroup: /system.slice/pdnsadmin.service
                 ??38881 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa>
                 ??38898 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa>
    
    Nov 02 10:54:19 pdnsadmin.example.com systemd[1]: Started PowerDNS-Admin.
    Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Starting gunicorn 20.0.4
    Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Listening at: unix:/run/pdnsadmin/socket (38881)
    Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Using worker: sync
    Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38898]: [2020-11-02 10:54:19 +0000] [38898] [INFO] Booting worker with pid: 38898
    
    ? pdnsadmin.socket - PowerDNS-Admin socket
         Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2020-11-02 10:54:19 UTC; 5s ago
       Triggers: ? pdnsadmin.service
         Listen: /run/pdnsadmin/socket (Stream)
         CGroup: /system.slice/pdnsadmin.socket
    
    Nov 02 10:54:19 pdnsadmin.example.com systemd[1]: Listening on PowerDNS-Admin socket.
    

    Доступ к веб-интерфейсу администратора PowerDNS

    Теперь откройте веб-браузер и войдите в веб-интерфейс администратора PowerDNS, используя URL-адрес http://pdnsadmin.example.com. Вы будете перенаправлены на следующую страницу:

    Нажмите на кнопку Создать учетную запись. Вы должны увидеть следующий экран:

    Укажите данные пользователя-администратора и нажмите кнопку «Регистрация», чтобы создать учетную запись. Вы должны увидеть страницу входа администратора PowerDNS на следующем экране:

    Укажите имя пользователя и пароль администратора и нажмите кнопку «Войти». Вы должны увидеть веб-интерфейс администратора PowerDNS на следующей странице:

    Здесь укажите URL-адрес PowerDNS API для подключения к PowerDNS и управления им. Затем нажмите кнопку «Обновить», чтобы сохранить изменения. Вы должны увидеть следующую страницу:

    Нажмите кнопку «Панель инструментов». Вы должны увидеть панель администратора PowerDNS на следующем экране:

    Заключение

    Поздравляем! вы успешно установили и настроили PowerDNS и администратора PowerDNS на сервере Ubuntu 20.04. Теперь вы можете создавать зоны и добавлять записи через веб-интерфейс администратора PowerDNS.