在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin

在本教程中,您將學習如何在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin。 PowerDNS管理員 是PowerDNS的Web管理界面。它使您可以從Web瀏覽器輕鬆創建和管理DNS區域。 PowerDNS Admin提供了用於管理PowerDNS的高級功能。這些包括;

  • 多域管理
  • 域模板
  • 用戶管理
  • 基於域的用戶訪問管理
  • 用戶活動記錄
  • 支持本地DB / SAML / LDAP / Active Directory用戶身份驗證
  • 支持Google / Github / Azure / OpenID OAuth
  • 支持兩因素驗證(TOTP)
  • 儀錶板和Pdns服務統計
  • DynDNS 2協議支持
  • 直接使用IPv6地址編輯IPv6 PTR(不再需要編輯文字地址!)
  • 用於處理區域和記錄的有限API

在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin


目錄

  • 在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin
    • 在Ubuntu 20.04上安裝和設置PowerDNS
    • 安裝必需的軟件包依賴項
    • 將PowerDNS Admin源代碼克隆到Web根目錄
    • 創建PowerDNS Admin Virtualenv
    • 配置PowerDNS Admin數據庫連接
    • 運行PowerDNS Admin
      • 啟用PowerDNS API訪問
      • 創建PowerDNS Admin Nginx網站
    • 創建PowerDNS Admin Systemd服務單元
    • 訪問PowerDNS Admin Web界面
      • 創建PowerDNS Admin管理用戶帳戶
    • 參考
    • 其他相關教程

在Ubuntu 20.04上安裝和設置PowerDNS

為了在Ubuntu 20.04上輕鬆地安裝和設置PowerDNS Admin,您需要已經使用一些關係數據庫來安裝和設置PowerDNS名稱服務器。

在之前的指南中,我們討論了如何在Ubuntu 20.04上使用MariaDB配置PowerDNS名稱服務器。請點擊以下鏈接進行設置。

在Ubuntu 20.04上輕鬆安裝和設置PowerDNS

注意:我們將PowerDNS Admin安裝在已安裝PowerDNS的同一服務器上。

安裝必需的軟件包依賴項

安裝Python 3庫和開發工具

apt install python3-dev

安裝各種必需的構建工具和軟件包依賴項。

apt install 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

安裝NodeJS

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo
apt install -y nodejs

安裝紗

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt update
apt install yarn

安裝Nginx HTTP服務器

apt install nginx

將PowerDNS Admin源代碼克隆到Web根目錄

將PowerDNS Admin git源代碼克隆到您的Nginx Web根目錄中。在此設置中,我們使用 /var/www/html/pdns,作為我們的PowerDNS Admin網絡根目錄。您的情況可能會有所不同。

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns

創建PowerDNS Admin Virtualenv

導航到PowerDNS Admin Web根目錄並創建一個virtualenv。

cd /var/www/html/pdns/
virtualenv -p python3 flask

接下來,激活您的Python 3虛擬環境並安裝所需的Python 3庫

source ./flask/bin/activate
pip install -r requirements.txt

配置PowerDNS Admin數據庫連接

退出virtualenv並編輯默認的PowerDNS管理員配置文件$ WEB_ROOT / powerdnsadmin / default_config.py,以定義數據庫連接詳細信息。將$ WEB_ROOT替換為Web根目錄的路徑。

deactivate
vim /var/www/html/pdns/powerdnsadmin/default_config.py

在基本的應用程序配置上,您可以替換SALT和SECRET_KEY密鑰,設置綁定地址和端口;

### BASIC APP CONFIG
SALT = 'xohDoozee8Zuneekooch9ohrieghei'
SECRET_KEY = 'hohru1aethaeyahpheH7Gaathaikah'
BIND_ADDRESS = '192.168.57.3'
PORT = 9191
HSTS_ENABLED = False
OFFLINE_MODE = False

在數據庫配置上,配置您的PowerDNS數據庫連接詳細信息。請注意,我們使用的是在按照指南中的定義設置PowerDNS時已經創建的詳細信息。


### DATABASE CONFIG
SQLA_DB_USER = 'pdnsadmin'
SQLA_DB_PASSWORD = 'PdnSPassW0rd'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'kifarunixdemopdns'
SQLALCHEMY_TRACK_MODIFICATIONS = True

保存並退出配置。

接下來,重新激活virtualenv運行數據庫遷移;

cd /var/www/html/pdns/
source ./flask/bin/activate
export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade

上面的命令完成後,生成帶有yarn的資產文件;

yarn install --pure-lockfile
flask assets build

運行PowerDNS Admin

PowerDNS Admin現在已設置並準備就緒。可以通過執行以下命令以獨立模式運行 run.py 在Web根目錄中。

在此設置中,我們將使用Nginx Web服務器訪問PowerDNS Admin。

啟用PowerDNS API訪問

“ PowerDNS授權服務器具有內置的Web服務器,該服務器公開了JSON / REST API。 該API允許控制多個功能,讀取統計信息並修改區域內容,元數據和DNSSEC密鑰材料”。

打開PowerDNS配置文件,啟用API並設置API密鑰;

vim /etc/powerdns/pdns.conf
#################################
# api   Enable/disable the REST API (including HTTP listener)
#
# api=no
api=yes

#################################
# api-key       Static pre-shared authentication key for access to the REST API
#
# api-key=
api-key=ahqu4eiv2vaideep8AQu9nav5Aing0

保存並退出文件,然後重新啟動PowerDNS;

systemctl restart pdns

創建PowerDNS Admin Nginx網站

使用以下內容創建PowerDNS Admin Nginx網站。相應地替換Web根目錄。

vim /etc/nginx/conf.d/pdns-admin.conf
server {
  listen	*:80;
  server_name               pdnsadmin.kifarunix-demo.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默認站點並運行config語法檢查。

mv /etc/nginx/sites-enabled/default{,.old}
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
chown -R www-data: /var/www/html/pdns

重啟Nginx;

systemctl restart nginx

創建PowerDNS Admin Systemd服務單元

為了能夠將PowerDNS Admin作為systemd服務運行,請創建如下所示的單元文件;

cat > /etc/systemd/system/pdnsadmin.service << 'EOL'           
[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
EOL
cat > /etc/systemd/system/pdnsadmin.socket << 'EOL'
[Unit]
Description=PowerDNS-Admin socket

[Socket]
ListenStream=/run/pdnsadmin/socket

[Install]
WantedBy=sockets.target
EOL
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/

重新加載系統配置並啟動並啟用PowerDNS Admin服務以在系統啟動時運行;

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 Sat 2020-10-10 17:18:50 UTC; 2s ago
TriggeredBy: ● pdnsadmin.socket
   Main PID: 5646 (gunicorn)
      Tasks: 2 (limit: 2282)
     Memory: 61.5M
     CGroup: /system.slice/pdnsadmin.service
             ├─5646 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket powerdnsadmin:crea>
             └─5663 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket powerdnsadmin:crea>

Oct 10 17:18:50 ubuntu20 systemd[1]: Started PowerDNS-Admin.
Oct 10 17:18:51 ubuntu20 gunicorn[5646]: [2020-10-10 17:18:51 +0000] [5646] [INFO] Starting gunicorn 20.0.4
Oct 10 17:18:51 ubuntu20 gunicorn[5646]: [2020-10-10 17:18:51 +0000] [5646] [INFO] Listening at: unix:/run/pdnsadmin/socket (5646)
Oct 10 17:18:51 ubuntu20 gunicorn[5646]: [2020-10-10 17:18:51 +0000] [5646] [INFO] Using worker: sync
Oct 10 17:18:51 ubuntu20 gunicorn[5663]: [2020-10-10 17:18:51 +0000] [5663] [INFO] Booting worker with pid: 5663

● pdnsadmin.socket - PowerDNS-Admin socket
     Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-10-10 17:18:50 UTC; 2s ago
   Triggers: ● pdnsadmin.service
     Listen: /run/pdnsadmin/socket (Stream)
     CGroup: /system.slice/pdnsadmin.socket

Oct 10 17:18:50 ubuntu20 systemd[1]: Listening on PowerDNS-Admin socket.

訪問PowerDNS Admin Web界面

在防火牆上打開Nginx以允許外部訪問;

ufw allow "Nginx Full"

根據上述配置,您可以通過以下地址訪問PowerDNS Admin Web界面 http://server-hostname。您應該能夠看到PowerDNS Admin登錄屏幕。 (如果不是,請檢查PowerDNS管理員服務或Nginx錯誤日誌的狀態以獲取提示)。

在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin創建PowerDNS Admin管理用戶帳戶

請點擊 創建一個帳戶 創建第一個PowerDNS Admin管理員用戶。輸入用戶詳細信息。

PowerDNS Admin創建用戶帳戶

請點擊 寄存器 創建一個帳戶。

之後,使用您提供的用戶詳細信息登錄。成功登錄後,您應該進入PowerDNS Admin界面。

在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin

為了使PowerDNS Admin能夠連接到PowerDNS並對其進行管理,您需要提供API密鑰URL(通常默認情況下為http://127.0.0.1:8081)以及在PowerDNS配置文件中定義的API密鑰。

在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin

請點擊 更新資料 錯誤應該消失了。

點擊 儀錶板 轉到PowerDNS Admin儀錶板。

PowerDNS管理控制台

如您所見,我們已經在上一指南中添加了DNS記錄。如果您單擊下面的域名 託管域名,您應該添加我們已經添加的記錄;

在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin

那就是前區記錄。

如果單擊“儀錶板”>“託管域中的in-addr”下的反向區域,則應看到反向區域記錄。

在Ubuntu 20.04上輕鬆安裝和設置PowerDNS Admin

這標誌着我們的教程的結尾,該教程介紹了如何在Ubuntu 20.04上輕鬆安裝PowerDNS Admin。在我們的下一個指南中,我們將討論如何使用PowerDNS Admin管理DNS記錄。請享用。

參考

在Ubuntu或Debian上運行PowerDNS Admin

Sidebar