Obs Detta projekt kräver användning av Google Cloud, och Google Cloud kräver autentisering. Specifikt, i detta projekt, och när man använder Google Clouds DNS, kräver man en API-nyckel. Det är effektivt gratis att använda Google DNS för testning, men ett konto krävs ändå.
jag skrev detta för att lösa ett problem som jag hade hemma, och det slutade spara mig $100 USD per år. Tack, Python! Tack CS50!
jag har öppnat detta projekt för alla att använda.
dessutom är detta medvetet en filansökan. Den är utformad för att vara lätt att klona och använda, därav öppen källkod, och den är utformad för att användas med en Linux-tjänst så att den kan köras i bakgrunden. Det kan teoretiskt köras på alla plattformar, MAC, Windows, Linux, inbäddade linux-enheter och hemnätverksutrustning.
jag har testat detta på Windows 10, Debian 9 Stretch och Max OSX Mojave.
jag har haft en hoot med CS50 Web och arbetar för närvarande med mitt slutliga projekt för CS50 Web.
skål,
Conor
Google Cloud Dynamic DNS Client
Detta är ett enkelt dynamiskt DNS-skript för Google Cloud DNS. Skriptet kommer att kontrollera om dess offentliga IP-adress, och sedan baserat på dess konfiguration det läsa från konfigurationsfilen, kontrollera om Google Cloud DNS har en motsvarande DNS-post. Om ingen motsvarande post hittas skapar skriptet en. Om en motsvarande post hittas, men har en IP-adress som inte matchar det som skriptet hittade, kommer skriptet att uppdateras sedan Google Cloud entry (läs radera och skapa sedan). Slutligen, om skriptkonfigurationsfilen matchar den för Google Cloud DNS-posten, kommer den att sova i ett intervall på x, och processen upprepas.
detta projekt består av följande komponenter:
- gcloud-ddns.py: det dynamiska dns-klientskriptet
- DDNS-conf.yaml: program konfigurationsfil
- krav.txt: krav som ska installeras
krav
detta skript kräver Python 3.6 eller senare. f-strängar används i stor utsträckning. Paketkrav listas i krav.Txt
användning
Usage: python gcloud-ddns.py
Inställningar
$ git clone [email protected]:conorcunningham/google-ddns.git$ cd google-ddns$ python3 gcloud-ddns.py
skriptet kommer att köras i förgrunden. Jag ska leka med det och testa det för att se om det kan fungera pålitligt som en tjänst.
konfigurationsfil
konfigurationen för skriptet läses från en yaml-fil. Här är innehållet i exemplet 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
skriptet accepterar ett valfritt CLI-argument som är sökvägen till konfigurationsfilen. Om inget anges kommer skriptet att leta efter ddns-config.yaml
i samma katalog som skriptet.
- värd: det fullständigt kvalificerade domännamnet för den värd du vill ställa in. OBS* Du måste inkludera . efter. com. Detta är ett Google-krav/
- project_id: ditt projekt-ID i Google Cloud
- managed_zone: namnet på din hanterade zon i Google Cloud
- domän: ditt domännamn
- TTL: antalet sekunder för TTL
- intervall: hur länge skriptet kommer att sova innan du kör igen
- API-nyckel: sökväg till API-nyckeln i JSON-format
- log-sökväg: Sökväg till loggfilen
autentisering
för att kunna använda Google Cloud API behöver du en API-nyckel för ditt konto. Den här nyckeln kommer att vara en json-fil och måste konfigureras i konfigurationsfilen.
skriptet ställer in GOOGLE_APPLICATION_CREDENTIALS
miljövariabel till sökvägen för din API-nyckel och Googles moduler använder denna miljövariabel för att hantera autentisering.
os.environ = api_key
Docker
en Dockerfil ingår i förvaret så att du kan starta detta som en behållare i en Docker-instans.
docker build -t google-ddns .
standard docker-kommandot förväntar sig en konfiguration.yaml-fil i / ddns-katalogen
docker run -it --rm -v <path/to/config>:/ddns google-ddns
Tänk på att sökvägarna i konfigurationsfilen är i förhållande till behållaren
api-key: '/ddns/ddns-api-key.json'logfile: '/ddns/ddns.log'...
här är en snabb och smutsig docker-compose-fil om du använder det
version: '3'services: ddns: image: google-ddns volumes: - ./config:/ddns
ipify.org API
detta projekt använder sig av snazzy ipify.org API för att hämta klienternas offentliga IP-adress.