NB Dieses Projekt erfordert die Verwendung von Google Cloud und Google Cloud erfordert Authentifizierung. Insbesondere in diesem Projekt und bei Verwendung des DNS von Google Cloud ist ein API-Schlüssel erforderlich. Es ist praktisch kostenlos, Google DNS zum Testen zu verwenden, es ist jedoch ein Konto erforderlich.
Ich habe dies geschrieben, um ein Problem zu lösen, das ich zu Hause hatte, und es hat mir 100 USD pro Jahr gespart. Danke, Python! Danke CS50!
Ich habe dieses Projekt für alle geöffnet.
Darüber hinaus ist dies absichtlich eine Ein-Datei-Anwendung. Es ist so konzipiert, dass es einfach zu klonen und zu verwenden ist, daher die Open Source, und es ist so konzipiert, dass es mit einem Linux-Dienst verwendet werden kann, damit es im Hintergrund ausgeführt werden kann. Es kann theoretisch auf allen Plattformen, MAC, Windows, Linux, Embedded Linux-Geräten und Heimnetzwerkgeräten ausgeführt werden.
Ich habe dies unter Windows 10, Debian 9 Stretch und Max OSX Mojave getestet.
Ich hatte einen Schrei unter CS50 Web und arbeite gerade an meinem letzten Projekt für CS50 Web.
Prost,
Conor
Google Cloud Dynamic DNS Client
Dies ist ein einfaches dynamisches DNS-Skript für Google Cloud DNS. Das Skript sucht nach seiner öffentlichen IP-Adresse und überprüft dann anhand seiner Konfiguration, die es aus der Konfigurationsdatei gelesen hat, ob Google Cloud DNS über einen entsprechenden DNS-Eintrag verfügt. Wenn kein entsprechender Eintrag gefunden wird, erstellt das Skript einen. Wenn ein entsprechender Eintrag gefunden wird, aber eine IP-Adresse hat, die nicht mit der vom Skript gefundenen übereinstimmt, aktualisiert das Skript den Google Cloud-Eintrag (lesen Sie Löschen, dann erstellen). Wenn die Skriptkonfigurationsdatei mit der des Google Cloud DNS-Eintrags übereinstimmt, wird sie für ein Intervall von x in den Ruhezustand versetzt, und der Vorgang wird wiederholt.
Dieses Projekt besteht aus folgenden Komponenten:
- gcloud-ddns.py : das dynamische DNS-Client-Skript
- ddns-conf.yaml: Programme Konfigurationsdatei
- Anforderungen.txt: Zu installierende Anforderungen
Anforderungen
Dieses Skript erfordert Python 3.6 oder höher. f-Saiten werden ausgiebig verwendet. Paketanforderungen sind unter Anforderungen aufgeführt.txt
Verwendung
Usage: python gcloud-ddns.py
Einrichtung
$ git clone [email protected]:conorcunningham/google-ddns.git$ cd google-ddns$ python3 gcloud-ddns.py
Das Skript wird im Vordergrund ausgeführt. Ich werde damit herumspielen und testen, ob es zuverlässig als Dienst ausgeführt werden kann.
Konfigurationsdatei
Die Konfiguration für das Skript wird aus einer YAML-Datei gelesen. Hier sind die Inhalte des Beispiels ddns-conf.yaml-Datei
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
Das Skript akzeptiert ein optionales CLI-Argument, das der Pfad zur Konfigurationsdatei ist. Wenn keine angegeben ist, sucht das Skript im selben Verzeichnis wie das Skript nach ddns-config.yaml
.
- host: Der vollqualifizierte Domänenname des Hosts, den Sie festlegen möchten. NB * Sie müssen die . dies ist eine Google-Anforderung/
- project_id: Ihre Projekt-ID in Google Cloud
- managed_zone: Der Name Ihrer verwalteten Zone in Google Cloud
- domain: Ihr Domainname
- ttl: Die Anzahl der Sekunden für die TTL
- Intervall: Wie lange das Skript vor der erneuten Ausführung in den Ruhezustand versetzt wird
- api-key: Pfad zum API-Key im JSON-Format
- log-Pfad: Pfad zur Protokolldatei
Authentifizierung
Um die Google Cloud API verwenden zu können, benötigen Sie einen API-Schlüssel für Ihr Konto. Dieser Schlüssel ist eine JSON-Datei und muss in der Konfigurationsdatei konfiguriert werden.
Das Skript setzt die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
auf den Pfad Ihres API-Schlüssels, und die Module von Google verwenden diese Umgebungsvariable für die Authentifizierung.
os.environ = api_key
Docker
Eine Docker-Datei ist im Repository enthalten, sodass Sie diese als Container in einer Docker-Instanz starten können.
docker build -t google-ddns .
Der Standard-Docker-Befehl erwartet eine Konfiguration.yaml-Datei im Verzeichnis /ddns
docker run -it --rm -v <path/to/config>:/ddns google-ddns
Beachten Sie, dass die Pfade in der Konfigurationsdatei relativ zum Container sind
api-key: '/ddns/ddns-api-key.json'logfile: '/ddns/ddns.log'...
Hier ist eine schnelle und schmutzige Docker-Compose-Datei, wenn Sie diese verwenden
version: '3'services: ddns: image: google-ddns volumes: - ./config:/ddns
ipify.org API
Dieses Projekt nutzt die pfiffige ipify.org API zum Abrufen der öffentlichen IP-Adresse des Clients.