N. B Dit project vereist het gebruik van Google Cloud, en Google Cloud vereist authenticatie. Specifiek, in dit project, en bij het gebruik van Google Cloud DNS, een vereist een API-sleutel. Het is effectief gratis om Google DNS te gebruiken voor het testen, maar een account is toch vereist.
ik schreef dit om een probleem op te lossen dat ik thuis had, en het bespaarde me $100 USD per jaar. Dank je, Python! Dank u CS50!
ik heb sourced dit project geopend voor iedereen om te gebruiken.
bovendien is dit doelbewust een één-bestandstoepassing. Het is ontworpen om gemakkelijk te klonen en te gebruiken, vandaar de open source, en het is ontworpen om te worden gebruikt met een Linux-service, zodat het op de achtergrond kan draaien. Het kan theoretisch worden uitgevoerd op alle platforms, MAC, Windows, Linux, embedded linux-apparaten en thuisnetwerk apparatuur.
ik heb dit getest op Windows 10, Debian 9 Stretch en Max OSX Mojave.
ik heb een giller gehad met CS50 Web en ben momenteel bezig met mijn laatste project voor CS50 Web.
Cheers,
Conor
Google Cloud Dynamic DNS Client
Dit is een eenvoudig dynamisch DNS-script voor Google Cloud DNS. Het script zal controleren op zijn openbare IP-adres, en vervolgens op basis van de configuratie die het leest uit het configuratiebestand, controleren of Google Cloud DNS heeft een overeenkomstige DNS-vermelding. Als er geen overeenkomstige ingang wordt gevonden, zal het script er een aanmaken. Als een overeenkomstige ingang wordt gevonden, maar heeft een IP-adres dat niet overeenkomt met dat van wat het script gevonden, dan zal het script updaten dan Google Cloud entry (lees verwijderen, dan maken). Tot slot, als de scripts configuratie bestand overeenkomt met die van de Google Cloud DNS-ingang, dan zal slapen voor een interval van x, en het proces herhaalt.
dit project bestaat uit de volgende onderdelen:
- gcloud-ddns.py: het dynamische DNS client script
- ddns-conf.yaml: programma configuratiebestand
- vereisten.txt: te installeren vereisten
vereisten
dit script vereist Python 3.6 of hoger. f-strings worden veelvuldig gebruikt. Package requirements staan vermeld in requirements.txt
gebruik
Usage: python gcloud-ddns.py
instellen
$ git clone [email protected]:conorcunningham/google-ddns.git$ cd google-ddns$ python3 gcloud-ddns.py
het script zal op de voorgrond draaien. Ik ga ermee spelen en het testen om te zien of het betrouwbaar kan draaien als een service.
configuratiebestand
de configuratie voor het script wordt gelezen uit een yaml-bestand. Hier is de inhoud van het voorbeeld ddns-conf.yaml-bestand
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
het script accepteert één optioneel CLI argument, namelijk het pad naar het configuratiebestand. Als er geen wordt gegeven, zal het script zoeken naar ddns-config.yaml
in dezelfde map als het script.
- host: de volledig gekwalificeerde domeinnaam van de host die u wilt instellen. NB * u moet de . na de .com. Dit is een Google-vereiste/
- project_id: uw project-ID binnen Google Cloud
- managed_zone: de naam van uw beheerde zone in Google Cloud
- Domein: uw domeinnaam
- ttl: het aantal seconden voor de TTL
- interval: hoe lang het script zal slapen voordat het opnieuw wordt uitgevoerd
- api-key: pad naar de API-sleutel in JSON-formaat
- Log-pad: Pad naar logbestand
authenticatie
om de Google Cloud API te kunnen gebruiken, heeft u een API-sleutel nodig voor uw account. Deze sleutel zal een json-bestand zijn en moet geconfigureerd worden in het configuratiebestand.
het script zal GOOGLE_APPLICATION_CREDENTIALS
omgevingsvariabele instellen op het pad van uw API-sleutel en de modules van Google zullen deze omgevingsvariabele gebruiken om authenticatie af te handelen.
os.environ = api_key
Docker
een Docker-bestand is opgenomen in de repository, zodat u dit kunt starten als een container in een Docker-instantie.
docker build -t google-ddns .
het standaard docker Commando verwacht een configuratie.yaml-bestand in de map / ddns
docker run -it --rm -v <path/to/config>:/ddns google-ddns
Houd er rekening mee dat de paden in het configuratiebestand relatief zijn aan de container
api-key: '/ddns/ddns-api-key.json'logfile: '/ddns/ddns.log'...
hier is een quick-and-dirty Docker-compose bestand als je dat gebruikt
version: '3'services: ddns: image: google-ddns volumes: - ./config:/ddns
ipify.org API
dit project maakt gebruik van de snazzy ipify.org API voor het ophalen van het publieke IP-adres van de clients.