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

286 lines
7.4 KiB
Markdown

Устанавливаем PowerDNS через Docker Compose в директорию /opt/powerdnsa
Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48
PowerDNS Authoritative
```sh
ssh-keygen -R 192.168.200.85
```
```sh
ssh igor@192.168.200.85 -p 22
```
```sh
sudo apt update &&
sudo apt install docker.io docker-compose -y
```
```sh
sudo mkdir -p /opt/powerdnsa &&
cd /opt/powerdnsa &&
sudo mkdir -p data &&
cd /opt/powerdnsa/data
```
Инициализируем базу данных так как сам контейнер её не создаёт
```sh
sudo apt install sqlite3 -y
```
Create database:
```sh
sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 ".databases"
```
Create database structure
```sql
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 (создавать временные файлы):
```sh
sudo chown -R 1001:1001 /opt/powerdnsa/data &&
sudo chmod -R 775 /opt/powerdnsa/data &&
sudo chmod -R 777 /opt/powerdnsa/data
```
Создаём конфигурационный файл так как запарился через environment задавать параметры:
```sh
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
```
если остались старые образы то удаляем их:
```sh
sudo docker ps
```
```sh
sudo docker stop 913bf9fec5eb &&
sudo docker rm 913bf9fec5eb &&
sudo docker rmi powerdns/pdns-auth-48
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose up -d
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose down
```
Проверяем переменные окружения не заходя в контейнер
```sh
sudo docker inspect powerdns | grep -A 20 "Env"
```
```sh
sudo docker-compose exec powerdns env | grep PDNS_
```
Проверяем открыты ли порты (не должен полностью отработать так как это не рекурсивный сервис)
```sh
sudo apt update && sudo apt install net-tools -y &&
```
```sh
sudo netstat -tulnp | grep 5300
```
```sh
sudo netstat -tulnp | grep 8081
```
Создаём зону и добавляем запись
```sh
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
```
Проверим список зон
```sh
sudo docker exec -it powerdns pdnsutil list-all-zones &&
sudo docker exec -it powerdns pdnsutil list-zone test
```
Проверяем отвечалет ли:
```sh
dig @127.0.0.1 -p 5300 ccalm.test A
```
проверяем что порт открыт:
```sh
telnet 127.0.0.1 8081
```
```sh
wget -qO- http://127.0.0.1:8081
```
```sh
sudo docker exec -it powerdns sh
```
Посмотреть логи контейнера:
```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 сервер
Захожу в докер под рутом
```sh
sudo docker exec -it --user root powerdns /bin/sh
```
```sh
apt update && apt install -y mc
```
Проверяем какие порты слушает
```sh
apt update && apt install -y net-tools
```
```sh
netstat -tulnp
```
Смотрим все переменые окружения:
```sh
env
```
Перезапускаю в докере
```sh
/usr/sbin/pdns_server --daemon=no --guardian=no --loglevel=9
```