N. B ten projekt wymaga użycia Google Cloud, a Google Cloud wymaga uwierzytelnienia. W szczególności w tym projekcie i podczas korzystania z DNS Google Cloud potrzebny jest klucz API. Korzystanie z Google DNS do testowania jest całkowicie bezpłatne, ale mimo to wymagane jest konto.
napisałem to, aby rozwiązać problem, który miałem w domu, i skończyło się na oszczędzaniu mi $100 USD rocznie. Dziękuję, Python! Dziękujemy CS50!
otworzyłem ten projekt dla wszystkich.
co więcej, jest to celowo aplikacja o jednym pliku. Został zaprojektowany tak, aby był łatwy do klonowania i używania, stąd open source, i został zaprojektowany do użycia z usługą Linuksową, aby mógł działać w tle. Teoretycznie może być uruchamiany na wszystkich platformach, MAC, Windows, Linux, urządzeniach z wbudowanym Linuksem i sprzęcie sieci domowej.
testowałem to na Windows 10, Debian 9 Stretch i Max OSX Mojave.
miałem hoot biorąc CS50 Web i obecnie pracuję nad moim ostatecznym projektem dla CS50 Web.
Google Cloud Dynamic DNS Client
jest to prosty dynamiczny skrypt DNS dla Google Cloud DNS. Skrypt sprawdzi jego publiczny adres IP, a następnie na podstawie jego konfiguracji odczytany z pliku konfiguracyjnego, sprawdzi, czy Google Cloud DNS ma odpowiedni wpis DNS. Jeśli nie zostanie znaleziony odpowiedni wpis, skrypt go utworzy. Jeśli odpowiedni wpis zostanie znaleziony, ale ma adres IP, który nie pasuje do tego, co znalazł skrypt, skrypt zaktualizuje następnie wpis Google Cloud (przeczytaj usuń, a następnie utwórz). Na koniec, jeśli plik konfiguracyjny skryptów odpowiada wpisowi Google Cloud DNS, zostanie on uśpiony przez interwał x, a proces się powtórzy.
ten projekt składa się z następujących elementów:
- gcloud-ddns.py: dynamiczny skrypt klienta dns
- DDNS-conf.yaml: programs configuration file
- requirements.txt: wymagania do zainstalowania
wymagania
ten skrypt wymaga Pythona w wersji 3.6 lub nowszej. f-stringi są szeroko stosowane. Wymagania dotyczące pakietu są wymienione w wymaganiach.txt
Usage: python gcloud-ddns.py
Konfiguracja
$ git clone [email protected]:conorcunningham/google-ddns.git$ cd google-ddns$ python3 gcloud-ddns.py
skrypt zostanie uruchomiony na pierwszym planie. Zamierzam się z nim pobawić i przetestować, aby sprawdzić, czy może działać niezawodnie jako usługa.
plik konfiguracyjny
konfiguracja skryptu jest odczytywana z pliku yaml. Oto zawartość przykładowego ddns-conf.plik 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
skrypt akceptuje jeden opcjonalny argument CLI, który jest ścieżką do pliku konfiguracyjnego. Jeśli nie podano żadnej, skrypt będzie szukał ddns-config.yaml
w tym samym katalogu co skrypt.
- host: w pełni kwalifikowana nazwa domeny hosta, który chcesz ustawić. NB * musisz dołączyć . po .com. jest to wymaganie Google/
- project_id: Twój identyfikator projektu w Google Cloud
- managed_zone: nazwa zarządzanej strefy w Google Cloud
- domena: Twoja nazwa domeny
- ttl: liczba sekund dla TTL
- interwał: jak długo skrypt będzie spał przed ponownym uruchomieniem
- klucz API: ścieżka do klucza API w formacie JSON
- ścieżka dziennika: Ścieżka do pliku dziennika
uwierzytelnianie
aby korzystać z interfejsu API Google Cloud, potrzebujesz klucza API dla swojego konta. Ten klucz będzie plikiem json i musi być skonfigurowany w pliku konfiguracyjnym.
skrypt ustawi zmienną środowiskową GOOGLE_APPLICATION_CREDENTIALS
na ścieżkę Twojego klucza API, a Moduły Google będą używać tej zmiennej środowiskowej do obsługi uwierzytelniania.
os.environ = api_key
Docker
plik Dockerfile jest zawarty w repozytorium, dzięki czemu można go uruchomić jako kontener wewnątrz instancji Dockera.
docker build -t google-ddns .
domyślne polecenie dokowania oczekuje konfiguracji.plik yaml wewnątrz katalogu /DDNS
docker run -it --rm -v <path/to/config>:/ddns google-ddns
należy pamiętać, że ścieżki wewnątrz pliku konfiguracyjnego są względne do kontenera
api-key: '/ddns/ddns-api-key.json'logfile: '/ddns/ddns.log'...
oto szybki i brudny plik docker-compose, jeśli go użyjesz
version: '3'services: ddns: image: google-ddns volumes: - ./config:/ddns
ipify.org API
ten projekt wykorzystuje ipify.org API do pobierania publicznego adresu IP klientów.