prefacio
Para mis necesidades personales en casa, configuré VSphere, en el que ejecuto un enrutador virtual y Ubuntu Necesitaba un servidor para multimedia y otras funciones, y que fuera accesible desde internet. El problema es que mi proveedor de internet cobra por contenido estático, que podría aprovecharse mejor. Así que opté por una combinación de ddclient y cloudflare.
Todo estuvo bien hasta que ddclient dejó de funcionar. Tras husmear un poco me di cuenta de que había llegado el momento de las muletas y las bicicletas, ya que estaba tardando demasiado en encontrar el problema. Al final, todo se convirtió en un pequeño demonio que simplemente funciona y no necesito nada más.
Si alguien está interesado, bienvenido al gato.
Herramientas utilizadas y cómo funciona
Entonces, lo primero que descubrí en el sitio web de Cloudflare es todo lo que necesitas saber sobre . Y ya me había sentado a implementar todo en Python (después de familiarizarme con Python, lo uso cada vez más para algunas tareas simples o cuando necesito hacer rápidamente un prototipo), cuando de repente me encontré con una implementación casi lista para usar.
En general, se tomó como base el envoltorio. .
Tomé uno de los ejemplos para actualizar DNS y agregué el uso de un archivo de configuración y la capacidad de actualizar varios registros A dentro de una zona y, por supuesto, un número ilimitado de zonas.
La logica es como sigue:
- El script recibe una lista de zonas del archivo de configuración y las recorre en bucle.
- En cada zona, el script recorre cada registro DNS de tipo A o AAAA y verifica la IP pública con el registro.
- Si la IP es diferente, la cambia; si no, se salta la iteración del bucle y pasa a la siguiente.
- Se queda dormido durante el tiempo especificado en la configuración.
Instalacion y configuracion
Probablemente sería posible crear un paquete .deb, pero no soy bueno en esto y no es tan difícil.
Describí el proceso con gran detalle en README.md en .
Pero por si acaso, lo describiré en ruso en términos generales:
- Asegúrese de tener python3 y python3-pip instalados; si no, instálelos (en Windows python3-pip se instala junto con Python.
- Clonar o descargar el repositorio
- Instale las dependencias necesarias.
python3 -m pip install -r requirements.txt - Ejecute el script de instalación
para Linux:chmod +x install.sh sudo ./install.shpara Windows: windows_install.bat
- Editar el archivo de configuración
para Linux:sudoedit /etc/zen-cf-ddns.confpara Windows:
Abra el archivo zen-cf-ddns.conf en la carpeta donde instaló el script.
Este es un archivo JSON normal, la configuración no es nada complicada; describí específicamente 2 zonas diferentes como ejemplo.
¿Qué hay detrás de los instaladores?
instalar.sh para Linux:
- Se crea un usuario para ejecutar el demonio, sin crear un directorio de inicio y sin la posibilidad de iniciar sesión.
sudo useradd -r -s /bin/false zen-cf-ddns - Se crea un archivo de registro en /var/log/
- Hacer que el usuario recién creado sea el propietario del archivo de registro
- Los archivos se copian en sus lugares (config en /etc, archivo ejecutable en /usr/bin, archivo de servicio en /lib/systemd/system)
- El servicio está activado.
windows_install.bat para Windows:
- Copia el archivo ejecutable y de configuración a una carpeta especificada por el usuario.
- Crea una tarea en el programador para ejecutar el script al iniciar el sistema.
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Después de cambiar la configuración, es necesario reiniciar el script. Linux Todo es sencillo y 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 Tendré que matar el proceso pythonw y volver a ejecutar el script (soy demasiado perezoso para escribir un servicio para Windows Cª#):
taskkill /im pythonw.exeEsto completa la instalación y configuración, disfrútalo para tu salud.
Para aquellos que quieran ver el código Python no tan bonito, aquí está .
Con licencia del MIT, así que haz con estas cosas lo que quieras.
PD: Entiendo que resultó ser un poco una muleta, pero hace su trabajo a las mil maravillas.
ACTUALIZADO: 11.10.2019/17/37 XNUMX:XNUMX
Encontré 1 problema más, y si alguien me dice como solucionarlo se lo agradeceré mucho.
El problema es que si instala dependencias sin sudo python -m pip install -r..., entonces los módulos no serán visibles para el usuario del servicio, y no me gustaría obligar a los usuarios a instalar módulos en sudo, y esto es incorrecto.
¿Cómo hacer que luzca hermosa?
UPD: 11.10.2019/19/16 XNUMX:XNUMX El problema se resolvió usando venv.
Ha habido varios cambios. El próximo lanzamiento será en los próximos días.
Fuente: habr.com
