[🇬🇧 English version](README.md) # IONOS DDNS Auto-Updater & Creator Usługa systemowa w Pythonie, która automatycznie aktualizuje rekordy DNS w IONOS. W przeciwieństwie do standardowych skryptów DDNS, to rozwiązanie używa **IONOS REST API**, dzięki czemu potrafi: 1. **Aktualizować** istniejące rekordy DNS. 2. **Tworzyć** nowe rekordy DNS automatycznie, jeśli nie istnieją. 3. Sprawdzać aktualną wartość DNS przed aktualizacją, aby unikać limitów API. --- ## Funkcje - **Inteligentne sprawdzanie:** porównuje publiczne IP z aktualnym rekordem DNS przed wysłaniem zapytania do API. - **Auto-wykrywanie strefy:** automatycznie ustala, do której strefy DNS należy dana domena/subdomena. - **Usługa systemowa:** działa jako usługa `systemd` z automatycznym restartem po błędzie. - **Logowanie:** szczegółowe logi w `/var/log/ionos-ddns.log`. --- ## Wymagania - Python 3 - Konto IONOS z dostępem do **Developer API** - Klucz API (Prefix + Secret) wygenerowany na: https://developer.hosting.ionos.com/ --- ## Instalacja ### 1. Sklonuj repozytorium do `/opt` Zalecana lokalizacja systemowa: ```bash sudo mkdir -p /opt/ionos-ddns cd /opt sudo git clone https://git.invelio.co.uk/rafal/ionos-ddns.git cd /opt/ionos-ddns ``` ### 2. Zainstaluj zależności sudo apt update sudo apt install python3-pip sudo pip3 install -r requirements.txt ### 3. Konfiguracja Edytuj plik konfiguracyjny: ``` sudo nano config.json ``` Uzupełnij: api_prefix api_secret Lista domen – edytuj plik domains.txt (jedna domena na linię): ``` sudo nano domains.txt ``` Przykład: ``` mydomain.com vpn.mydomain.com server.other-domain.net ``` Zabezpieczenie klucza API Ponieważ config.json zawiera wrażliwe dane, ustaw prawa tylko dla roota: ``` sudo chown root:root /opt/ionos-ddns/config.json sudo chmod 600 /opt/ionos-ddns/config.json ``` Nadaj prawa do uruchomienia skryptu: ``` sudo chmod +x /opt/ionos-ddns/update_ddns.py ``` ### 4. Instalacja usługi systemowej Skopiuj plik usługi: ``` sudo cp ionos-ddns.service /etc/systemd/system/ ``` Przeładuj demona, włącz i uruchom usługę: ``` sudo systemctl daemon-reload sudo systemctl enable ionos-ddns.service sudo systemctl start ionos-ddns.service ``` Monitorowanie Status usługi: ``` sudo systemctl status ionos-ddns.service ``` Podgląd logów: ``` tail -f /var/log/ionos-ddns.log ``` Jak to działa Skrypt działa w pętli (co 10 minut): Pobiera Twoje publiczne IP. Wczytuje domains.txt. Dla każdej domeny: znajduje odpowiednie Zone ID przez API, sprawdza czy istnieje rekord A, jeśli istnieje → porównuje IP i wykonuje PUT (update), jeśli nie istnieje → wykonuje POST (create). ### BŁĄD: 400 Invalid API key format Ten błąd oznacza, że serwer IONOS odrzucił klucz, ponieważ jego budowa jest nieprawidłowa. Najczęstsze przyczyny: Spacje (skopiowane przypadkiem przy wklejaniu). Ręczne dodanie kropki w pliku config (skrypt sam dodaje kropkę!). Zły typ klucza (klucz Cloud API zamiast Hosting/DNS API). KROK 1: Sprawdź spacje w config.json ``` sudo nano /opt/ionos-ddns/config.json ``` Upewnij się, że cudzysłowy przylegają idealnie do znaków. ŹLE (zwróć uwagę na spacje): ``` "api_prefix": " 23498723498 ", "api_secret": " a1b2c3d4 " ``` DOBRZE: ``` "api_prefix": "23498723498", "api_secret": "a1b2c3d4" ``` KROK 2: Nie dodawaj kropki w config.json Skrypt w Pythonie zawiera linię: ``` "X-API-Key": f"{prefix}.{secret}" ``` On sam łączy te dwie wartości kropką. Jeśli w config.json wpiszesz: ``` "api_prefix": "myPrefix." ``` skrypt wyśle: ``` myPrefix..secret ``` (co zawiera dwie kropki) i spowoduje błąd. api_prefix → tylko pierwsza część klucza api_secret → tylko druga, długa część klucza