Prefácio

Para necessidades pessoais, ele criou o VSphere, no qual eu giro um roteador virtual e um servidor Ubuntu como um servidor de mídia e um monte de brindes, e esse servidor deve estar acessível na Internet. Mas o problema é que meu provedor fornece estática por dinheiro, que você pode encontrar sempre um aplicativo mais útil. Portanto, usei um monte de ddclient + cloudflare.
Tudo estava bem até o ddclient parar de funcionar. Depois de cavar um pouco, percebi que havia chegado a hora de muletas e bicicletas, pois o tempo para procurar o problema começou a demorar muito. No final, tudo se transformou em um pequeno demônio que simplesmente funciona, mas eu não preciso de mais nada.
Quem se importa - bem-vindo ao gato.
Ferramentas usadas e como funciona
Portanto, a primeira coisa que aprendi no site cloudflare é tudo o que você precisa saber sobre a
API . E eu já estava sentado para implementar tudo em Python (depois de conhecer o Python, eu o uso com mais frequência para algumas tarefas simples ou quando preciso criar rapidamente um protótipo) quando de repente me deparei com uma implementação quase pronta.
Em geral, o wrapper
python-cloudflare foi tomado como base.
Tomei um exemplo para atualizar o 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, naturalmente, um número ilimitado de zonas.
A lógica é a seguinte:
- O script recebe uma lista de zonas do arquivo de configuração e passa por elas em um loop
- 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, altere-o; caso contrário, pule a iteração do loop e passe para a próxima
- Adormece no horário especificado na configuração
Instalação e configuração
Provavelmente, seria possível criar um pacote .deb, mas não sou forte nisso e não é tão complicado.
Descrevi o processo em detalhes em README.md na
página do repositório .
Mas por precaução, descreverei em russo em termos gerais:
- Verifique se você tem o python3 e o python3-pip instalados, caso contrário, instale (no Windows, o python3-pip está instalado com o Python)
- Clonar ou baixar 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 em que você instalou o script.
Este é um arquivo JSON comum, nada é complicado pelas configurações - eu descrevi especificamente como exemplo 2 zonas diferentes nele.
O que está escondido atrás dos instaladores?
install.sh para Linux:
- Um usuário é criado para iniciar o daemon, sem criar um diretório inicial e recursos de login.
sudo useradd -r -s /bin/false zen-cf-ddns
- Um arquivo de log é criado em / var / log /
- Tornamos o proprietário do arquivo de log do usuário recém-criado
- Os arquivos são copiados em seus locais (configuração 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:
- Copiar arquivo executável e arquivo de configuração para a pasta especificada pelo usuário
- Cria uma tarefa no planejador para executar um script na inicialização do sistema
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Depois de 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ê precisará interromper o processo pythonw e executar novamente o script (tenho muita preguiça de escrever um serviço no Windows em C #):
taskkill /im pythonw.exe
Nesta instalação e configuração estiver concluída, use sua saúde.
Para aqueles que querem olhar para o código Python mais bonito, aqui está um
repositório no GitHub .
Licença do MIT, faça o que quiser com esse bem.
PS: Entendo que acabou sendo uma muleta, mas lida com sua tarefa com um estrondo.
UPD: 10/10/2019 17:37
Encontrei mais um problema e, se alguém me disser como resolvê-lo, ficarei muito agradecido.
O problema é que, se você instalar dependências sem o sudo python -m pip install -r ..., então, sob o usuário do serviço, os módulos não estarão visíveis, mas eu não gostaria de forçar os usuários a instalar módulos no sudo, e isso não está correto.
Como torná-lo bonito?
UPD: 11/11/2019 19:16 O problema é resolvido usando venv.
Acabou algumas mudanças. O próximo lançamento será no outro dia.