Aktualizácia IP adresy Freenom

Nedávno som v tomto článku spomínal, aké jednoduché je dnes vytvoriť doménu druhého radu zdarma. Web môžeme hostovať na vlastnom servery, ale podmienkou je aby sme boli aj majiteľom verejnej IP adresy.

Chvala Bohu na Slovensku ešte funguje niekoľko ISP, ktorí ponúkajú verejnú IPv4 zdarma. Aj keď neponúkajú IP adresu staticku, dokážeme si poradiť aj s dynamickou IP.

Veľmi jednoducho popíšem ako principiálne funguje overovanie IP adresy na freemone pomocou checkovacieho skriptu. Najprv v skripte naplníme premenne

freenom_email
freenom_passwd
freenom_domain_name
freenom_domain_id

Nasledne pomocou „curl“ stiahneme aktuálnu IP adresu na ktorej beží náš server. Potom sa skript pripojí do klientskej oblasti na freemon a ak sa IP adresa na Name Servery nezhoduje z našou IP adresou, tak na Name Servery sa IP adresa prepíše našou aktuálnou IP adresou. Ak sa IP adresa zhoduje, tak sa nič neudeje a skript sa z freemon odhlási.

Pri vytváraní skriptu postupujeme následovne. Najprv sa cez SSH prihlásime na server (pracovať môžeme ako obyčajný user bez sudo). Vytvoríme skript

nano freemon.sh

do ktorého vložíme následujúci kód

#!/bin/bash
 
# settings
# Login information of freenom.com
freenom_email="main@address"
freenom_passwd="pswd"
# Open DNS management page in your browser.
# URL vs settings:
#   https://my.freenom.com/clientarea.php?managedns={freenom_domain_name}&domainid={freenom_domain_id}
freenom_domain_name="domain.name"
freenom_domain_id="000000000"
 
# main
# get current ip address
current_ip="$(curl -s "https://api.ipify.org/")"
 
if [ "${current_ip}" == "" ]; then
    echo "Could not get current IP address." 1>&2
    exit 1
fi

# login
cookie_file=$(mktemp)
loginResult=$(curl --compressed -k -L -c "${cookie_file}" \
    -F "username=${freenom_email}" -F "password=${freenom_passwd}" \
    "https://my.freenom.com/dologin.php" 2>&1)

if [ "$(echo -e "${loginResult}" | grep "/clientarea.php?incorrect=true")" != "" ]; then
    echo "Login failed." 1>&2
    exit 1
fi

# update
updateResult=$(curl --compressed -k -L -b "${cookie_file}" \
    -F "dnsaction=modify" -F "records[0][line]=" -F "records[0][type]=A" -F "records[0][name]=" -F "records[0][ttl]=14440" -F "records[0][value]=${current_ip}" \
    "https://my.freenom.com/clientarea.php?managedns=${freenom_domain_name}&domainid=${freenom_domain_id}" 2>&1)

if [ "$(echo -e "$updateResult" | grep "<li class=\"dnssuccess\">")" == "" ]; then
    echo "Update failed." 1>&2
    exit 1
fi

# logout
curl --compressed -k -b "${cookie_file}" "https://my.freenom.com/logout.php" > /dev/null 2>&1

# clean up
rm -f ${cookie_file}

exit 0

skriptu priradíme právo na spustenie

chmod 755 freenom.sh

a následne nastavíme crontab aby sa skript spúšťal v pravidelnom intervale. Ja som si zvolil spúšťať skript každú hodinu. Keďže moja IP adresa sa nemení často, tak teoreticky by stačilo spúšťať skript 1x denne, alebo aj menej častejšie, avšak pri zmene IP adresy by bol web nedostupný dlhšiu dobu. Ja som to proste nastavil na hodinu, čiže pri najhoršom scenári bude web nedostupny max. 1 hodinu.

crontab -e

a na koniec súboru pridáme tento riadok a crotab zavrieme

@hourly /cesta_ku_skriptu/freenom.sh

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *