recent
أخبار ساخنة

شرح تثبيت PowerDNS Server و PowerDNS Admin على Ubuntu ... بالخطوات

الصفحة الرئيسية
شرح تثبيت PowerDNS Server و PowerDNS Admin على Ubuntu ... بالخطوات



PowerDNS
هو خادم مجاني ومفتوح المصدر (open-source).
يعمل على أنظمة تشغيل Unix و Linux و macOS.
يستخدم MySQL و MariaDB و PostgreSQL و Oracle لتخزين ملفات وسجلات الـ zone.
PowerDNS Admin
هي أداة قائمة على الويب تستخدم لإدارة PowerDNS. 
يمكنك إنشاء وإدارة DNS zones باستخدام متصفح الويب.
يأتي مع مجموعة غنية من الميزات:
يدعم IPv4 و IPv6.
صفحة الحالة (Status page) تعرض معلومات مفيدة.
إنشاء / تحديث تلقائي لسجلات PTR.
يدعم إنشاء bulk domain.
يدعم domain templates.
يدعم DNSSec.
يدعم DB و SAML و LDAP ومصادقة Active Directory.
في هذا البرنامج التعليمي ، سنشرح هنا تثبيت PowerDNS admin و PowerDNS على خادم Ubuntu 20.04.

المتطلبات الأساسية

خادم يعمل بنظام التشغيل Ubuntu 20.04.
اسم مجال (domain name) صالح يشير إلى عنوان IP الخاص بالخادم.
إعداد كلمة مرور الـ root للخادم.

تثبيت وإعداد MariaDB Server

سنحتاج إلى تثبيت خادم قاعدة بيانات MariaDB.
بشكل افتراضي لا يتوفر أحدث إصدار من MariaDB في مستودع Ubuntu 20.04 الافتراضي..
 قم بتثبيت الحزم المطلوبة بالأمر التالي:
apt-get install software-properties-common gnupg2 -y

 أضف MariaDB signing key  باستخدام الأمر التالي:
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 pdnsadmin@localhost identified by 'password';


امسح الامتيازات واخرج من MariaDB shell باستخدام الأمر التالي:
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 database schema إلى قاعدة بيانات PowerDNS.
 يمكنك استيراده بالأمر التالي:
mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

سنحتاج إلى تعريف تفاصيل PowerDNS database connection.
يمكنك القيام بذلك عن طريق تعديل الملف 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))     
                                    

تثبيت PowerDNS Admin

تثبيت التبعيات المطلوبة
 قم بتثبيت جميع التبعيات المطلوبة لمسؤول 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

بعد ذلك ، أضف مستودع yarn بالأمر التالي:
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 Admin
قم بتنزيل أحدث إصدار من PowerDNS admin من مستودع Git إلى مجلد Nginx root:
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns

قم بتغيير المجلد إلى المجلد الذي تم تنزيله وإنشاء Python virtual environment باستخدام الأمر التالي:
cd /var/www/html/pdns/
virtualenv -p python3 flask

قم بتنشيط virtual environment وقم بتثبيت جميع تبعيات Python باستخدام الأمر التالي:
source ./flask/bin/activate
pip install -r requirements.txt

قم بإلغاء التنشيط من Virtual environment باستخدام الأمر التالي:

deactivate

تحديد Database Connection

ستحتاج إلى تحديد Database Connection الـ 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 وقم بتنشيط virtual environment:

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


قم بإلغاء تنشيط virtual environment باستخدام الأمر التالي:
deactivate

تمكين PowerDNS Admin API

يستخدم PowerDNS admin واجهة برمجة تطبيقات JSON.
 يمكنك تفعيله عن طريق تعديل الملف pdns.conf:
nano /etc/powerdns/pdns.conf

قم بتغيير الأسطر التالية:
api=yes
api-key=yoursecretekey


احفظ وأغلق الملف.
أعد تشغيل خدمة PowerDNS لتطبيق التغييرات:
systemctl restart pdns

إعداد Nginx لـ  PowerDNS Admin

بعد ذلك ، سنحتاج إلى إعداد Nginx لـ PowerDNS admin.
أنشئ ملف Nginx virtual host باستخدام الأمر التالي:
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

إنشاء ملف خدمة Systemd لـ  PowerDNS Admin

سنحتاج إلى إنشاء ملف خدمة systemd لإدارة خدمة PowerDNS.
قم بإنشاء ملف خدمة 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


أنشئ ملف pdnsadmin sockt بالأمر التالي:
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 daemon بالأمر التالي:
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 Admin Web UI

افتح متصفح الويب الخاص بك وقم بالوصول إلى واجهة ويب PowerDNS admin باستخدام العنوان http://pdnsadmin.example.com.
ستتم إعادة توجيهك إلى الصفحة التالية:



انقر فوقCreate an account.
سترى الشاشة التالية:



قدم تفاصيل المستخدم المسؤول (admin) الخاص بك وانقر على Register لإنشاء حساب. 
ستشاهد صفحة تسجيل دخول PowerDNS admin في الشاشة التالية:



أدخل اسم مستخدم المسؤول (admin) وكلمة المرور وانقر على Sign.
يجب أن تشاهد واجهة ويب PowerDNS admin في الصفحة التالية:



قم بإدخال عنوان URL الخاص بواجهة PowerDNS API للاتصال بـ PowerDNS وإدارته. 
انقر Update لحفظ التغييرات.
ستشاهد الصفحة التالية:



انقر على Dashboard.
ستشاهد لوحة تحكم PowerDNS admin في الشاشة التالية:



google-playkhamsatmostaqltradent