Important
Aquest article és obsolet i pot contenir informació desactualitzada. Si us plau, consulta la documentació més recent per obtenir la informació actualitzada.
PowerDNS és un servidor DNS gratuït i de codi obert escrit en llenguatge C ++ que es pot fer servir per allotjar dominis utilitzant DNSSEC. S'executa en la majoria dels sistemes operatius basats en Unix i utilitza bases de dades com MariaDB, MySQL, PostgreSQL i SQLite per emmagatzemar les seves entrades DNS. PowerDNS utilitza la memòria cau de paquets i la memòria cau de consultes per emmagatzemar les consultes de rerefons. PowerDNS inclou una eina basada en web integrada: PowerDNS-Admin, que es pot utilitzar per administrar PowerDNS a través de la interfície web.
En aquest tutorial, explicarem com instal·lar PowerDNS en un servidor al núvol que executi Ubuntu 18.04.
Requisits
Un servidor al núvol vps que executi Ubuntu 18.04.
Una contrasenya de root configurada al teu servidor al núvol.
Comencem
Primer, et recomanem actualitzar el teu servidor al núvol amb l'última versió. Pots fer-ho amb l'ordre següent:
# apt-get update && apt-get upgrade -yUn cop el sistema estigui actualitzat, reinicia'l per aplicar tots els canvis.
Instal·lar i configurar MariaDB
Primer, hauràs d'instal·lar la base de dades MariaDB al teu servidor. Pots fer-ho executant l'ordre següent:
# apt-get install mariadb-server mariadb-client -yUn cop s'hagi completat la instal·lació, hauràs de crear la base de dades i l'usuari per a PowerDNS.
Primer, inicia sessió a l'intèrpret d'ordres de MariaDB amb l'ordre següent:
# mysql -u root -pIntrodueix la contrasenya de root quan se't demani i, després, crea una base de dades i un usuari per a PowerDNS amb l'ordre següent:
MariaDB [(none)]>CREATE DATABASE powerdns;
MariaDB [(none)]>GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';A continuació, actualitza/recarrega els privilegis amb l'ordre següent:
MariaDB [(none)]>FLUSH PRIVILEGES;A continuació, canvia a la base de dades PowerDNS i crea les taules necessàries amb l'ordre següent:
MariaDB [(none)]>USE powerdns;
MariaDB [powerdns]>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';
MariaDB [powerdns]>CREATE UNIQUE INDEX name_index ON domains(name);
MariaDB [powerdns]>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';
MariaDB [powerdns]>CREATE INDEX nametype_index ON records(name,type);
MariaDB [powerdns]>CREATE INDEX domain_id ON records(domain_id);
MariaDB [powerdns]>CREATE INDEX ordername ON records (ordername);
MariaDB [powerdns]>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';
MariaDB [powerdns]>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';
MariaDB [powerdns]>CREATE INDEX comments_name_type_idx ON comments (name, type);
MariaDB [powerdns]>CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
MariaDB [powerdns]>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';
MariaDB [powerdns]>CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
MariaDB [powerdns]>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';
MariaDB [powerdns]>CREATE INDEX domainidindex ON cryptokeys(domain_id);
MariaDB [powerdns]>CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id)) Engine=InnoDB CHARACTER SET 'latin1';
MariaDB [powerdns]>CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Pots comprovar les taules creades amb l'ordre següent:
# MariaDB [powerdns]> show tables;
+--------------------+
| Tables_in_powerdns |
+--------------------+
| comments |
| cryptokeys |
| domainmetadata |
| domains |
| records |
| supermasters |
| tsigkeys |
+--------------------+
7 rows in set (0.00 sec)Instal·la PowerDNS
Primer, hauràs de deshabilitar systemd-resolution perquè PowerDNS funcioni correctament.
Pots fer-ho amb l'ordre següent:
# systemctl disable systemd-resolved
# systemctl stop systemd-resolvedA continuació, elimina el fitxer resolv.conf predeterminat i crea'n un de nou amb l'ordre següent:
# rm /etc/resolv.conf
# echo "nameserver 8.8.8.8" > /etc/resolv.confAra, instal·la PowerDNS amb l'ordre següent:
# apt-get install pdns-server pdns-backend-mysql virtualenv -yDurant la instal·lació, se't preguntarà si vols configurar la base de dades PowerDNS amb dbconfig-common. Selecciona ‘No’ i prem ‘Enter’ per continuar amb la instal·lació.
A continuació, hauràs de configurar PowerDNS per utilitzar MySQL. Pots fer-ho editant el fitxer de configuració de PowerDNS:
# nano /etc/powerdns/pdns.d/pdns.local.gmysql.confFes els canvis següents:
launch+=gmysql
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=password
gmysql-dnssec=yesDesa i tanca el fitxer. Després, reinicia el servei PowerDNS per aplicar els canvis:
# systemctl restart pdnsTambé pots verificar l'estat de PowerDNS amb l'ordre següent:
# systemctl status pdnsHauries de veure el resultat següent:
pdns.service - PowerDNS Authoritative Server
Loaded: loaded (/lib/systemd/system/pdns.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-06-24 15:29:08 UTC; 5s ago
Docs: man:pdns_server(1)
man:pdns_control(1)
https://doc.powerdns.com
Main PID: 8915 (pdns_server)
Tasks: 8 (limit: 1718)
CGroup: /system.slice/pdns.service
└─8915 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: TCPv6 server bound to [::]:53
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: PowerDNS Authoritative Server 4.1.1 (C) 2001-2017 PowerDNS.COM BV
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: Using 64-bits mode. Built using gcc 7.3.0.
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistr
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: Creating backend connection for TCP
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: [bindbackend] Parsing 0 domain(s), will report when done
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Jun 24 15:29:08 ubuntu1804 systemd[1]: Started PowerDNS Authoritative Server.
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: About to create 3 backend threads for UDP
Jun 24 15:29:08 ubuntu1804 pdns_server[8915]: Done launching threads, ready to distribute questionsInstal·la PowerDNS-Admin
A continuació, hauràs d'instal·lar la interfície web de PowerDNS-Admin al teu servidor. Pots administrar el domini, l'usuari, la base de dades local, LDAP, el servei PowerDNS i molt més amb PowerDNS-Admin.
Primer, hauràs d'instal·lar alguns paquets necessaris per a PowerDNS-Admin al teu servidor. Pots instal·lar-los tots amb l'ordre següent:
# apt-get install python3-dev libmysqlclient-dev python-mysqldb libsasl2-dev libffi-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev pkg-config -yA continuació, també hauràs d'instal·lar Yarn al teu servidor.
Primer, descarrega i afegeix la clau GPG amb l'ordre següent:
# curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -A continuació, afegeix el repositori de Yarn amb l'ordre següent:
# echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.listA continuació, actualitza el repositori i instal·la Yarn amb l'ordre següent:
# apt-get update && apt-get install yarn -yA continuació, descarrega l'última versió de PowerDNS-Admin des del repositori de Git:
# git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-adminA continuació, crea l'entorn virtual per a PowerDNS-Admin amb l'ordre següent:
# cd /opt/web/powerdns-admin
# virtualenv -p python3 flaskA continuació, activa l'entorn python3 i instal·la tots els paquets necessaris amb l'ordre següent:
# . ./flask/bin/activate
# pip install -r requirements.txtA continuació, hauràs de canviar el nom del fitxer config_template.py i definir la teva base de dades en aquest fitxer:
# mv config_template.py config.py
# nano config.pyFes els canvis següents:
Desa i tanca el fitxer. Després, crea el fitxer d'esquema de la base de dades:
export FLASK_APP=app/__init__.py
flask db upgrade
flask db migrate -m "Init DB"
A continuació, genera els fitxers de recursos utilitzant l'ordre yarn tal com es mostra a continuació:
# yarn install --pure-lockfile
# flask assets buildHauries de veure el resultat següent:
Building bundle: generated/login.js[2019-06-24 16:27:54,218] [INFO] | Building bundle: generated/login.js
Building bundle: generated/validation.js
[2019-06-24 16:27:54,848] [INFO] | Building bundle: generated/validation.js
Building bundle: generated/login.css
[2019-06-24 16:27:54,859] [INFO] | Building bundle: generated/login.css
Building bundle: generated/main.js
[2019-06-24 16:29:31,467] [INFO] | Building bundle: generated/main.js
Building bundle: generated/main.css
[2019-06-24 16:29:34,217] [INFO] | Building bundle: generated/main.css
A continuació, pots verificar el teu PowerDNS-Admin amb l'ordre següent:
# ./run.py
# * Serving Flask app "app" (lazy loading)
# * Environment: production
Advertiment
No utilitzis el servidor de desenvolupament en un entorn de producció. En lloc seu, utilitza un servidor WSGI de producció.
* Debug mode: on
[2019-06-24 16:49:06,065] [INFO] | * Running on http://127.0.0.1:9191/ (Press CTRL+C to quit)
[2019-06-24 16:49:06,068] [INFO] | * Restarting with stat
[2019-06-24 16:49:19,104] [WARNING] | * Debugger is active!
[2019-06-24 16:49:19,107] [INFO] | * Debugger PIN: 193-133-562Primer, instal·la Nginx amb l'ordre següent:
# apt-get install nginx -yA continuació, hauràs de crear un fitxer d'amfitrió virtual Nginx per a PowerDNS-Admin. Pots fer-ho amb l'ordre següent:
# nano /etc/nginx/conf.d/powerdns-admin.confAfegeix les línies següents:
server {
listen *:80;
server_name example.com;
index index.html index.htm index.php;
root /opt/web/powerdns-admin;
access_log /var/log/nginx/powerdns.access.log combined;
error_log /var/log/nginx/powerdns.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/app;
location ~* \.(jpg|jpeg|png|gif)$ {
expires 365d;
}
location ~* ^.+.(css|js)$ {
expires 7d;
}
}
location / {
proxy_pass http://unix:/opt/web/powerdns-admin/powerdns-admin.sock;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
}
}
Desa i tanca el fitxer quan hagis acabat. Després, reinicia el servei Nginx per aplicar tots els canvis:
# systemctl restart nginxCrea el fitxer del servei de Systemd per a PowerDNS-Admin
A continuació, hauràs de crear un fitxer de servei de systemd per a PowerDNS-Admin. Així podràs iniciar, aturar i administrar el servei PowerDNS-Admin. Pots fer-ho amb l'ordre següent:
# nano /etc/systemd/system/powerdns.serviceAfegeix les línies següents. Quan hagis acabat, desa i tanca el fitxer. Després, inicia el servei PowerDNS-Admin i habilita'l perquè s'iniciï en arrencar amb les ordres que apareixen al final del bloc següent:
[Unit]
Description=PowerDNS-Admin
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/opt/web/powerdns-admin
ExecStart=/opt/web/powerdns-admin/flask/bin/gunicorn --workers 2 --bind unix:/opt/web/powerdns-admin/powerdns-admin.sock app:app
[Install]
WantedBy=multi-user.target
Guarda y cierra el archivo cuando hayas terminado. Luego, inicia el servicio PowerDNS-Admin y habilítalo para que se inicie en el arranque con el siguiente comando:
systemctl daemon-reload
systemctl start powerdns
systemctl enable powerdns
Ara ja tens PowerDNS-Admin instal·lat i configurat. Pots obrir el navegador web i l'URL http://example.com. Se't redirigirà a la interfície web de PowerDNS-Admin.
Conclusió
Enhorabona! Has instal·lat i configurat correctament PowerDNS i PowerDNS-Admin al servidor Ubuntu 18.04. Ja pots allotjar els teus registres de domini i zona DNS mitjançant la interfície web de PowerDNS-Admin.
Tens alguna pregunta sobre aquest tutorial? No dubtis a contactar amb nosaltres. Estarem encantats d'ajudar-te 🙂