You are currently viewing Dynaaminen DNS ja VPN

Dynaaminen DNS ja VPN

Liian monet asiat on sidottu staattiseen ja pysyvään IP-osoitteeseen. Kun puhutaan meidän jokaisen nettiyhteydestä, niin se ei ole käytännössä koskaan staattinen, vaan dynaaminen ja muuttuva. Elisan kuluttaja-asiakkailleen antamat IP-osoitteet muuttuvat itsekseen viikon tai kahden välein, paitsi jos erehtyy buuttaamaan nettiboksinsa, jota myös routeriksi kutsutaan. Silloin IP-osoite muuttuu aina. Vielä jotain vuosia sitten IP-osoitteet olivat kuin kiinteitä ja vaihtuivat vain poikkeustapauksissa. Jopa routerin käynnistäminen palautti usein vanhan IP:n. Mutta ei enää.

Jos tekee mitään nettitöitä, niin yleensä on selvä tarve kiinteälle IP-osoitteella. Ainakin jos mikään valvonta, suoja tai seuranta hyödyntää IP-osoitetta. Jos ollaan virtuaaliservereillä, niin aivan kaikki rakentuu aina oletukselle kiinteästä IP:stä. Välillä tulee sellainen olo, että koko suunnittelu on perustunut johonkin suljettuun aliverkkoon. Osa palveluista, kuten vaikka murtoyrityksiä vahtiva Fail2ban, osaa selvittää IP-osoitteesta host nimen ja jos se on sallittu, niin silloin kaikki on hyvin. Mutta siinäkin kiinteä IP-osoite helpottaisi elämää.

Kiinteän IP-osoitteen saa itseasiassa aika helposti oman VPN-palvelun kautta. Ei se ilmaista ole, mutta puhutaan hintaluokasta 5 euroa kuukaudessa itse tehtynä, joten ei moinen mahdotontakaan ole. Ja kun tehdään (tai ainakin yritetään) tuottavaa työtä, niin silloin se on panostus työkaluun. VPN:n oma vaivansa on siinä, että sen täytyy olla aina käynnissä. Tai ainakin aina silloin kuin tehdään asioita, joissa vaaditaan kiinteää IP-osoitetta.

On toinenkin vaihtoehto ja se on antaa ulkoisen palvelun avulla ymmärtää, että kyseessä olisi kiinteä IP, vaikka ei olekaan. Silloin ei edes yritetä vakuuttaa kohdetta IP-osoitteella, vaan IP-osoitteen nimeksi laitetulla host nimellä, domainilla. Silloin valvontaa ja rajoitusta sallituissa tapauksissa ei rakennetakaan IP:lle, vaan domainille, johon IP osoittaa – jopa silloin, kun se muuttuu.

Tuokaan ei ole täydellinen ratkaisu, sillä se toimii vain silloin kun palvelu osaa hyödyntää host nimeä. Läheskään aina ei osaa. Sen sijaan se helpottaa oman tietokoneen palveluiden käyttöä etänä.

Kun domainin IP muuttuu aina samaksi kuin mikä on IP:si, niin sitä kutsutaan dynaamiseksi DNS:ksi. Tarkkaan ottaen dynaaminen DNS on se tekniikka, joka mahdollistaa kiinteälle domainille vaihtuvan IP:n, joka on sama kuin palvelun käyttäjän oma IP.

Arkipäivän realismia

Jos asioita yksinkertaistaa arkipäivään, niin

  • ota käyttöön VPN, jos tarvitset kiinteän IP-osoitteen eli itseltäsi maailmalle
  • ota käyttöön dynaaminen DNS, kun tarvitset vaihtuvalle IP-osoitteellesi kiinteän nimen, domainin, eli maailmalta itsellesi

Vaikka koko ajan puhutaan ratkaisuista, jossa kampitetaan operaattorin vaihtaman IP-osoitteen tuoma harmi, niin ne ovat työkaluja eri tarkoituksiin (vaikka osa ominaisuuksista tai eduista voivatkin olla päällekkäisiä).

Minulla on erilaisia rajoituksia servereillä, jolloin määrätyt asiat ovat sallittuja vain määritellylle IP-osoitteelle. Kun Elisa/Saunalahti vaihtaa IP:n, niin minun pitäisi muuttaa uusi IP käsin jokaiseen asetukseen. Kun käytän VPN:ää, niin on aivan se ja sama mitä Elisa tekee, koska minulla on VPN:n koko ajan sama Elisasta riippumaton IP-osoite maailman suuntaan. Nun asetukset ovat VPN:n IP:n mukaisia, eivät Elisan, niin mitään ei tarvitse koskaan muuttaa.

Jos olen maailmalla ja minun pitäisi päästä tekemään jokin tiedostosiirto kotikoneelle tai kotikoneelta, tai mitä tahansa muuta SSH:n kautta, niin minun ei tarvitse piitata mikä on kotiverkon IP-osoite, koska dynaaminen DNS asettaa sen hostille, sille asettamalleni domainille. Eli ennen käytin osoitetta malliin ssh tunnus@192.196.0.1 ja jännäsin onko IP muuttunut välillä. Nyt käytän komentoa ssh tunnus@oma.example.tld aivan piittaamatta onko kodin IP-muuttunut, koska dynaaminen DNS pitää sen koko ajan oikeana.

Julkinen IP-osoite

Julkinen IP-osoite tarkoittaa kahta asiaa. Se voi olla julkisesti näkyvä IP-osoite tai se voi olla operaattorin myymä lisäpalvelu, jossa julkisesti näkyvä IP-osoite pysyy samana maailmalta operaattorin NAT:n läpi aina omalle routerille saakka. Se toimii aina, kuin junan vessa.

Oletuksena jokaisella on käytössä ei-julkinen IP-osoite. Routeri saakin operaattorin NAT:lta operaattorin oman valtakunnallisen sisäverkon IP-osoitteen, joka muutetaan vasta NAT:ssa siksi minkä maailma näkee. Kun otat dynaamisen DNS:n käyttöön, niin se päivittyy aivan oikein julkisesti näkyväksi IP-osoitteeksi. Mutta kun  yrität yhteyttä sillä oman sisäverkkosi suuntaan, niin on aivan tuurista ja herran huomasta kiinni päädytkö oikeaan paikkaan vai katkeaako yhteys, kun aidosti yritätkin naapurin koneeseen.

Käytännössä joudut siis maksamaan pari euroa kuussa julkisesta IP-osoitteesta tai hyväksyt epävarmuuden.

Dynaaminen DNS ei kelpaa tunnistukseen

Dynaamista DNS:tä voitaisiin periaatteessa käyttää tunnistuksessa kuin kiinteää IP:tä, kun suodatus- tai estosääntö on tehty host nimelle, joka kertoo IP:ksi saman kuin mitä itse sillä hetkellä käyttää. Käytännössä se ei kuitenkaan koskaan onnistu ilman ilmastointiteippitason säätöjä. Kompastuin tähän itse, enkä ole ollut ainoa.

Laitoin virtuaaliserverin tiedostoon /etc/hosts.allow säännön sshd: oma.example.tld – eli dynaamisen DNS:n käyttämän domainin IP-osoite oli sallittu SSH-yhteydelle ja koska se on sama kuin omani, niin kaikki olisi hyvin. Kaunis ajatus oli, että minun ei tarvitse asettaa aina erikseen Elisan antamaa IP-osoittetta, vaan koska host tunnistuu aina oikeaksi käyttänäkseni IP-osoitteeksi.. En ajatellut asiaa loppuun saakka, kuten kokeneemmat jo tietävät.

Kun serveri tekee reverse DNS kyselyn domainille oma.example.tld, niin se saa vastaukseksi Elisan IP-osoitteen. Mutta kun se ei tee. Se tekee kyselyn sille IP-osoitteelle, jolla minä saavun ja sen pitäisi olla sama kuin oma.example.tld. Koska IP-osoite on Elisan, niin vastaus onkin XX-XX-XX-XX-nat.elisa-mobile.fi.

Joku näppärä kehittäisi skriptin, jolla tarkistettaisiin koko ajan dynaamisen DNS:n IP-osoitteen aito host ja laittaisi sen paikalleen tiedostoon hosts.allow. Koska minä en ole näppärä, niin palasin takaisin perinteisempiin tapoihin rajoittaa liikennettä SSH-porttiin.

Lyhyesti mistä on kyse

Kun otetaan yhteys mihin tahansa, niin IP-osoite näkyy. Kun tehdään käänteinen DNS-kysely (reverse DNS), niin palvelu kysyy mikä host IP-osoitteeseen on liitetty. Saadaan siis IP-osoitteen numerosarjalle nimi. IP-osoite on kuitenkin muuttuva ja aina kun se muuttuu, niin täytyy erikseen käydä vaihtamassa host nimeen osoittava IP uuteen.

Kun hostin IP-osoitteen muuttaminen tehdään enemmän tai vähemmän automaattisesti, niin kyseessä on dynaaminen DNS.

Tuo vaatii, että jollain serverillä on nimipalvelintiedoissa (DNS) niin sanottu A-tietue osoittamassa omaan koti-IP:hen, joka antaa IP:lle nimen, jota kutsutaan termillä host name. Aivan sama ohjaus tehdään mm. jokaiselle web-osoitteelle, koska muutoin ei tiedettäisi mistä vaikkapa www.eksis.one löytyy.

Nyt vain asetetaan omalle kotiverkollesi nimi, host name, joka kertoo IP-osoitteen. Oma verkko, käytännössä siellä jokin tietokone, kuten oma läppärisi tai vaikka Raspberry Pi, kyselee määrätyin aikavälein operaattorilta mikä on nyt aito IP ja asettaa sen serverin A-tietueen IP-osoitteeksi. Kun IP muuttuu tietokoneella, niin se muuttuu myös serverillä.

Esimerkiksi ottaessasi SSH-yhteyden hostiin oma.example.tld, niin kysytään mitä IP-osoitetta se tarkoittaa ja nimipalvelin kertoo moisen olevan esim. IP-osoite 192.196.0.1, joka taasen ohjaa yhteyden omaan kotiverkkoosi. Kun oma IP muuttuu, niin se on muutettava myös hostille oma.example.tld, tai se ohjaa aivan väärään paikkaan.

Jos annat shellissä komennon host eksis.one, niin saat vastaukseksi, että IP-osoite on 104.248.141.204. Jos kysyt whois 104.248.141.204, niin sinulle kerrotaan, että se DigitalOceanin osoite. Tuo on staattinen osoite, koska se ei muutu, ja silloin myös asetettu DNS saa pysyä koskemattomana. Dynaamisessa asia hoituu aivan samoin, paitsi että IP-osoite muutetaan aina tarvittaessa eli kun operaattori sen muuttaa.

Jos olen sallinut hostille eksis.one kaikenlaisia asioita servereillä, niin saapuessani ei tiedetä suoraan mikä on käyttämäni IP-osoitteen host. Tässä vaiheessa olisin vain herra X IP-osoitteesta104.248.141.204. Kaikkihan tunnistetaan IP-osoitteella. Silloin serveri tekee käänteisen DNS kyselyn. Se tietää, että tulen osoitteesta 104.248.141.204 ja kysyy esimerkiksi (yksinkertaistetusti) whois 104.248.141.204 ja saa vastaukseksi nimen eksis.one – joka on sallittujen listalla ja päästää minut läpi. Se tekniikka, jossa korvataan operaattorin antama vaihtuva IP-osoite aivan toisella IP-osoitteella, käytännössä jonkin serverin IP-osoitteella, on VPN,

Jos eksis.one käyttääkin omaa koti-IP:ni, ja kun se muuttuu ja uusi IP-osoite liitetään automaattisesti hostiin eksis.one, niin sitä tekniikkaa kutsutaan nimellä dynaaminen DNS.

Dynaaminen IP-osoite ja DDNS

Toimivuus edellyttää täysiveristä DNS-palvelinta, joka kertoo mahdollisimman nopeasti koko muulle maailmalle mitä IP-osoitetta host vastaa. DNS-palvelinta ei aseteta eikä säädetä dynaamisen DNS:n takia, vaan ainoa toimenpide on asettaa domain ja sille vaadittavat nimipalvelintiedot.

Sen sijaan se, miten kerrot nimipalvelimelle vaihtuneen ja ajantasaisen IP-osoitteen, vaatiikin asentamista. Tai joskus voi jopa pärjätä melkein rasti ruutuun toteutuksella.

On aivan se ja sama mitä asetat omalle koneellesi, jos maailman muut nimipalvelimet eivät saa samaa tietoa. Se tarkoittaa sitä, että oman DNS-serverin ylläpitämäni on pääsääntöisesti yhtä syntymäkuollut ajatus kuin mailiserverin ylläpito. Aina kun puhutaan dynaamisesta DNS:tä, niin se tarkoittaa jonkin ulkoisen palvelun käyttämistä.

Se miten asia kannattaa ratkaista riippuu aivan ensimmäiseksi siitä, että onko ylipäätään tarvetta dynaamiselle DNS:lle. Jos et koskaan ota etäyhteyttä tietokoneellesi tai sisäverkkoon, niin et tarvitse minkäänlaista ratkaisua.

Jos tarvitset, niin haittaako sinua ottaa yhteyttä kotiverkkoosi käyttämällä IP-osoitetta, joka vaihtuukin välillä? Jos ei, niin et tarvitse dynaamista DNS:ää.

Jos haluat saada tehtyä yhteyden käyttämällä helposti muistettavaa nimeä, niin joudut valitsemaan helpon, halvan tai jotain siltä väliltä välillä. Jos googletat, niin löydät paljon erilaisia kaupallisia DynDNS-palveluja – osa on sitten vakavasti otettavia ja osa sellaisia, joita kannattaa pysyä hyvinkin kaukana.

Mukana on myös ilmaisia ympäri maailman. Niiden antamat tiedot ja lupaukset ovat sellaisia, että itse pysyn kaukana niistä. On aivan se ja sama mitä ne lupailevat toiminnastaan, niin ei ole olemassa ilmaisia lounaita ja vaara (maksamattoman) asiakkaan toiminnan muuttumisesta kauppatavaraksi on selviö. Tosin, en minä luota suurimpaan osaan maksullisistakaan.

DynDNS.org

DynDNS.org on paljon käytetty ja mainitaan usein – lienee markkinoiden suurin ja vanhin. Helppo käyttää ja ilmeisen luotettava. Minulla on vaan henkisiä estoja maksaa luokkaa yli 50 dollaria vuodessa pseudo-domainista.

Toki hinnan hyväksymisessä on eronsa sillä, että onko jo ylipäätään domain käytössä, jota voi hyödyntää. Ja että domain on sellaisessa palvelussa, johon saa ylipäätään IP:n dynaamisesti päivitettyä. Ymmärtääkseni yhteenkään webhotelliin ei onnistu. Silti pidän lähes viittä taalaa kuukaudessa pelkästä ohjauksesta hieman riistona – toki hintaan liittyy joku veikeä host-nimi malliin .forgot.her.name tai .is.very.bad.org jotka lakkaavat naurattamasta noin vartin kuluttua – varsinkin kun ei edes omista maksamaansa domainia.

DynDNS.org on kuitenkin niin iso, että IP:n dynaamisen muutoksen saa usein tehtyä routerista suoraan, jolloin ei tarvitse asentaa mitään ylimääräistä toimittamaan IP-tiedot.

No-IP.com

No-IP.com on myös usein mainittu, toinen markkinajohtajista. Syy mainintoihin saattaa johtua ilmaismahdollisuudesta. Jos suostuu valitsemaan kolmen domainin vaihtoehdoista, eikä tilauksen vahvistaminen kerran kuukaudessa häiritse, niin lompakkoa ei tarvitse avata. Jos haluaa enemmän hassuja domain-vaihtoehtoja sekä 25 alidomainia, ja välttyä kuukaisittaiselta vahvistukselta, niin hinta on noin 25 USD vuosi. Oman domainin käyttö, jonka joutuu ostamaan heiltä ja hostaamaan heillä, nostaa hintaa lisää – oikeasti, en ole koskaan (asiakkaan roolissa) ymmärtänyt liiketoimintamallia, jossa joutuu maksamaan enemmän siitä, että ostaa lisää.

No-IP kuuluu myös sarjaan, jossa useat routerit osaavat itse hoitaa IP:n päivittämisen palvelun suuntaan.

dy.fi

Onko sähköpostin IKI-osoitteet tuttu asia? Se on kotimainen (ilmais)palvelu, joka on sähköpostin kääntö. Silloin voi käyttää osoitetta tyyliin minun@iki.fi aivan riippumatta mikä on aito mailiosoite. Säästyy osoitteenmuutosilmoitusten tekemiseltä. Dy.fi tekee saman hostin nimelle. Se on ilmainen harrastusvoimin ylläpidetty dynaaminen DNS.

Se on suunnattu vain suomalaisille, joten jos IP-osoitteesi väittää olevansa jokin muu kuin fi, niin et saa avattua palvelua. Tuo ei kylläkään koske kuin joitain yritysverkkojen käyttäjiä. IP-osoite on myös päivitettävä vähintään kerran viikossa, oli se muuttunut tai ei. Jos se lipsahtaa, niin palvelu ei ole käytössä ja muutama päivä lisää, niin ohjauksesi poistetaan. Ymmärrettävää ilmaispalvelussa, sillä muutoin tietokanta kasvaisi hallitsemattomasti. Aikarajat eivät kylläkään ole mikään aito ongelma, sillä oikeastaan aina käytetään jotain cron-tyyppistä ajastusta.

Dy.fi vaatii skriptin koneelle, joka käy kertomassa palvelimelle käytössä olevan IP:n.

Oma palvelu

Jos sinulla on jo virtuaaliserveri käytössä, niin dynaamisen DNS:n saa rakennettua melkoisen vaivattomasti. Yksinkertaisin toteutus on laittaa alidomain ja käydä käsin vaihtamassa sen IP aina kun se muuttuu – tuota ei kuitenkaan voi kutsua enää dynaamiseksi, mutta tismalleen sama lopputulos sillä saadaan.

Jos virtuaaliserveriä ei ole, niin en kokisi kovinkaan mielekkääksi käynnistää moista pelkän dynaamisen DNS:n takia. Sen sijaan jos on jo serveri sivustoja tai muita tarpeita varten, kuten että pyörittää omaa VPN:n, niin moisten kylkeen toki kannattaa DynDNS käynnistää.

Ikioman dynaamisen DNS:n saa otettua käyttöön millä tahansa virtuaalipalvelimella. Tämän kirjoituksen ohjeet ovat kuitenkin DigitalOceanille, joten jos olet jonkun muun asiakas, niin googleta – eiköhän ohjeita löydy.

Mikä valita?

Minulle valinta on oma palvelin. Sinulle se on joku muu.

Jos haluat, että router päivittää IP:n, niin ota käyttöön hintatietoisemman No-IP:n. Jos huolehdit sekuntiakaan tietoturvasta ja valuuko jonnekin tieto siitä missä olet käynyt ja koska, niin ota ehdottomasti käyttöön dy.fi – itselläni ei ole suurtakaan luottoa yrityspohjaisten lupauksiin, että tietoja ei kaupallisteta.

Oman dynaamisen DNS-palvelun rakentaminen

Käytän hostina omalle domainilleni asetettua alidomainia ja nimipalvelinasiat hoituvat DigitalOceanin kautta. Käytän dynaamiseen DNS:ään Windows-koneeseen asennettua Ubuntu appia ja sen cronin ajamaa skriptiä, joka päivittää DigitalOceanin alidomainin A-tietueen IP-osoitteen.

Alkuperäiset ohjeet löytyvät Githubista ja tämä on vain suomennettu ja yksityiskohtaistettu versio siitä.

Ohjeet ovat sen mukaiset mitä itse tein ja systeemi toimii minulla. Toivottavasti sinullakin.

A-tietue alidomainille

Aseta DigitalOceanilla alidomain.

  • Avaa domain
  • A-tietueessa hostname on haluamasi alidomain, esimerkiksi static.eksis.one. Jos hyödynnät domainia, jolla on muuta toimintaa, kuten websivusto, niin tee ehdottomasti alidomain. Kannattaa varmaan käyttää jotain helposti muistettavaa ja kirjoitettavaa alidomainia (tai domainia); se on pelkästään sinulle, eikä sillä ole mitään yleistä arvoa hakukoneille, markkinoinnille tai mihinkään muuhunkaan
    • Voit toki käyttää pelkkää domainia, jolloin teet pelkkään domainiin viittaavaan laittamalla hostnameksi @ merkin sekä toisen wildcardina eli histname on *.
  • Aseta mikä tahansa IP-osoite, koska tätä muutetaan dynaamisesti koti-IP:si mukaan.
  • TTL on se aika, jonka eri laitteet ja kyselijät pitävät muistissa, cachessa, IP-osoitteen. Aika on sekunteina ja määrää kuinka nopeasti IP-osoite muuttuu muille. Itse käytän arvoa 300 eli 5 minuuttia.

DigitalOceanin API

IP-osoitteen dynaamiseen A-tietueen muuttamiseen tarvitaan DigitalOceanin API. Joten kirjaudu tilillesi ja klikkaa Account > API.

  • Aloitetaan API:n tekeminen klikkaamalla välilehdessä Token/Keys nappulaa Generate New Token.

 

  • Anna API:lle joku nimi, mistä tunnistat itse sen myöhemmin. Klikkaa Generate Token.

 

  • Luotu API token on ehdottomasti kopioitava nyt talteen, koska sitä ei enää koskaan näytetä uudestaan. Joten älä poistu sivulta ennenkuin olet tallentanut sen jonnekin muualle. Jos hukkaat API koodin, niin joudut luomaan uuden.

Nyt olet valmis DigitalOceanilla ja voit siirtyä sille omalle koneellesi, joka tutkii käytössä olevan IP:n ja tulee kertomaan sen DigitalOceanille.

Tarvittavat skriptit omalla tietokoneella

Oma tietokone tarkoittaa sitä sisäverkossasi olevaa laitetta, joka haistaa ulosnäkyvän IP:n ja kertoo sen sitten DigitalOceanille. Laite voi olla läppärisi, Raspberry Pi tai muu serverikoneeksi laitettu, kunhan siinä on linux tavalla tai toisella.

En tiedä mihin skriptit kuuluisi tavan mukaan asentaa. Koska kyseessä on järjestelmään liittyvä rootin alainen työ, niin ehkä hakemistoa /usr/local/sbin tulisi käyttää. Mutta koska haluan ohittaa sudo-kysymyksen, niin käytän omassa kotihakemistossa olevaa .local/bin hakemistoa.

cd ~/.local/bin

 

  • Tehdään tiedosto, joka sisältää API- ja domain-tiedot

nano secrets

Lisää siihen nämä ja vaihda token API:ksi ja example.com käyttämäksesi domainiksi (ei siis alidomainiksi):

ACCESS_TOKEN=token
DOMAIN=example.coms
RECORD_IDS=()
WHITE_IPS=()

 

  • Tehdään skripti, joka selvittää API:n avulla muutettavan DNS:n A-tietueen (eli alidomainisi tai @:n jos käytät pelkkää domainia) id-numeron.

nano do-dns.sh

Lisää siihen tämä:

#!/usr/bin/env bash

source ./secrets

response=$(curl \
  --silent \
  -X GET \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://api.digitalocean.com/v2/domains/$DOMAIN/records")

echo $response | grep -Eo '"id":\d*|"type":"\w*"|"data":".*?"'

 

  • Tehdään tuosta suoritettava ohjelma

chmod 755 do-dns.sh

 

  • Ajetaan se.

do-dns.sh

 

  • Syöte on hieman hankala lukea, mutta etsi sieltä kohta, josta löytyy asettamasi alidomain tai domain sen jälkeen, kun on kerrottu "type":"A". Tämän tyyppistä etsit (jos käytät pelkkää domainia, niin etsi @ ja * merkkeja, sillä tarvitset kaksi id:tä):

,{"id":108576949,"type":"A","name":"static","data":"84.231.10.50","priority":null,"port":null,"ttl":300,"weight":null,"flags":null,"tag":null}],

 

  • Ota talteen id:n numerosarja. Esimerkissä se olisi 108576949. Lisätään se secrets tiedostoon

nano secrets

Laita se riville RECORD_IDS=() sulkujen väliin. Jos joskus jostain syystä haluat muuttaa useamman A-tietueen IP:n, niin laita kaikki id:t välilyönneillä erotettuna. Esimerkkitiedosto näyttäisi tältä:

ACCESS_TOKEN=token 
DOMAIN=example.com
RECORD_IDS=(108576949) WHITE_IPS=()

Jos sinulla on käytössä sellainen VPN-ratkaisu, joka antaa aina staattisen IP-osoitteen, niin laita se kohtaan WHITE_IPS sulkujen väliin. Silloin secrets-tiedosto voisi näyttää tältä:

ACCESS_TOKEN=token 
DOMAIN=example.coms 
RECORD_IDS=(108576949)
WHITE_IPS=(192.196.0.10)

 

  • Tehdään skripti, joka päivittää IP:n DigitalOceanille.

nano ddns.sh

Lisää siihen tämä. Vaihda kaksi tunnus kohtaa käyttäjänimellesi. Jos asensit secrets tiedoston jonnekin muualle, niin laita polku oikeaksi:

#!/usr/bin/env bash

[ ! -f /home/TUNNUS/.local/bin/secrets ] && \
  echo 'secrets tiedostoa ei löydy. Oletko luonut sen tai onko polussa virhe?!' && \
  exit 1

source /home/TUNNUS/.local/bin/secrets

# Exit if the RECORD_IDS array has no elements
[ ${#RECORD_IDS[@]} -eq 0 ] && \
  echo 'RECORD_IDS tietoja ei ole!' && \
  exit 1

# Julkinen IP:si selvitetään tästä urlista
public_ip=$(curl -s http://checkip.amazonaws.com/)

for ID in "${RECORD_IDS[@]}"; do
  local_ip=$(
    curl \
      --fail \
      --silent \
      -X GET \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer ${ACCESS_TOKEN}" \
      "https://api.digitalocean.com/v2/domains/${DOMAIN}/records/${ID}" | \
      grep -Eo '"data":".*?"' | \
      grep -Eo '\d+\.\d+\.\d+\.\d+'
  )

  # Jos paikallinen ja julkinen IP ovat samoja, niin vain lopetetaan
  [ "$local_ip" == "$public_ip" ] && exit 0

  # Jos julkinen IP kuuluu secrets listassa oleviin, niin DDNS jätetään päivittämättä
  [ ${#WHITE_IPS[@]} == "$public_ip" ] && exit 0

  # --fail silently on server errors
  curl \
    --fail \
    --silent \
    --output /dev/null \
    -X PUT \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    -d "{\"data\": \"${public_ip}\"}" \
    "https://api.digitalocean.com/v2/domains/${DOMAIN}/records/${ID}"

done

 

  • Tehdään siitä ajettava:

chmod 755 ddns.sh

 

IP-osoite käydään hakemassa Amazonilta rivillä IP=$(curl -s http://checkip.amazonaws.com/), mutta siihen voi käyttää muitakin. Täältä löydät yhden listan.

Testauksen ja käytön aika

Nyt testataan toimiiko skripti.

  • Aja se omassa shellissä:

ddns.sh

Mitään syötettä ei saisi tulle näkyviin. Kursori vilkkuu tyhjällä rivillä muutaman hetken ja palautuu normaaliksi kehotteeksi. Nyt on aika piipahtaa DigitalOceanin puolella. Dynaamista DNS:ää varten asettamallasi alidomainilla pitäisi nyt olla oma koti-IP:si. Jos ei ole, niin luultavammin id on väärin secrets-tiedostossa. Tai sille on väärä polku.

Toki IP:n voi vaihtaa komentorivihomminakin, mutta yleensä sitä ajetaan cronilla:

crontab -e

Lisää sinne tämä. Nyt cron tarkistaa IP:n kerran tunnissa. Jos haluat sen tapahtuvat esimerkiksi joka 15. minuutti, niin vaihda 0 muotoon */15. Muuta skriptin polku, jos asensit sen muualle.

0 * * * * /home/tunnus/.local/bin/ddns.sh >/dev/null 2>&1

  • Cron ei käytä oletuksena bashia, joten lisää tämä aivan alkuun: SHELL=/bin/bash

Nopeampaa cronin testaamista varten kannattaa varmaan muuttaa aika minuutiksi. Käy cronin kellon pyörähtämistä odotellessa DigitalOceanilla vaihtamassa domainin IP joksikin toiseksi. Jos se vaihtuu asetetun ajan jälkeen, niin kaikki on hyvin. Jos ei, niin jokin on rikki. Useimmiten syy on, että skripti ei löydä secrets tiedostoa, jolloin tarkistetaan polut tiedostosta ddns.sh.

Windowsin Ubuntu app ja cron

Ubuntun Windows 10 apissa syynä IP-osoitteen päivittymättömyyteen voi olla niinkin yksinkertainen asia, että cron ei ole käynnissä. Saat tarkistettua asian komennolla:

service cron status

Jos se on käynnistämistä vajaa, niin se onnistuu tällä:

service cron start

Cronin käynnistyminen automaattisesti ilman, että täytyy käynnistää Ubuntu, vaatii hieman käsitöitä, mutta aika vähän. Katso täältä ohjeet.

Muuttunut RSA fingerprint

Dynaamisen DNS:n käytössä on yksi ongelma, josta yksikään lähde ei varoittanut etukäteen ja se tulee vastaan SSH:n käytössä. Kun IP-osoite muuttuu, niin muuttuu myös ensimmäisellä yhteydellä hyväksytty fingerprint. Siinä vaiheessa OpenSSH hermostuu aivan tolkuttomasti, varoittaa mahdollisesta ilkeästä toiminnasta ja kieltäytyy avaamasta yhteyttä.

Onneksi se myös kertoo ratkaisun:

ssh-keygen -R hostnimi-tai-ip

Tuo on jossain määrin ärsyttävää, mutta mitään sille ei voi. Mutta se tulee vastaan vain kun otat muualta yhteyttä omaan koneeseesi muuttuneen IP-osoitteen takana.

Mitä sitten?

Jatko riippuu aivan itsestäsi, sillä nyt sinulla on toimiva dynaaminen DNS, jolloin asettamasti host toimii IP:n korvikkeena. Itse käytän sitä eräällä tavalla oikopolkuna SSH:lle esimerkkien malliin ssh jakke@static.eksis.one jolla pääsisin kotikoneelle piittaamatta IP-osoitteesta.

Systeemillä on pari rajoitetta. Jos IP muuttuu yllättäen, niin se ei esimerkin asetuksilla siirry heti asetetun hostin IP:ksi. Minulla cron tarkistaa asian kerran tunnissa ja DNS:n TTL (eli ikäänkuin cache) on 5 minuuttia. Joten periaattessa voisi käydä niin, että joutuisin reissussa odottamaan tunnin, ennen kuin pääsisin kirjautumaan omalle koneelle. En pidä tuota suurena ongelmana, koska joka kerta kun Elisa on vaihtanut IP-osoitteen (ilman heidän teknisiä ongelmiaan), niin se on tapahtunut öiseen aikaan.

IP muuttuu myös jos buuttaan routerin. Mutta silloin on yleensä kotona ja voi ajaa samantien käsin komentoriviltä ddns.sh IP:n päivittämiseksi.

Salliako VPN?

Koska skripti kyselee omaa IP-osoitettaan sen näkevältä ulkoiselta palvelulta, ei operaattorilta, niin VPN:n käyttö muuttaisi samantien (no, cronin aikataulun puitteissa) hostin IP:n VPN:n IP:ksi. Minulle tuo ei ole koskaan ollut ongelma ja olen aina päässyt kirjautumaan SSH:lla. Joko se johtuu siitä, että puhelin on myös Elisan verkossa tai VPN:n antama putki toimii toiseenkin suuntaan. Niin tai näin, niin se toimii.

Siitä huolimatta olen ikäänkuin whitelistannut secrets-tiedostossa käyttämäni VPN-osoitteet, jolloin ne eivät päivity domainille. Jos tuo aiheuttaa sen, että et pääse VPN päällä vaikka kirjautumaan kotikoneen SSH:n domainilla, jonka DNS kertoo IP:ksi ”normaalin” operaattorin antaman IP:n, niin poista secrets tiedostosta WHITE_IPS tiedot.

Valvonnassa ja tunnistamisessahan ei ole mitään merkitystä mikä on IP, kunhan se osoittaa samaan hostiin kuin mikä on sallittuna tai seurattuna tai käyttämäsi IP on sallittu. Minulle tilanne on helppo, koska itse ylläpidetyssä VPN:ssä on staattinen IP, niin ne ovat erikseen sallittuja. Silloin ei VPN-käytössä ole mitään tarvetta serverin tekemälle reverse VPN kyselylle. Dynaamisella DNS:llä tuo ei toimi, koska kirjautumiseen käytettävän IP:n host on operaattorin host. Mutta jos pystyy käyttämään nimenomaan host-nimeä, niin silloin toimii.

Ja menoksi

Minulla käyttö on kevyttä ja rajoittunutta, mutta sinä saatat olla tehokkaampi. Silloinkin dynaaminen DNS hoitaa homman kotiin, jos olet ennen joutunut käyttämään IP-osoitetta.

Muista myös, että termi julkinen IP-osoite ei liity mitenkään kumpaankaan asiaan, vaan operaattorien mainoksessa se tarkoittaa, että sinulla on routerilta maailmalle sama IP-osoite. Koska niin VPN kuin dynaaminenkin DNS vaikuttavat siihen miten IP-osoitteesi näkyy julkisesti, niin asiat voivat sotkeutua – vaikka ne tarkoittavat aivan eri asioita.

Joten kun olet reissussa, niin VPN suojaa yhteytesi ja DynDNS taasen vapauttaa muistamasta IP-osoitetta. Ja kaikki oman serverin avulla.

 

Jakke Lehtonen

Teen B2B-markkinoille sisällöntuottoa sekä UX-testauksia. Samaan liittyy myös koulutukset yrityksille ja webmaailman kanssa muutoin painiville. Serverien sielunelämää on joutunut ohessa opettelmaan. Toinen puoli toiminnasta on koirien ravitsemuksen ja ruokinnan suunnittelua sekä varsinkin omistajien kouluttamista hoitamaan koiriaan oikein ja vielä paremmin. Profiili: Jakke Lehtonen

Keskustele foorumilla Meta/KATISKA