Files
Ubuntu_docs/PowerDNS_doker_install.md
2025-03-17 07:48:47 +05:00

7.4 KiB

Устанавливаем PowerDNS через Docker Compose в директорию /opt/powerdnsa Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48 PowerDNS Authoritative

ssh-keygen -R 192.168.200.85
ssh igor@192.168.200.85 -p 22
  sudo apt update &&
  sudo apt install docker.io docker-compose -y
  sudo mkdir -p /opt/powerdnsa &&
  cd /opt/powerdnsa &&
  sudo mkdir -p data &&
  cd /opt/powerdnsa/data

Инициализируем базу данных так как сам контейнер её не создаёт

sudo apt install sqlite3 -y

Create database:

sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 ".databases"

Create database structure

sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 <<EOF

PRAGMA foreign_keys = 1;

CREATE TABLE domains (
  id                    INTEGER PRIMARY KEY,
  name                  VARCHAR(255) NOT NULL COLLATE NOCASE,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INTEGER DEFAULT NULL,
  type                  VARCHAR(8) NOT NULL,
  notified_serial       INTEGER DEFAULT NULL,
  account               VARCHAR(40) DEFAULT NULL,
  options               VARCHAR(65535) DEFAULT NULL,
  catalog               VARCHAR(255) DEFAULT NULL
);

CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);


CREATE TABLE records (
  id                    INTEGER PRIMARY KEY,
  domain_id             INTEGER DEFAULT NULL,
  name                  VARCHAR(255) DEFAULT NULL,
  type                  VARCHAR(10) DEFAULT NULL,
  content               VARCHAR(65535) DEFAULT NULL,
  ttl                   INTEGER DEFAULT NULL,
  prio                  INTEGER DEFAULT NULL,
  disabled              BOOLEAN DEFAULT 0,
  ordername             VARCHAR(255),
  auth                  BOOL DEFAULT 1,
  FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE INDEX records_lookup_idx ON records(name, type);
CREATE INDEX records_lookup_id_idx ON records(domain_id, name, type);
CREATE INDEX records_order_idx ON records(domain_id, ordername);


CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL COLLATE NOCASE,
  account               VARCHAR(40) NOT NULL
);

CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);


CREATE TABLE comments (
  id                    INTEGER PRIMARY KEY,
  domain_id             INTEGER NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) DEFAULT NULL,
  comment               VARCHAR(65535) NOT NULL,
  FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE INDEX comments_idx ON comments(domain_id, name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);


CREATE TABLE domainmetadata (
 id                     INTEGER PRIMARY KEY,
 domain_id              INT NOT NULL,
 kind                   VARCHAR(32) COLLATE NOCASE,
 content                TEXT,
 FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);


CREATE TABLE cryptokeys (
 id                     INTEGER PRIMARY KEY,
 domain_id              INT NOT NULL,
 flags                  INT NOT NULL,
 active                 BOOL,
 published              BOOL DEFAULT 1,
 content                TEXT,
 FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE INDEX domainidindex ON cryptokeys(domain_id);


CREATE TABLE tsigkeys (
 id                     INTEGER PRIMARY KEY,
 name                   VARCHAR(255) COLLATE NOCASE,
 algorithm              VARCHAR(50) COLLATE NOCASE,
 secret                 VARCHAR(255)
);

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

EOF

Даём права на директорию где будет работать SQLIte (создавать временные файлы):

sudo chown -R 1001:1001 /opt/powerdnsa/data &&
sudo chmod -R 775 /opt/powerdnsa/data &&
sudo chmod -R 777 /opt/powerdnsa/data

Создаём конфигурационный файл так как запарился через environment задавать параметры:

cd /opt/powerdnsa
sudo tee docker-compose.yml > /dev/null <<EOF
services:
  powerdns:
    image: powerdns/pdns-auth-48
    container_name: powerdns
    restart: unless-stopped
    ports:
      - "5300:53/udp"
      - "5300:53/tcp"
      - "8081:8081/tcp"
    volumes:
      - ./data:/var/lib/powerdns
    environment:
      - PDNS_LOCAL_ADDRESS=0.0.0.0
      - PDNS_GSQLITE3_DATABASE=/var/lib/powerdns/pdns.sqlite3
      - PDNS_LAUNCH=gsqlite3
      - PDNS_API=yes
      - PDNS_API_KEY=0aa08433-52a9-4611-9eed-5c5a08a508fc
      - PDNS_MASTER=yes
      - PDNS_ALLOW_AXFR_IPS=127.0.0.1

      - PDNS_WEBSERVER=yes
      - PDNS_WEBSERVER_ADDRESS=0.0.0.0
      - PDNS_WEBSERVER_PORT=8081
EOF

если остались старые образы то удаляем их:

sudo docker ps
  sudo docker stop 913bf9fec5eb &&
  sudo docker rm 913bf9fec5eb &&
  sudo docker rmi powerdns/pdns-auth-48
  cd /opt/powerdnsa &&
  sudo docker-compose up -d
  cd /opt/powerdnsa &&
  sudo docker-compose down

Проверяем переменные окружения не заходя в контейнер

sudo docker inspect powerdns | grep -A 20 "Env"
sudo docker-compose exec powerdns env | grep PDNS_

Проверяем открыты ли порты (не должен полностью отработать так как это не рекурсивный сервис)

  sudo apt update && sudo apt install net-tools -y &&
  sudo netstat -tulnp | grep 5300
  sudo netstat -tulnp | grep 8081

Создаём зону и добавляем запись

sudo docker exec -it powerdns pdnsutil create-zone test ns1.test &&
sudo docker exec -it powerdns pdnsutil add-record test ccalm A 192.168.200.184

Проверим список зон

sudo docker exec -it powerdns pdnsutil list-all-zones &&
sudo docker exec -it powerdns pdnsutil list-zone test

Проверяем отвечалет ли:

dig @127.0.0.1 -p 5300 ccalm.test A

проверяем что порт открыт:

telnet 127.0.0.1 8081
wget -qO- http://127.0.0.1:8081
sudo docker exec -it powerdns sh

Посмотреть логи контейнера:

sudo docker logs --tail=100 -f 913bf9fec5eb

wget -qO- http://127.0.0.1:8081/api/v1/servers/localhost --header="X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508fc"


Пытаюсь зазобраться почему не работает Web сервер

Захожу в докер под рутом

sudo docker exec -it --user root powerdns /bin/sh
apt update && apt install -y mc

Проверяем какие порты слушает

apt update && apt install -y net-tools
netstat -tulnp

Смотрим все переменые окружения:

env

Перезапускаю в докере

/usr/sbin/pdns_server --daemon=no --guardian=no --loglevel=9