Как установить PowerDNS и PowerDNS-Admin в Ubuntu 18.04 / Debian 9 с бэкэндом MariaDB
В этом руководстве мы расскажем об установке PowerDNS Authoritative Name Server и PowerDNS-Admin в Ubuntu 18.04 и Debian 9 версий Linux. PowerDNS — это DNS-сервер, написанный на C ++ и лицензированный по лицензии GPL. Он работает на большинстве Linux и всех других производных Unix. На момент написания этой статьи последняя версия — версия 4.1.X.
Установите PowerDNS в Ubuntu 18.04 / Debian 9
В этом разделе мы собираемся установить и настроить:
- Сервер базы данных MariaDB.
- Сервис PowerDNS
Шаг 1: Установите и настройте сервер базы данных MariaDB
Нам нужно установить сервер базы данных, который будет использоваться PowerDNS для хранения файлов зон. Обратите внимание, что у вас также есть возможность использовать текстовые файлы, такие как BIND. Наш сервер баз данных — MariaDB.
Для установки MariaDB на Ubuntu 18.04, проверьте
Установите MariaDB 10.x на Ubuntu 18.04 и CentOS 7
Для Debian 9 / Debian используйте:
Как установить MariaDB 10.4 на Debian 9 / Debian 8
После того, как сервер базы данных установлен и запущен, перейдите к созданию базы данных и учетной записи пользователя PowerDNS в MariaDB.
$ mysql -u root -p CREATE DATABASE powerdns;
Далее следует создать powerdns
базу данных пользователя и назначить привилегии:
GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' \ IDENTIFIED BY 'strongpassword';
Сбросьте привилегии для обновления пользовательских настроек:
FLUSH PRIVILEGES;
Переключитесь на powerdns
базу данных для создания таблиц:
USE powerdns;
Создайте необходимые таблицы:
CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE UNIQUE INDEX name_index ON domains(name); CREATE TABLE records ( id BIGINT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); CREATE INDEX ordername ON records (ordername); CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, comment TEXT CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX comments_name_type_idx ON comments (name, type); CREATE INDEX comments_order_idx ON comments (domain_id, modified_at); CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind); CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX domainidindex ON cryptokeys(domain_id); CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Вы можете подтвердить, что ваши таблицы созданы:
Теперь у нас есть база данных и пустая таблица. PowerDNS теперь должен запускаться вместе с ним.
Шаг 2. Установите PowerDNS в Ubuntu 18.04 / Debian 9
Ubuntu 18.04 поставляется с systemd-resolv, который необходимо отключить, поскольку он привязывается к порту 53, который конфликтует с портами PowerDNS.
Выполните следующие команды, чтобы отключить разрешенную службу:
sudo systemctl disable systemd-resolved sudo systemctl stop systemd-resolved
Кроме того, удалите символьный файл resolv.conf
$ ls -lh /etc/resolv.conf lrwxrwxrwx 1 root root 39 Jul 24 15:50 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf $ sudo rm /etc/resolv.conf
Затем создайте новый файл resolv.conf .
sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf
Обратите внимание, что вы можете установить PowerDNS из официального репозитория apt или из репозитория PowerDNS. Чтобы установить из репозитория apt, запустите:
sudo apt-get update sudo apt-get install pdns-server pdns-backend-mysql
Добавьте официальный репозиторий PowerDNS для Ubuntu 18.04.
$ cat /etc/apt/sources.list.d/pdns.list deb [arch=amd64] http://repo.powerdns.com/ubuntu bionic-auth-41 main
Импортировать ключ GPG:
curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add -
Обновите список пакетов и установите пакет PowerDNS ( pdns-сервер ) и серверную часть MySQL ( pdns-backend-mysql ).
sudo apt-get update sudo apt-get install pdns-server pdns-backend-mysql
Для Debian 9 установите пакеты из репозитория apt, не добавляя новый репозиторий:
sudo apt-get update sudo apt-get install pdns-server pdns-backend-mysql
На вопрос, нужно ли настроить базу данных PowerDNS с помощью dbconfig-common, ответьте « Нет»
Настройте PowerDNS для использования бэкэнда MySQL:
Вот моя конфигурация MySQL для PowerDNS:
# cat /etc/powerdns/pdns.d/pdns.local.gmysql.conf # MySQL Configuration # Launch gmysql backend launch+=gmysql # gmysql parameters gmysql-host=localhost gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=strongpassword gmysql-dnssec=yes # gmysql-socket=
Перезапустите службу pdns
sudo systemctl restart pdns
Теперь вы можете протестировать PowerDNS, чтобы убедиться, что сервис находится в сети:
Проверьте, правильно ли отвечает служба PowerDNS:
Установка PowerDNS-Admin на Ubuntu 18.04 / Debian 9
PowerDNS-Admin — это веб-интерфейс PowerDNS со следующими расширенными функциями:
- Управление несколькими доменами
- Шаблон домена
- Управление пользователями
- Управление доступом пользователей на основе домена
- Регистрация активности пользователя
- Аутентификация пользователя локальной БД / LDAP / Active Directory
- Поддержка аутентификации SAML
- Google OAuth-аутентификация
- Github OAuth-аутентификация
- Поддержка двухфакторной аутентификации (TOTP)
- Статистика службы Dashboard и pdns
- Поддержка протокола DynDNS 2
- Редактируйте IPv6 PTR, используя адреса IPv6 напрямую (больше не нужно редактировать буквальные адреса!)
Установка пакет разработки Python 3
sudo apt-get install python3-dev
Установите необходимые пакеты для сборки библиотек Python из файла needs.txt
sudo apt-get install -y libmysqlclient-dev python-mysqldb libsasl2-dev libffi-dev \ libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev pkg-config
Установите пряжу для создания файлов активов:
sudo curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - sudo echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list sudo apt-get update sudo apt-get install yarn
Извлеките исходный код и создайте virtualenv:
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin cd /opt/web/powerdns-admin virtualenv -p python3 flask
Вывод:
Already using interpreter /usr/bin/python3 Using base prefix '/usr' New python executable in /opt/web/powerdns-admin/flask/bin/python3 Also creating executable in /opt/web/powerdns-admin/flask/bin/python Installing setuptools, pkg_resources, pip, wheel...done.
Активируйте среду Python3 и установите библиотеки:
. ./flask/bin/activate pip install -r requirements.txt
Создать и настроить базу данных:
$ mysql -u root -p CREATE DATABASE powerdnsadmin; GRANT ALL PRIVILEGES ON powerdnsadmin.* TO 'pdnsadminuser'@'%' \ IDENTIFIED BY 'strongpassword'; FLUSH PRIVILEGES; quit
Перед запуском PowerDNS-Admin убедитесь, что у вас есть config.py . Давайте создадим один из шаблона:
cp config_template.py config.py
Отредактируйте файл в
vim config.py
Это требуемый конфиг:
- Информация о подключении к БД
- Конечная точка службы PNDS API и ключ API
- Номер порта используется
- Адрес привязки
Закомментируйте SQLite SQLALCHEMY_DATABASE_URI
строку и удалите комментарий из MySQL:
# DATABASE CONFIG #You'll need MySQL-python SQLA_DB_USER = 'powerdns' SQLA_DB_PASSWORD = 'strongpassword' SQLA_DB_HOST = 'localhost' SQLA_DB_NAME = 'powerdns' #MySQL SQLALCHEMY_DATABASE_URI = 'mysql://'+SQLA_DB_USER+':'\ +SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME #SQLite #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')
Смотрите скриншот ниже:
Как только вы ваш config.py готов. Создайте схему базы данных, выполнив команды:
(flask) $ export FLASK_APP=app/__init__.py (flask)$ flask db upgrade INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> 787bdba9e147, Init DB
Затем запустите db migrate
:
(flask)$ flask db migrate -m "Init DB" INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.autogenerate.compare] Detected removed index 'domainidindex' on 'cryptokeys' INFO [alembic.autogenerate.compare] Detected removed table 'cryptokeys' INFO [alembic.autogenerate.compare] Detected removed index 'namealgoindex' on 'tsigkeys' INFO [alembic.autogenerate.compare] Detected removed table 'tsigkeys' INFO [alembic.autogenerate.compare] Detected removed table 'supermasters' INFO [alembic.autogenerate.compare] Detected removed index 'nametype_index' on 'records' INFO [alembic.autogenerate.compare] Detected removed table 'records' INFO [alembic.autogenerate.compare] Detected removed index 'domainmetadata_idx' on 'domainmetadata' INFO [alembic.autogenerate.compare] Detected removed table 'domainmetadata' INFO [alembic.autogenerate.compare] Detected removed index 'name_index' on 'domains' INFO [alembic.autogenerate.compare] Detected removed table 'domains' INFO [alembic.autogenerate.compare] Detected removed index 'comments_name_type_idx' on 'comments' INFO [alembic.autogenerate.compare] Detected removed index 'comments_order_idx' on 'comments' INFO [alembic.autogenerate.compare] Detected removed table 'comments' Generating /opt/web/powerdns- admin/migrations/versions/42ca771ac430_init_db.py ... done
Создайте файлы активов с помощью пряжи:
(flask)$ yarn install --pure-lockfile yarn install v1.9.4 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages... Done in 14.59s. (flask)$ flask assets build Building bundle: generated/login.js [INFO] Building bundle: generated/login.js Building bundle: generated/login.css [INFO] Building bundle: generated/login.css Building bundle: generated/main.js [INFO] Building bundle: generated/main.js Building bundle: generated/main.css [INFO] Building bundle: generated/main.css
Проверьте, что ваш PowerDNS-Admin работает нормально:
(flask)$ ./run.py [INFO] * Running on http://127.0.0.1:9191/ (Press CTRL+C to quit) [INFO] * Restarting with stat [WARNING] * Debugger is active! [INFO] * Debugger PIN: 466-405-858
Настройте системный сервис и Nginx
Мы собираемся управлять PowerDNS-Admin с помощью systemd. Создайте файл сервисной единицы, как показано ниже:
$ sudo vim /etc/systemd/system/powerdns-admin.service [Unit] Description=PowerDNS-Admin After=network.target [Service] User=root Group=root WorkingDirectory=/opt/web/powerdns-admin ExecStart=/opt/web/powerdns-admin/flask/bin/gunicorn --workers 2 --bind unix:/opt/web/powerdns-admin/powerdns-admin.sock app:app [Install] WantedBy=multi-user.target
Запустите службу Powerdns-Admin и настройте ее на загрузку:
sudo systemctl daemon-reload sudo systemctl start powerdns-admin sudo systemctl enable powerdns-admin
Убедитесь, что статус работает:
Установите и настройте Nginx для Powerdns-Admin
Установите Nginx, используя:
sudo apt-get install nginx
Настроить Nginx
sudo vim /etc/nginx/conf.d/powerdns-admin.conf
Добавить контент, как показано ниже:
Проверьте синтаксис nginx и перезапустите службу nginx:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # systemctl restart nginx
Посетите веб-интерфейс PowerDNS-Admin.
http://powerdns-admin.example.com/
Нажмите кнопку «Создать учетную запись» и зарегистрируйте пользователя. Первый пользователь будет в роли администратора .
Когда вы входите с созданным именем пользователя и паролем, вы должны получить интерфейс, как показано ниже:
Наслаждайтесь администрированием PowerDNS с PowerDNS-Admin на сервере Ubuntu 18.04 / Debian 9.
Уведомление: Как установить и настроить Dnsmasq на Ubuntu 18.04 LTS - INFOIT.COM.UA