+
This commit is contained in:
380
PowerDNS_install_doker.md
Normal file
380
PowerDNS_install_doker.md
Normal file
@ -0,0 +1,380 @@
|
||||
# Устанавливаем авторитативный PowerDNS через Docker Compose в директорию /opt/powerdnsa
|
||||
|
||||
Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48
|
||||
PowerDNS Authoritative
|
||||
|
||||
Connect to CCALM Turkish infrastructure:
|
||||
```sh
|
||||
ssh igor@156.244.31.209 -p 2200
|
||||
```
|
||||
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
Как настроить MariaDB базу для использования в PowerDNS смотри:
|
||||
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
Похоже что 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
|
||||
network_mode: "host"
|
||||
environment:
|
||||
- PDNS_LOCAL_ADDRESS=127.0.0.1,156.244.31.209
|
||||
- PDNS_LAUNCH=gmysql
|
||||
- PDNS_API=yes
|
||||
- PDNS_API_KEY=0aa08433-52a9-4611-9eed-5c5a08a508f0
|
||||
- PDNS_MASTER=yes
|
||||
- PDNS_ALLOW_AXFR_IPS=127.0.0.1
|
||||
- PDNS_WEBSERVER=yes
|
||||
- PDNS_WEBSERVER_ADDRESS=127.0.0.1,156.244.31.209
|
||||
- PDNS_WEBSERVER_PORT=8081
|
||||
# MariaDB connection settings
|
||||
- PDNS_GMYSQL_HOST=127.0.0.1 # MariaDB на localhost хоста
|
||||
- PDNS_GMYSQL_PORT=3306
|
||||
- PDNS_GMYSQL_USER=poweruser
|
||||
- PDNS_GMYSQL_PASSWORD=uFqqXQEQwErjkQga6rcz
|
||||
- PDNS_GMYSQL_DBNAME=powerdns
|
||||
- PDNS_GMYSQL_DNSSEC=yes
|
||||
EOF
|
||||
```
|
||||
|
||||
```sh
|
||||
cd /opt/powerdnsa &&
|
||||
sudo docker-compose up -d
|
||||
```
|
||||
```sh
|
||||
cd /opt/powerdnsa &&
|
||||
sudo docker-compose down
|
||||
```
|
||||
Проверяем какие порты открыты:
|
||||
```sh
|
||||
sudo netstat -tuln
|
||||
```
|
||||
Проверяем что страница работает
|
||||
```sh
|
||||
curl -v http://localhost:8081
|
||||
```
|
||||
|
||||
Смотрим что в логе
|
||||
```sh
|
||||
sudo docker logs powerdns
|
||||
```
|
||||
```sh
|
||||
curl -H "X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508f0" http://localhost:8081/api/v1
|
||||
```
|
||||
|
||||
|
||||
пробуем добавить тестовую зону по ключу
|
||||
```sh
|
||||
curl -X POST -H "X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508f0" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "localhost.", "kind": "Master", "dnssec": false, "soa_edit": "", "soa_edit_api": "DEFAULT"}' \
|
||||
http://localhost:8081/api/v1/servers/localhost/zones
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Инициализируем базу данных так как сам контейнер её не создаёт
|
||||
```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
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user