# Powerdns install ubuntu 22.04 by Romenson_Felix ## Update the System ```bash= sudo apt update && sudo apt upgrade sudo apt update && sudo apt upgrade ``` ## Install the PowerDNS Database ```bash= sudo apt install software-properties-common gnupg2 -y curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup sudo bash mariadb_repo_setup ```` update packge and install mariadb ```bash= sudo apt update sudo apt install mariadb-server mariadb-client ``` Enable mariadb ```bash= sudo systemctl start mariadb sudo systemctl enable mariadb ``` login mysql ```bash= sudo mysql -u root ``` Create database ````=mysql CREATE DATABASE powerdns; ```` Create user and password ```=mysql GRANT ALL ON powerdns.* TO 'powerdns_user'@'%' IDENTIFIED BY 'Strongpassword'; ``` Reload privileges ```mysql= FLUSH PRIVILEGES; ``` Exit mysql ```mysql= EXIT ``` ## Install PowerDNS stop system resolv ```bash= sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved ``` ls -lh /etc/resolv.conf output **-rw-r--r-- 1 root root 49 Feb 23 04:53 /etc/resolv.conf** ```bash= sudo unlink /etc/resolv.conf ``` update resolv file ```bash= echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf ``` ```bash= sudo apt install pdns-server pdns-backend-mysql ``` ## Configure the PowerDNS Database import schema to database ```bash= mysql -u powerdns_user -p powerdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql sudo mysql -u root ``` ```mysql= use powerdns; show tables; ``` output [image] **comments cryptokeys domainmetadata domains records supermasters tsigkeys** create pdns conf ```bash= sudo vim /etc/powerdns/pdns.d/pdns.local.gmysql.conf ``` copy conf to file ```conf= # MySQL Configuration # Launch gmysql backend launch+=gmysql # gmysql parameters gmysql-host=127.0.0.1 gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=powerdns_user gmysql-password=Strongpassword gmysql-dnssec=yes # gmysql-socket= ```` fix permissions ```bash= sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gmysql.conf sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf ``` verify database connection ```bash= sudo systemctl stop pdns.service sudo pdns_server --daemon=no --guardian=no --loglevel=9 ``` [image] start odns services ```bash= sudo systemctl restart pdns sudo systemctl enable pdns ``` show open ports dns ```bash= sudo ss -alnp4 | grep pdns ``` output ```config= udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("pdns_server",pid=18530,fd=5)) tcp LISTEN 0 128 0.0.0.0:53 ``` you cab also if dns is responding requests ```bash= dig @127.0.0.1 ``` output ```config= ; <<>> DiG 9.16.22-Debian <<>> @127.0.0.1 ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 4882 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;. IN NS ;; Query time: 4 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Feb 23 06:03:49 EST 2022 ;; MSG SIZE rcvd: 28 ``` ## Install PowerDNS Admin ```bash= sudo apt install python3-dev sudo apt install libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv python3-venv build-essential libmariadb-dev git python3-flask -y ``` install nodejs ```bash= curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs ``` install yarn import repository ```bash= curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list ``` install ```bash= sudo apt update sudo apt install yarn -y ``` clone project powerdns-admin ```bash= sudo su - git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns ``` create virtual env ```bash= cd /var/www/html/pdns/ virtualenv -p python3 flask ``` active env and install requirements ```bash= source ./flask/bin/activate pip install --upgrade pip pip install -r requirements.txt deactivate ``` edit config.py ```bash= vim /var/www/html/pdns/powerdnsadmin/default_config.py ``` ```config= ### DATABASE CONFIG SQLA_DB_USER = 'powerdns_user' SQLA_DB_PASSWORD = 'Strongpassword' SQLA_DB_HOST = '127.0.0.1' SQLA_DB_NAME = 'powerdns' SQLALCHEMY_TRACK_MODIFICATIONS = True ``` create database schem ```bash= cd /var/www/html/pdns/ source ./flask/bin/activate export FLASK_APP=powerdnsadmin/__init__.py flask db upgrade ``` generate asset ```bash= yarn install --pure-lockfile flask assets build deactivate ``` ## Enable PowerDNS API access ```bash= sudo vim /etc/powerdns/pdns.conf ``` ```config= # 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=3ce1af6c-981d-4190-a559-1e691d89b90e #you api key ``` ```bash= sudo systemctl restart pdns ```` ## Create a PowerDNS Virtual Host file. ```bash= sudo apt intall nginx -y vim /etc/nginx/conf.d/powerdns-admin.conf ``` ```config= server { listen *:80; server_name pdnsadmin.computingforgeeks.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; } } ``` rename nginx file ```bash= mv /etc/nginx/sites-enabled/default{,.old} ``` ```bash= sudo nginx -t chown -R www-data: /var/www/html/pdns systemctl restart nginx ``` ## Create a System service file for PowerDNS ```bash= vim /etc/systemd/system/pdnsadmin.service ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up