Prefácio
Para necessidades pessoais em casa, instalei o VSphere, no qual executo um roteador virtual e um servidor Ubuntu como servidor de mídia e um monte de outras vantagens, e esse servidor deve estar acessível pela Internet. Mas o problema é que meu provedor fornece dados estáticos em troca de dinheiro, que sempre podem ser usados para fins mais úteis. Portanto, usei a combinação ddclient + cloudflare.
Tudo estava bem até que o ddclient parou de funcionar. Depois de fuçar um pouco, percebi que havia chegado a hora das muletas e das bicicletas, pois estava demorando muito para encontrar o problema. No final, tudo virou um pequeno daemon que simplesmente funciona e não preciso de mais nada.
Se alguém estiver interessado, seja bem-vindo ao gato.
Ferramentas usadas e como “isso” funciona
Então a primeira coisa que descobri no site da cloudflare é tudo o que você precisa saber sobre
Em geral, o invólucro foi tomado como base
Peguei um dos exemplos de atualização de DNS e adicionei o uso de um arquivo de configuração e a capacidade de atualizar vários registros A dentro de uma zona e, claro, um número ilimitado de zonas.
A lógica é a seguinte:
- O script recebe uma lista de zonas do arquivo de configuração e percorre-as
- Em cada zona, o script percorre cada registro DNS do tipo A ou AAAA e verifica o IP público com o registro
- Se o IP for diferente, ele o altera; caso contrário, ele pula a iteração do loop e passa para a próxima.
- Adormece pelo tempo especificado na configuração
Instalação e configuração
Provavelmente seria possível criar um pacote .deb, mas não sou bom nisso e não é tão difícil.
Descrevi o processo detalhadamente em README.md em
Mas, por precaução, vou descrevê-lo em russo em termos gerais:
- Certifique-se de ter python3 e python3-pip instalados, caso contrário, instale-os (no Windows, python3-pip é instalado junto com Python)
- Clone ou baixe o repositório
- Instale as dependências necessárias.
python3 -m pip install -r requirements.txt
- Execute o script de instalação
Para Linux:chmod +x install.sh sudo ./install.sh
Para Windows: windows_install.bat
- Edite o arquivo de configuração
Para Linux:sudoedit /etc/zen-cf-ddns.conf
Para Windows:
Abra o arquivo zen-cf-ddns.conf na pasta onde você instalou o script.
Este é um arquivo JSON normal, as configurações não são nada complicadas - descrevi especificamente 2 zonas diferentes nele como exemplo.
O que está por trás dos instaladores?
instalar.sh para Linux:
- Um usuário é criado para executar o daemon, sem criar um diretório inicial e sem a capacidade de fazer login.
sudo useradd -r -s /bin/false zen-cf-ddns
- Um arquivo de log é criado em /var/log/
- Torne o usuário recém-criado o proprietário do arquivo de log
- Os arquivos são copiados para seus locais (config em/etc, arquivo executável em/usr/bin, arquivo de serviço em/lib/systemd/system)
- O serviço está ativado
windows_install.bat para Windows:
- Copia o arquivo executável e de configuração para uma pasta especificada pelo usuário
- Cria uma tarefa no agendador para executar o script na inicialização do sistema
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Após alterar a configuração, o script precisa ser reiniciado; no Linux tudo é simples e familiar:
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
para Windows você terá que encerrar o processo pythonw e executar novamente o script (estou com preguiça de escrever um serviço para Windows em C#):
taskkill /im pythonw.exe
Isso completa a instalação e configuração, aproveite para sua saúde.
Para quem quiser ver o código Python não tão bonito, aqui está
Licenciado pelo MIT, então faça o que quiser com essas coisas.
PS: Entendo que acabou sendo uma espécie de muleta, mas faz seu trabalho com força.
ATUALIZAÇÃO: 11.10.2019/17/37 XNUMX:XNUMX
Encontrei mais 1 problema, e se alguém me disser como resolver ficarei muito grato.
O problema é que se você instalar dependências sem sudo python -m pip install -r ..., os módulos não serão visíveis para o usuário do serviço, e eu não gostaria de forçar os usuários a instalar módulos no sudo, e isso é incorreto.
Como fazer com que fique lindo?
UPD: 11.10.2019/19/16 XNUMX:XNUMX O problema foi resolvido usando venv.
Houve várias mudanças. O próximo lançamento será nos próximos dias.
Fonte: habr.com