Ir ao conteúdo

Gerenciando o PowerDNS com o PowerDNS-Admin

Salve Salve Pessoal!

No post anterior falei mostrei como podemos instalar e configurar o PowerDNS 4.3 Authoritative no CentOS 8 / Oracle Linux 8 / RHEL 8, veja o post no link abaixo:

Instalando o PowerDNS 4.3 Authoritative no CentOS 8 / Oracle Linux 8 / RHEL 8

Porém o gerenciamento dele é um pouco complexo se tivermos que fazer tudo via o console do banco de dados.

Para resolver esse problema vamos utilizar uma interface web, assim podemos gerenciar o PowerDNS de uma maneira bem mais fácil.

Existe diversas interfaces de gerenciamento, elas podem fazer o gerenciamento acessando diretamente o banco de dados ou através da API do PowerDNS.

Já utilizei duas dessas interfaces:

PowerDNS-Admin: desenvolvida em Python e JS, o acesso é través da API.

https://github.com/ngoduykhanh/PowerDNS-Admin

Poweradmin: desenvolvida em PHP, o acesso é através do banco de dados.

https://github.com/poweradmin/poweradmin

Para ver todas as interfaces acessem o link abaixo:

https://github.com/PowerDNS/pdns/wiki/WebFrontends

Hoje em dia sempre uso PowerDNS-Admin pois ela tem bem mais features de gerenciamento do que as outras interfaces e podemos fazer o deploy dela diretamente em um container, que será o nosso caso de hoje.

Então vamos ao que interessa! 😀

Vamos fazer a instalação do Docker no mesmo servidor que está executando o PowerDNS.

1 – Instale o pacote yum-utils.

# yum install -y yum-utils

2 – Adicione o repositório do docker.

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3 – Vamos instalar o docker, também estou instalando o git pois vamos precisar dele para fazer um clone do projeto PowerDNS-Admin e do jq para os testes da API.

# yum install docker-ce docker-ce-cli containerd.io git jq --nobest

4 – Agora vamos iniciar e habilitar a inicialização do docker junto com o sistema operacinal.

# systemctl enable docker
# systemctl start docker

Pronto, agora já temos nosso docker rodando.

Agora precisamos instalar o docker compose.

5 – Faça o download do docker compose.

# curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

6 – Varmos dar permissão de execução.

# chmod +x /usr/local/bin/docker-compose

7 – Vamos criar o link simbólico.

# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Agora nos vamos as configurações do PowerDNS-Admin.

8 – Vamos fazer um clone do projeto.

# git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git

9 – Após fazer o clone do projeto entre na pasta PowerDNS-Admin.

# cd PowerDNS-Admin

Dentro da pasta teremos vários arquivos, nós só precisamo de um arquivo, o arquivo docker-compose.yml. Porém eu particularmente deixo tudo para estudar o projeto.

10 – Vamos editar esse arquivo, use seu editor favorito, como já falei em diversos posts eu sempre uso o vim.

# vim docker-compose.yml

Nós só precisamos editar um campo, que é o SQLALCHEMY_DATABASE_URI com as informações de conexão da API, as informações são as seguintes:

SQLALCHEMY_DATABASE_URI = ‘mysql://’ + USUARIO_DO_BANCO + ‘:’ + SENHA_DO_USUARIO_DO_BANCO + ‘@’ + HOST_DO_BANCO + ‘/’ + NOME_DO_BANCO

Usando as informações do nosso post anterior, nosso caso fica assim:

– SQLALCHEMY_DATABASE_URI=mysql://pdnsuser:Mudar123@10.20.30.220/powerdns

O campo – “9191:80” fica a seu critério, se você não entende de docker esse campo vai redirecionar as requisições na porta 9191 para a porta 80 no container do PowerDNS-Admin, como normalmente não executamos nenhum outro serviço web no servidor, podemos modificar para a porta 80 mesmo, ficando assim:

– “80:80”

Nosso arquivo editado ficará assim:

11 – Agora vamos acessar nosso banco de dados e configurar uma nova conexão com o mesmo.

# grant all privileges on powerdns.* to pdnsuser@'%' identified by 'Mudar123';

No comando acima substitui o @localhost por @’%’ permitindo a conexão de qualquer host.

12 – Agora você precisa liberar a rede do docker no firewall com destino a porta ao mysql (3306), execute o comando abaixo:

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.18.0.0/16 service name=mysql accept' --permanent
# firewall-cmd --reload

OBS: Ajuste as configurações de acesso de acordo com a sua rede e garantindo a melhor segurança possível, apesar de termos liberado o acesso ao banco de dados do PowerDNS de qualquer host o firewall está permitindo conexões que venham apenas da rede do docker, podemos limitar isso ao endereço IP do container também.

11 – Agora vamos iniciar o container.

# docker-compose up -d

12 – Agora basta acessar via navegador o endereço IP do servidor, nesse primeiro acesso clique em Create an account para criar uma conta.

13 – Preencha os dados solicitados e clique em Register.

14 – Após concluir o registro faça login, depois que você logar será direcionado para a página de configuração da API.

15 – Agora vamos configurar o PowerDNS para executar o webserver da API, acesse o arquivo de configuração /etc/pdns/pdns.conf e insira os seguintes dados.

api=yes
api-key=ODop9YtUf7ah
webserver=yes
webserver-address=10.20.30.220
webserver-allow-from=10.20.30.0/24,172.18.0.0/16

OBS: a chave da api “ODop9YtUf7ah” deve ser gerada por você mesmo, normalmente uso o comando pwmake para gerar minhas chaves, altere o endereço IP pelo endereço IP do seu servidor e permita a conexão da sua rede e da rede do docker.

# pwmake 12

Nosso arquivo deve ficar assim:

16 – Reinicie o PowerDNS

# systemctl restart pdns

17 – Por padrão a API do PowerDNS usa a porta 8081, precisamos liberar nossa rede e a rede do docker no firewall para ter acesso a essa porta também.

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.18.0.0/16 port port=8081 protocol=tcp accept' --permanent
# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.20.30.0/24 port port=8081 protocol=tcp accept' --permanent
# firewall-cmd --reload

18 – Agora vamos fazer uma consulta simples via console para ver se  a API do PowerDNS está respondendo, troque a chave da API pela sua e o endereço IP também.

# curl -H 'X-API-Key: ODop9YtUf7ah' http://10.20.30.220:8081/api/v1/servers/localhost/zones | jq .

Como podemos ver na imagem ele retornou os dados com o domínio rodrigolira.lab criado no post anterior, a API está funcionando corretamente.

19 – Volte ao PowerDNS-Admin e insira a URL a chave da API e depois clique em Update.

Pronto, se tudo foi configurado corretamente quando você clicar em Dashboard o domínio que foi criado deve aparecer.

Agora é so explorar e ver suas funcionalidades e facilidades.

No próximo post sobre PowerDNS irei mostrar como configurar para ele trabalhar como master e outro serviodr como slave.

Até a próxima!

😀

Publicado emLINUXREDES

4 Comentários

  1. Jorge Jorge

    Olá.
    Alguns erros pelo meio
    Ao correr o comando: yum install docker-ce docker-ce-cli containerd.io git jq
    Error: Problem: package docker-ce-3:19.03.11-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
    Solução:
    # dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
    # yum update
    # yum install docker-ce docker-ce-cli containerd.io git jq –nobest

    No final quando tento adicionar novo dominio, aparece este erro:
    https://img.nbits.io/OAuBwPmB

    Alguma solução pra este erro?

    • Rodrigo Lira Rodrigo Lira

      Oi Jorge, você chegou a verificar o log do container do PowerDNS-Admin e ver o que pode estar acontecendo?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Descubra mais sobre Rodrigo Lira

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue reading