Как установить PowerDNS Server и PowerDNS Admin в Ubuntu 20.04
Это руководство существует для этих версий ОС
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 20.04 (Focal Fossa)
На этой странице
- Предпосылки
- Установка и настройка сервера MariaDB
- Установите PowerDNS
- Настройка PowerDNS
- Установить администратора PowerDNS
- Установите необходимые зависимости
- Загрузить администратора PowerDNS
- Определить подключение к базе данных
- Включить 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.