286 lines
7.4 KiB
Markdown
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
|
|
```
|
|
|
|
|