N.B. Este proyecto requiere el uso de Google Cloud y Google Cloud requiere autenticación. Específicamente, en este proyecto, y al usar el DNS de Google Cloud, se requiere una clave de API. Es efectivamente gratuito usar el DNS de Google para realizar pruebas, pero no obstante se requiere una cuenta.
Escribí esto para resolver un problema que tenía en casa, y terminó ahorrándome 1 100 USD al año. Gracias, Python! Gracias CS50!
He abierto este proyecto de origen para que todos lo usen.
Además, esta es deliberadamente una aplicación de un solo archivo. Está diseñado para ser fácil de clonar y usar, de ahí el código abierto, y está diseñado para ser utilizado con un servicio Linux para que pueda ejecutarse en segundo plano. Teóricamente se puede ejecutar en todas las plataformas, MAC, Windows, Linux, dispositivos linux integrados y equipos de red doméstica.
He probado esto en Windows 10, Debian 9 Stretch y Max OSX Mojave.
Me ha gustado mucho tomar CS50 Web y actualmente estoy trabajando en mi proyecto final para CS50 Web.
Cheers,
Conor
Cliente de DNS dinámico de Google Cloud
Este es un script de DNS dinámico simple para DNS de Google Cloud. El script comprobará su dirección IP pública y, a continuación, en función de la configuración que haya leído en el archivo de configuración, comprobará si Google Cloud DNS tiene una entrada DNS correspondiente. Si no se encuentra ninguna entrada correspondiente, el script creará una. Si se encuentra una entrada correspondiente, pero tiene una dirección IP que no coincide con la que encontró el script, el script se actualizará y luego la entrada de Google Cloud (leer eliminar y luego crear). Por último, si el archivo de configuración de scripts coincide con el de la entrada DNS de Google Cloud, permanecerá en reposo durante un intervalo de x y el proceso se repetirá.
Este proyecto consta de los siguientes componentes:
- gcloud-ddns.py: el script de cliente dns dinámico
- ddns-conf.yaml: requisitos del archivo de configuración de programas
- .txt: requisitos para ser instalado
Requisitos
Este script requiere Python 3.6 o superior. las cuerdas en f se usan ampliamente. Los requisitos del paquete se enumeran en requisitos.uso de txt
Usage: python gcloud-ddns.py
Configuración
$ git clone [email protected]:conorcunningham/google-ddns.git$ cd google-ddns$ python3 gcloud-ddns.py
El script se ejecutará en primer plano. Voy a jugar con él y probarlo para ver si puede funcionar de manera confiable como servicio.
Archivo de configuración
La configuración del script se lee desde un archivo yaml. Aquí están los contenidos del ejemplo ddns-conf.archivo yaml
api-key: './ddns-api-key.json'logfile: './ddns.log'hosts: - host: 'firewall.example.com.' project_id: 'fluffy-penguin-242411' managed_zone: 'example' domain: 'example.com' ttl: 60 interval: 600 - host: 'www.example-two.com.' project_id: 'fluffy-penguin-242411' managed_zone: 'example-two' domain: 'example-two.com' ttl: 60 interval: 600
El script acepta un argumento CLI opcional que es la ruta al archivo de configuración. Si no se da ninguno, el script buscará ddns-config.yaml
en el mismo directorio que el script.
- host: el nombre de dominio completo del host que desea establecer. NB * Debe incluir el . después del .com. Este es un requisito de Google/
- project_id: Su ID de proyecto dentro de Google Cloud
- managed_zone: El nombre de su zona administrada en Google Cloud
- dominio: Su nombre de dominio
- ttl: El número de segundos para el TTL
- intervalo: Cuánto tiempo permanecerá en reposo el script antes de volver a ejecutarse
- clave de api: Ruta de acceso a la clave de API en formato JSON
- ruta de registro: Ruta al archivo de registro
Autenticación
Para usar la API de Google Cloud, necesitará una clave de API para su cuenta. Esta clave será un archivo json y debe configurarse en el archivo de configuración.
El script establecerá la variable ambiental GOOGLE_APPLICATION_CREDENTIALS
en la ruta de acceso de su clave API y los módulos de Google utilizarán esta variable ambiental para gestionar la autenticación.
os.environ = api_key
Docker
Se incluye un archivo Docker en el repositorio para que pueda iniciarlo como contenedor dentro de una instancia Docker.
docker build -t google-ddns .
El comando acoplable predeterminado espera una configuración.archivo yaml dentro del directorio / ddns
docker run -it --rm -v <path/to/config>:/ddns google-ddns
Tenga en cuenta que las rutas dentro del archivo de configuración son relativas al contenedor
api-key: '/ddns/ddns-api-key.json'logfile: '/ddns/ddns.log'...
Aquí hay un archivo de composición de docker rápido y sucio si usa eso
version: '3'services: ddns: image: google-ddns volumes: - ./config:/ddns
ipify.org API
Este proyecto hace uso de la ipify.org API para obtener la dirección IP pública del cliente.