# Tartalom

* A DDNS tipikus felhasználása
* Ajánlott updater
 * Konfiguráció
 * Parancssori paraméterek
* API a rekordok frissítéséhez annak, aki saját kódot használna
 * A kérésben megadandó értékek
 * Egy példa


# A DDNS tipikus felhasználása
A Dinamikus DNS röviden DDNS lehetővé teszi, hogy egy dinamikus IP címmel rendelkező eszköz rögzített domain névvel rendelkezzen.

Mivel az IP cím ezen szolgáltatás felhasználóinál dinamikus, így a kiszolgálón szokás **elévülési időt** beállítani.
Ez azt jelenti, hogyha egy frissítés után az elévülési időn belül nem küldünk újabb kérést, akkor a kiszolgáló nem fogja többé feloldani a domain nevet, csak a legközelebbi frissítés után fog ez újra megtörténni.
Ez nálunk jelen beállítás szerint **30 nap**.

# Ajánlott updater
A repóból letölthető Python nyelven írt szkript minden szükséges képességgel rendelkezik, ami egy egyszerű rekordfrissítéshez szükséges. Az egyszerűség és platformfüggetlenség kedvéért ez a szkript egyetlen frissítés után kilép és befejezi a futását. Az ütemezést a felhasználóra, vagy az operációs rendszerre bízzuk. Főleg az operációs rendszeren való ütemezés ajánlott (ehhez segítség később), illetve bizonyos gyakorisággal/áramszünetkor stb. publikus ip cím változhat, ekkor pedig nem ütemezett frissítés esetén a szerver elérhetetlenné válhat.

A Python minden elterjedt operációs rendszeren futtatható, ehhez az adott operációs rendszerre egy python3 interpreter telepítése illetve a *requests* library szükséges.

Külön leírás tartozik windowshoz és linuxhoz. Ezek a leírésok a README.windows.md és a README.linux.md fájlokban találhatóak.

Azok a dolgok, amik függetlenek az operációs rendszertől, ebben a fájlban találhatók.

## Konfiguráció
A repóban van egy conf_example.py nevű fájl, ami példaként szolgál a konfigurációs fájl kitöltésére. Ezt érdemes egy az egyben átmásolni conf.py névre (az updater ezt a fájlt fogja importálni), és itt a kommentben leírt magyarázatok alapján beírni a megfelelő adatokat.

Aki nem szereti a parancssort, annak érdemes először is a `LOG_FILE` paramétert megadni, ugyanis kattintásra futtatáskor ugyan megjelenik egy konzol, de futás után rögtön be is zárul, így a frissítés kimenetele alig látható. `LOG_FILE` megadása esetén a kimenet kiíródik a megadott fájlba.

**Figyelem!** Ha meg van adva logfájl, akkor parancssoros futtatás esetén is oda fog íródni a válasz. Ezt ideiglenesen meg lehet változtatni, a `-l ""` parancssori paraméterrel újra a standard kimenetre fog íródni.


## Parancssori paraméterek
Az updaternek megadhatók a futást befolyásoló paraméterek parancssorban is. Ezek megismeréséhez `--help` kapcsolóval kell futtatni: `update_i42_domain.py --help`.

**Figyelem!** A parancssori paraméterek magasabb prioritásúak, mint a konfigurációs fájlban megadott adatok.

# API a rekordok frissítéséhez annak, aki saját kódot használna
A frissítéshez egy POST kérést kell küldeni IP verziótól függően valamelyik címre.

| Verzió	| Cím								|
| --------	| ------------------------------	|
| IPv4		| https://updaterv4.i42.hu:10053	|
| IPv6		| https://updaterv6.i42.hu:10053	|

Ezekhez a címekhez valid SSL cert tartozik.

## A kérésben megadandó értékek
| Név	 		| Érték																											| Megadása		|
| ----------	| -----------------------------------------------------------------------------------------------------------	| ----------	|
| prefix		| A rekord i42.hu előtti része. pl: az **val.ami**.i42.hu-ban a **val.ami**.									| Kötelező		|
| token			| A honlapon generált token.																					| Kötelező		|
| ip_address	| A beírandó ip cím. Ha nincs a kérésben, akkor a küldő publikus ip címe kerül beírásra.						| Opcionális	|
| validate		| Nem tartozik hozzá érték. Ha meg van adva, akkor nem történik frissítés, csak a küldött adatok ellenőrzése.	| Opcionális	|

Mivel ip_address paraméter megadása esetén a megadott érték kerül beírásra, így szükség esetén lehetséges IPv4-es kapcsolaton keresztül IPv6-os címet frissíteni.

## Egy példa
A következő kis szkript linux rendszeren elküld egy-egy kérést IPv4-en és IPv6-on is.

```bash
#! /bin/bash
for x in 4 6
do
	curl -${x} https://updaterv${x}.i42.hu:10053 --data "token=my_token&prefix=my_prefix" && echo ""
done
```