はじめに
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 セキュリティのベスト プラクティスについて学びます。