3.7 KiB
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:
- Aktualizować istniejące rekordy DNS.
- Tworzyć nowe rekordy DNS automatycznie, jeśli nie istnieją.
- 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
systemdz 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:
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