N. B Dette projekt kræver brug af Google Cloud, og Google Cloud kræver godkendelse. Specifikt i dette projekt, og når du bruger Google Cloud ‘ s DNS, kræver man en API-nøgle. Det er effektivt gratis at bruge Google DNS til test, men en konto er ikke desto mindre påkrævet.
jeg skrev dette for at løse et problem, som jeg havde hjemme, og det endte med at spare mig $100 USD om året. Tak, Python! Tak CS50!
jeg har åbnet indkøbt dette projekt for alle at bruge.
desuden er dette bevidst en en fil ansøgning. Det er designet til at være let at klone og bruge, dermed open source, og det er designet til at blive brugt sammen med en service, så den kan køre i baggrunden. Det kan teoretisk køres på alle platforme, MAC, Vinduer, indbyggede enheder og hjemmenetværksudstyr.
jeg har testet dette På Vinduer 10, Debian 9 Stretch og maks.
jeg har haft et hoot, der tager CS50-nettet og arbejder i øjeblikket på mit afsluttende projekt for CS50-nettet.
skål,
Conor
Google Cloud Dynamic DNS Client
dette er et simpelt dynamisk DNS-script til Google Cloud DNS. Scriptet vil kontrollere for sin offentlige IP-adresse, og derefter baseret på dens konfiguration det læses fra konfigurationsfilen, kontrollere, om Google Cloud DNS har en tilsvarende DNS-post. Hvis der ikke findes nogen tilsvarende post, opretter scriptet en. Hvis der findes en tilsvarende post, men har en IP-adresse, der ikke svarer til den, som scriptet fandt, opdateres scriptet derefter Google Cloud-post (Læs slet, opret derefter). Endelig, hvis scripts-konfigurationsfilen matcher den i Google Cloud DNS-posten, vil den sove i et interval på H, og processen gentages.
dette projekt består af følgende komponenter:
- gcloud-ddns.py: den dynamiske dns-klient script
- ddns-conf.yaml: programmer konfigurationsfil
- krav.krav, der skal installeres
krav
dette script kræver Python 3.6 eller nyere. f-strenge anvendes i vid udstrækning. Pakke krav er angivet i krav.tekst
anvendelse
Usage: python gcloud-ddns.py
opsætning
$ git clone [email protected]:conorcunningham/google-ddns.git$ cd google-ddns$ python3 gcloud-ddns.py
scriptet kører i forgrunden. Jeg vil lege med det og teste det for at se, om det kan køre pålideligt som en service.
konfigurationsfil
konfigurationen for scriptet læses fra en yaml-fil. Her er indholdet af eksemplet ddns-conf.yaml-fil
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
scriptet accepterer et valgfrit CLI-argument, som er stien til konfigurationsfilen. Hvis ingen er givet, vil scriptet søge efter ddns-config.yaml
i samme mappe som scriptet.
- host: det fuldt kvalificerede domænenavn på den vært, du vil indstille. NB * Du skal medtage . efter .com. this Er et Google-krav/
- project_id: dit projekt-ID i Google Cloud
- managed_sone: navnet på dit administrerede område i Google Cloud
- domæne: dit domænenavn
- ttl: antallet af sekunder for TTL
- interval: hvor længe scriptet vil sove, før det kører igen
- API-nøgle: sti til API-nøglen i JSON-format
- log-sti: Sti til logfilen
godkendelse
for at bruge Google Cloud API skal du bruge en API-nøgle til din konto. Denne nøgle vil være en JSON-fil og skal konfigureres i konfigurationsfilen.
scriptet indstiller GOOGLE_APPLICATION_CREDENTIALS
miljøvariabel til stien til din API-nøgle, og Googles moduler bruger denne miljøvariabel til at håndtere godkendelse.
os.environ = api_key
Docker
en Dockerfil er inkluderet i lageret, så du kan starte dette som en container inde i en Docker-forekomst.
docker build -t google-ddns .
standard docker-kommandoen forventer en config.yaml-fil inde i / ddns-biblioteket
docker run -it --rm -v <path/to/config>:/ddns google-ddns
Husk, at stierne inde i konfigurationsfilen er i forhold til beholderen
api-key: '/ddns/ddns-api-key.json'logfile: '/ddns/ddns.log'...
her er en hurtig og beskidt docker-compose-fil, hvis du bruger den
version: '3'services: ddns: image: google-ddns volumes: - ./config:/ddns
ipify.org API
dette projekt gør brug af ipify.org API til at hente klienternes offentlige IP-adresse.