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

PowerDNS を Ubuntu 18.04、20.04、および 22.04 にインストールする

はじめに

PowerDNS は、名前空間の解決に役立つオープンソースの DNS サーバー ソリューションです。 PowerDNS は、高可用性、データ冗長性、およびさまざまなバックエンドをサポートしているため、柔軟で堅牢なソリューションとなっています。

このガイドでは、PowerDNS と PowerDNS 管理インターフェイスを Ubuntu にインストールする方法について説明します。

前提条件

  • ターミナルへのアクセス
  • root ユーザーへのアクセス
  • nano などのテキスト エディタ
  • PowerDNS Admin にアクセスするための Web ブラウザ

PowerDNS を使用する理由

PowerDNS は 2 つのネームサーバー ソリューションを提供します:

  • 権威あるサーバー 、データベースを使用してドメインに関するクエリを解決します。
  • リカーサー 、クエリを解決するために他の権限のあるサーバーと協議します。

他のネームサーバーは、2 つの機能を自動的に組み合わせます。 PowerDNS はこれらを個別に提供し、モジュラー セットアップのために 2 つのソリューションをシームレスに組み合わせることができます。

さらに、PowerDNS はオープン ソースであり、小規模なクエリ ボリュームにも大規模なクエリ ボリュームにも同様に機能し、バックエンド ソリューションに多くの可能性を提供します。

Ubuntu 18.04、20.04、および 22.04 への PowerDNS のインストール

以下の手順に従って、MariaDB サーバーをバックエンド データベースとして PowerDNS をインストールおよび構成します。さらに、この手順では、PowerDNS 管理者の Web インターフェイスと API のセットアップについてユーザーをガイドします。

ステップ 1:MariaDB サーバーをインストールして構成する

MariaDB をインストールして構成するには、次の手順を実行します。

1. システム パッケージの更新とアップグレード:

sudo apt update && sudo apt upgrade

2. 以下を使用して MariaDB サーバーとクライアントをインストールします。

sudo apt install mariadb-server mariadb-client

注: その他の可能なデータベース サーバーには、PostgreSQL、MySQL、およびその他のリレーショナル データベースが含まれます。

インストールが完了するまで待ってから続行してください。

3. 以下を使用して MariaDB に接続します。

sudo mysql

端末はデータベース セッションに接続します。

4. PowerDNSネームサーバー用のデータベースを作成します:

create database pda;

注: 別のデータベース名を使用している場合は、それに応じて後続のすべてのコマンドを変更してください。

5. pda にすべての権限を付与します ユーザーを入力し、ユーザーのパスワードを入力してください:

grant all privileges on pda.* TO 'pda'@'localhost' identified by 'YOUR_PASSWORD_HERE';
flush privileges;

6. データベースに接続します:

use pda;

7. 次の SQL クエリを使用して、pda のテーブルを作成します。 データベース:

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);

8. テーブルが作成されたことを確認します:

show tables;

出力には、使用可能なテーブルが一覧表示されます。

9. データベース接続を終了します:

exit;

このコマンドはセッションを端末に返します。

ステップ 2:PowerDNS をインストールする

PowerDNS を Ubuntu にインストールするには、次の手順を実行します。

1. root ユーザーに切り替えます:

sudo su -

ターミナル セッションが root ユーザーに変更されます。

注: sudo と su の違いについて学びましょう。

2. systemd-resolved サービスは、ローカル アプリケーションに名前解決を提供します。 PowerDNS は名前解決に独自のサービスを使用します。

systemd-resolved を無効にする サービス:

systemctl disable --now systemd-resolved

出力は、サービスの削除を確認します。

3. システム サービス構成ファイルを次のように削除します。

rm -rf /etc/resolv.conf

4. 新しい resolv.conf を作成します ファイル:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

Google ネームサーバーを追加すると、DNS 解決が保証されます。

5. PowerDNS サーバーとデータベース バックエンド パッケージを次のようにインストールします。

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

インストールが完了するまで待ってから続行してください。

ステップ 3:PowerDNS を構成する

データベースに接続するようにローカル PowerDNS ファイルを構成します。

1. 構成ファイルを編集用に開きます:

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

2. 次の情報をファイルに追加します:

# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql

# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pda
gmysql-user=pda
gmysql-password=YOUR_PASSWORD_HERE
gmysql-dnssec=yes
# gmysql-socket=

別のパラメーターを使用している場合は、データベース名、ユーザー、およびパスワードを正しいパラメーターと交換してください。ファイルを保存して閉じます。

3. ファイルのパーミッションを変更します:

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

4. pdn を停止します サービス:

systemctl stop pdns

5. データベースへの接続をテストします:

pdns_server --daemon=no --guardian=no --loglevel=9

出力は、接続が成功したことを示しています。 CTRL を押します +C テストを終了します。

6. サービスを開始します:

systemctl start pdns

7. ss コマンドで接続を確認します:

ss -alnp4 | grep pdns

TCP/UDP ポート 53 を確認します 開いていて LISTEN です /UCONN

ステップ 4:PowerDNS 管理依存関係をインストールする

PowerDNS 管理者は、Web インターフェイスを介して PowerDNS を管理するのに役立ちます。ダッシュボードをローカルにインストールするには、次の手順を実行します:

1. Python 開発パッケージをインストールします:

apt install python3-dev

2. 依存関係をインストールします:

apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl

3. Node.js セットアップを取得します:

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

4. 以下を使用して Node.js をインストールします。

apt install -y nodejs

5. 次に、Yarn パッケージ マネージャーをインストールします。 Yarn 公開鍵を取得して apt に追加します :

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -

Yarn はアセット ファイルの構築に役立ちます。

6. ソースのリストに Yarn を追加します。

echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

7. apt ソース リストを更新します。

apt update -y

8. 以下を使用して Yarn をインストールします。

apt install yarn -y

9. PowerDNS Admin Git リポジトリを /opt/web/powerdns-admin にクローンします。 :

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin

別のディレクトリを使用している場合は、コマンドとその後のすべての外観で宛先ディレクトリを交換してください。

10. 複製された Git ディレクトリに移動します。

cd /opt/web/powerdns-admin

11. Python 仮想環境を作成します:

python3 -mvenv ./venv

12. 仮想環境を有効化:

source ./venv/bin/activate

13. pip を最新バージョンにアップグレードします:

pip install --upgrade pip

pip パッケージ マネージャーは、追加の Python 要件のインストールに役立ちます。

14. requirements.txt から要件をインストールします。 ファイル:

pip install -r requirements.txt

すべての要件をインストールしたら、PowerDNS Admin を実行する前に追加の構成が必要です。

ステップ 5:PowerDNS Admin を構成して実行する

ローカル インスタンスで PowerDNS Admin を構成して開始するには、次の手順を実行します。

1. cp コマンドを使用してサンプル development.py をコピーします。 production.py への Python ファイル :

cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py

2. production.py を開きます 編集用ファイル:

nano /opt/web/powerdns-admin/configs/production.py

3. 次の行を編集します:

#import urllib.parse

SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd2'

SQLA_DB_PASSWORD = 'changeme'

4. ライブラリ インポートのコメントを外し、ランダムに生成された秘密鍵を提供し、正しいデータベース パスワードを提供します。

import urllib.parse

SECRET_KEY = '\x19\xc7\xd8\xa7$\xb6P*\xc6\xb8\xa1E\x90P\x12\x95'

SQLA_DB_PASSWORD = 'YOUR_PASSWORD_HERE'

注: Python を使用してランダム キーを生成します。

python3 -c "import os; print(os.urandom(16))"

出力をコピーして SECRET_KEY に貼り付けます

ファイルを保存して閉じます。

5. 本番アプリ構成変数をエクスポートします:

export FLASK_CONF=../configs/production.py

6.フラスコのアプリケーション変数をエクスポートします:

export FLASK_APP=powerdnsadmin/__init__.py

7. データベース スキーマをアップグレードします。

flask db upgrade

8. プロジェクトの依存関係をインストールします:

yarn install --pure-lockfile

9.フラスコアプリアセットを構築します:

flask assets build

ビルドが完了するまで待ちます。

10. アプリケーションを実行します:

./run.py

アプリケーションを実行したままにします。

11. アプリケーションは現在、localhost のポート 9191 で実行されています .次のアドレスにアクセスしてください:

http://localhost:9191

PowerDNS Admin のログイン画面が表示されます。現在、ユーザーはいません。最初に登録したユーザーが管理者アカウントになります。

12. ターミナルで、仮想環境を終了し、root ユーザーからログアウトします。

exit

端末は通常の状態に戻ります。

ステップ 6:PowerDNS 管理サービスを作成する

起動時に PowerDNS Admin を実行するように構成します。

1. PowerDNS 管理者用の systemd サービス ファイルを作成します。

sudo nano /etc/systemd/system/powerdns-admin.service

2. 次のコンテンツを追加します:

[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target

[Service]
User=root
Group=root
PIDFile=/run/powerdns-admin/pid
WorkingDirectory=/opt/web/powerdns-admin
ExecStartPre=/bin/bash -c '$$(mkdir -p /run/powerdns-admin/)'
ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

3. ユニット ファイルを作成します。

sudo systemctl edit --force powerdns-admin.service

4. 以下を追加します:

[Service]
Environment="FLASK_CONF=../configs/production.py"

5. ソケット ファイルを作成します。

sudo nano /etc/systemd/system/powerdns-admin.socket

6. 次の情報を挿入します:

[Unit]
Description=PowerDNS-Admin socket

[Socket]
ListenStream=/run/powerdns-admin/socket

[Install]
WantedBy=sockets.target

7. 環境ファイルを作成します:

sudo nano /etc/tmpfiles.d/powerdns-admin.conf

8. 次の情報を追加します:

d /run/powerdns-admin 0755 pdns pdns -

9. デーモンをリロードします:

sudo systemctl daemon-reload

10. サービスとソケットを開始して有効にします。

sudo systemctl start powerdns-admin.service powerdns-admin.socket
sudo systemctl enable powerdns-admin.service powerdns-admin.socket

11. 以下でステータスを確認します:

sudo systemctl status powerdns-admin.service powerdns-admin.socket

サービスはエラーなしで実行されていると表示されます。

ステップ 7:Nginx をインストールして構成する

PowerDNS Admin を Nginx で実行するように構成するには、次の手順を実行します。

1. 以下を使用して Nginx をインストールします。

sudo apt install nginx -y

2. Nginx 構成ファイルを編集します。

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

3. 次の情報を追加します:

server {
  listen *:80;
  server_name               localhost;

  index                     index.html index.htm index.php;
  root                      /opt/web/powerdns-admin;
  access_log                /var/log/nginx/powerdns-admin.local.access.log combined;
  error_log                 /var/log/nginx/powerdns-admin.local.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 /opt/web/powerdns-admin/powerdnsadmin;

    location ~*  \.(jpg|jpeg|png|gif)$ {
      expires 365d;
    }

    location ~* ^.+.(css|js)$ {
      expires 7d;
    }
  }

  location / {
    proxy_pass            http://unix:/run/powerdns-admin/socket;
    proxy_read_timeout    120;
    proxy_connect_timeout 120;
    proxy_redirect        off;
  }

}

別のサーバー名を使用している場合は、localhost を変更してください あなたのサーバーアドレスに。

4. ファイルに構文エラーがないことを確認します:

nginx -t

5. powerdns-admin の所有権を変更します www-dataまで :

sudo chown -R www-data:www-data /opt/web/powerdns-admin

6. Nginx サービスを再起動します。

sudo systemctl restart nginx

7. ブラウザーから PowerDNS 管理ページにアクセスします。

localhost

別のアドレスにリンクする場合は、Nginx 構成ファイルで提供されているアドレスを使用してください。

ステップ 8:PowerDNS API を構成する

PowerDNS API を構成するには、次の手順を実行します。

1. ブラウザから PowerDNS Admin にログインします。初めて実行する場合は、最初に新しいユーザーを作成します。最初のユーザーが自動的に管理者になります。

2. API キーを開く 左メニューの s タブ。

3. [キーを追加+] をクリックします。 ボタン。

4. 役割 フィールドのデフォルトは 管理者 です ユーザー。キーのオプションの説明を追加します。

5. [キーの作成] をクリックします API キーを生成します。

6. ポップアップ ウィンドウにキーが表示されます。 キーをコピー 確認を押します 続行します。

7. ダッシュボードに移動します ページ。

8. ドメインと API キーを入力します。変更を保存します。

9. PowerDNS 構成で API を有効にします。ターミナルで設定ファイルを開きます:

nano /etc/powerdns/pdns.conf

10. 次の行のコメントを外して変更します:

api=yes
api-key=yoursecretekey
webserver=yes

11. 変更を保存して nano を閉じます。 API がセットアップされ、使用できるようになりました。

結論

このガイドの手順を実行すると、Nginx の PowerDNS 管理 Web インターフェイスである PowerDNS がセットアップされ、PowerDNS API が接続されます。

次に、さまざまな DNS レコード タイプまたは DNS セキュリティのベスト プラクティスについて学びます。


Linux
  1. Ubuntu18.04にGitLabをインストールします

  2. UbuntuにNginxをインストールする

  3. Ubuntu に Qt をインストールする

  1. UbuntuにPodmanをインストールする

  2. Ubuntu20.04にインストールするもの

  3. Ubuntu20.04にRをインストールする方法

  1. Ubuntu 20.04 Hadoop

  2. Ubuntu18.04にGoをインストールする方法

  3. Ubuntu18.04にRをインストールする方法