GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04にPowerDNSサーバーとPowerDNS管理者をインストールする方法

PowerDNSは、無料のオープンソースの権威あるネームサーバーです。これはC++で記述されており、Unix、Linux、およびmacOSオペレーティングシステムで動作します。 MySQL、MariaDB、PostgreSQL、およびOracleを使用して、ゾーンファイルとレコードを保存します。

PowerDNS Adminは、PowerDNSの管理に使用されるWebベースのツールです。 Webブラウザを使用してDNSゾーンを作成および管理できます。豊富な機能セットが付属しています。それらのいくつかを以下に示します:

  • IPv4およびIPv6のサポート
  • 役立つ情報を表示するステータスページ
  • リバースPTRレコードの自動作成/更新
  • 一括ドメイン作成のサポート
  • ドメインテンプレートのサポート
  • DNSSecサポート
  • ローカルDB、SAML、LDAP、ActiveDirectoryユーザー認証をサポート

このチュートリアルでは、Ubuntu20.04サーバーにPowerDNSおよびPowerDNSadminをインストールする方法を示します。

前提条件
  • Ubuntu20.04を実行しているサーバー。
  • サーバーIPで指定された有効なドメイン名。
  • ルートパスワードがサーバーに設定されます。

MariaDBサーバーのインストールと構成

開始する前に、MariaDBデータベースサーバーをシステムにインストールする必要があります。デフォルトでは、MariaDBの最新バージョンはUbuntu20.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 [email protected] 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))                                         

PowerDNSAdminをインストール

このセクションでは、Nginxを使用してPowerDNSadminをインストールする方法を説明します。

必要な依存関係をインストールする

まず、次のコマンドを使用して、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管理者をダウンロード

次に、最新バージョンのPowerDNSadminを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

PowerDNSAdminAPIを有効にする

PowerDNS管理者は、JSON APIを使用して、統計を読み取り、ゾーンコンテンツ、メタデータ、およびDNSSECキーマテリアルを変更します。ファイルpdns.confを編集することで有効にできます:

nano /etc/powerdns/pdns.conf

次の行を変更します:

api=yes
api-key=yoursecretekey

ファイルを保存して閉じてから、PowerDNSサービスを再起動して変更を適用します。

systemctl restart pdns

PowerDNSAdmin用にNginxを構成する

次に、PowerDNS管理者用にNginxを構成する必要があります。これを行うには、次のコマンドを使用して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

PowerDNS管理者用のSystemdサービスファイルを作成する

次に、PowerDNSサービスを管理するためのsystemdサービスファイルを作成する必要があります。

まず、次のコマンドを使用して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

ファイルを保存して閉じてから、次のコマンドを使用してpdnsadminsocktファイルを作成します。

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 AdminWebUIにアクセス

次に、Webブラウザを開き、URL http://pdnsadmin.example.comを使用してPowerDNS管理Webインターフェイスにアクセスします。 。次のページにリダイレクトされます:

アカウントの作成をクリックします ボタン。次の画面が表示されます。

管理者ユーザーの詳細を入力し、登録をクリックします アカウントを作成するためのボタン。次の画面にPowerDNS管理者ログインページが表示されます。

管理者のユーザー名とパスワードを入力し、サインインをクリックします ボタン。次のページにPowerDNS管理Webインターフェイスが表示されます。

ここで、PowerDNSに接続して管理するためのPowerDNSAPIURLを指定します。次に、更新をクリックします ボタンをクリックして変更を保存します。次のページが表示されます:

ダッシュボードをクリックします ボタン。次の画面にPowerDNS管理ダッシュボードが表示されます。

結論

おめでとう!これで、Ubuntu20.04サーバーにPowerDNSおよびPowerDNSadminが正常にインストールおよび構成されました。これで、PowerDNS管理Webインターフェイスを介してゾーンを作成し、レコードを追加できます。


Ubuntu
  1. Ubuntu20.04にDHCPサーバーをインストールして構成する方法

  2. UbuntuにRedisサーバーをインストールして構成する方法

  3. Ubuntu 22.04 に MariaDB をインストールする方法

  1. Ubuntu20.04にNFSサーバーをインストールして構成する方法

  2. Ubuntu20.04にVNCをインストールして構成する方法

  3. Ubuntu20.04にMariadb10をインストールして構成する方法

  1. Ubuntu18.04にMariaDBをインストールする方法

  2. Ubuntu18.04にVNCをインストールして構成する方法

  3. Ubuntu18.04にNFSサーバーをインストールして構成する方法