Prefacio
Para necesidades persoais na casa, instalei VSphere, no que executo un enrutador virtual e un servidor Ubuntu como servidor multimedia e unha morea de outras golosinas, e este servidor debería ser accesible desde Internet. Pero o problema é que o meu provedor dá datos estáticos por diñeiro, que sempre se poden usar para fins máis útiles. Polo tanto, usei a combinación ddclient + cloudflare.
Todo estivo ben ata que ddclient deixou de funcionar. Despois de mirar un pouco, decateime de que chegou o momento das muletas e das bicicletas, xa que tardaba demasiado en atopar o problema. Ao final, todo se converteu nun pequeno daemon que só funciona, e non necesito nada máis.
Se alguén está interesado, benvido ao gato.
Ferramentas utilizadas e como funciona "iso".
Entón, o primeiro que descubrín no sitio web de cloudflare é todo o que necesitas saber
En xeral, tomouse o envoltorio como base
Tomei un dos exemplos para actualizar o DNS e engadín o uso dun ficheiro de configuración e a posibilidade de actualizar varios rexistros A dentro dunha zona e, por suposto, un número ilimitado de zonas.
A lóxica é a seguinte:
- O script recibe unha lista de zonas do ficheiro de configuración e pasa por elas
- En cada zona, o script recorre cada rexistro DNS de tipo A ou AAAA e verifica a IP pública co rexistro.
- Se a IP é diferente, cámbiaa; se non, omite a iteración do bucle e pasa á seguinte.
- Queda durmido durante o tempo especificado na configuración
Instalación e configuración
Probablemente sería posible facer un paquete .deb, pero non son bo niso e non é tan difícil.
Describín o proceso con gran detalle en README.md on
Pero por se acaso, describilo en ruso en termos xerais:
- Asegúrate de ter instalados python3 e python3-pip, se non, instálao (en Windows, python3-pip está instalado xunto con Python)
- Clonar ou descargar o repositorio
- Instala as dependencias necesarias.
python3 -m pip install -r requirements.txt
- Executar o script de instalación
Para Linux:chmod +x install.sh sudo ./install.sh
Para Windows: windows_install.bat
- Edite o ficheiro de configuración
Para Linux:sudoedit /etc/zen-cf-ddns.conf
Para Windows:
Abra o ficheiro zen-cf-ddns.conf no cartafol onde instalou o script.
Este é un ficheiro JSON normal, a configuración non é nada complicada: describín especificamente 2 zonas diferentes nel como exemplo.
Que hai detrás dos instaladores?
install.sh para Linux:
- Créase un usuario para executar o daemon, sen crear un directorio de inicio e sen a posibilidade de iniciar sesión.
sudo useradd -r -s /bin/false zen-cf-ddns
- Créase un ficheiro de rexistro en /var/log/
- Fai que o usuario recén creado sexa o propietario do ficheiro de rexistro
- Os ficheiros son copiados nos seus lugares (config en /etc, ficheiro executable en /usr/bin, ficheiro de servizo en /lib/systemd/system)
- O servizo está activado
windows_install.bat para Windows:
- Copia o ficheiro executable e de configuración nun cartafol especificado polo usuario
- Crea unha tarefa no planificador para executar o script ao iniciar o sistema
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Despois de cambiar a configuración, o script debe reiniciarse; en Linux todo é sinxelo 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 terás que matar o proceso pythonw e volver executar o script (son demasiado preguiceiro para escribir un servizo para Windows en C#):
taskkill /im pythonw.exe
Deste xeito completa a instalación e configuración, desfruta da túa saúde.
Para aqueles que queiran ver o código non tan bonito de Python, aquí está
Licenza MIT, así que fai con estas cousas o que queiras.
PD: Entendo que resultou ser un pouco unha muleta, pero fai o seu traballo a golpe.
Actualización: 11.10.2019/17/37 XNUMX:XNUMX
Atopei 1 problema máis, e se alguén me indica como solucionalo, estarei moi agradecido.
O problema é que se instala dependencias sen sudo python -m pip install -r ..., entón os módulos non serán visibles desde o usuario do servizo, e non me gustaría obrigar aos usuarios a instalar módulos baixo sudo, e isto é non correcto.
Como facelo ver bonito?
UPD: 11.10.2019/19/16 XNUMX:XNUMX O problema resolveuse usando venv.
Houbo varios cambios. O próximo lanzamento será nos próximos días.
Fonte: www.habr.com