curl https://ip.kivihal.me

On olemassa useita sivustoja, joiden avulla voit selvittää laitteesi nykyisen IP-osoitteen, kuten https://www.whatismyip.com/ ja https://whatismyipaddress.com/

Hetkinen, miten sivu tietää IP-osoitteeni?

Kysymys on tarkemmin ajateltuna aika hölmö. Vähän kuin tilaisit jotain kotiinkuljetuksella ja ihmettelisit sitten, mistä ne tiesivät osoitteesi. Jotta verkkosivua isännöivä palvelin voi lähettää nettisivun koneellesi, koneesi lähettää oman IP-osoitteensa palvelimelle, jotta palvelin tietää mihin osoitteeseen sivu pitää lähettää.

Nämä nettisivut ovat pelkän IP-osoitteen näyttämisen lisäksi melko monipuolisia. Ne selvittävät osoitteen perusteella myös esimerkiksi tiedon siitä, mikä palveluntarjoaja omistaa osoitteen ja toisaalta GeoIP -tietokannasta saa selvitettyä suunnilleen, mistä päin maailmaa tämä IP-osoite löytyy. Jos siis käyt sivulla ja se jostain syystä näyttää kotikaupunkisi kartalla, huomioi että sijainti ei ole kovinkaan tarkka. Vaikka IP-osoitteet ovat teknisesti lähes mielivaltaisia numerosarjoja, tietyt lukualueet on jaettu eri palveluntarjoajille ja edelleen palveluntarjoaja jakaa ne pienempiin alueellisiin lohkoihin. IP-osoitteet ovat siis jakautuneet ennalta-arvattavasti ympäri maailmaa, mutta eivät kuitenkaan mitenkään pysyvästi. Tämä on myös yksi perustelu VPN-palvelujen käytölle: VPN reitittää liikenteesi jotain muuta reittiä pitkin, jolloin vaikuttaakin siltä, että tietokoneesi olisi toisessa maassa.

Yksinkertaisempi versio

Jos tarkoitus on selvittää pelkkä IP-osoite, varsinkin jonkin tietokoneohjelman avulla, esimerkiksi komentoriviä käyttämällä, on yksinkertaisempiakin sivuja tarjolla. Työkaverini esitteli tänään https://canihazip.com sivun, joka yksinkertaisesti lähettää pelkän IP-osoitteesi sinulle takaisin:

Hyöty on siis erityisesti se, että sivu toimii moitteetta myös komentoriviltä:

$ curl icanhazip.com
123.246.1.342

Ajattelin heti, että tuollaisen voisi varmaan tehdä aika helposti. Pystyisiköhän web-palvelimen jopa säätämään niin, ettei varsinaista sivua olisi olemassa, vaan se vain vastaisi pyyntöösi lähettämällä osoitteesi sinulle takaisin, ja onnistuuhan se.

Nginx-palvelimen asetukset tietylle yksinkertaiselle nettisivulle voisivat näyttää esimerkiksi tältä:

server {
    root /srv/sivun/tiedostot;

    index index.html;

    server_name kivihalme.fi;

    error_page 404 =200 /index.html;

    location / {
            try_files $uri $uri/ =404;
    }
}

Eli, mistä tiedostot löytyy, millä nimellä on index.html eli etusivu ja mikä palvelun nimi on. Sen jälkeen location -lohko määrittää, että kun osoite (sivun nimen jälkeen) alkaa / -merkillä, kuten kivihalme.fi/blogi, koitetaan löytyykö palvelimelta blogi, tai löytyykö blogi/ tai sitten annetaan 404 eli sivua ei löydy.

Kävi ilmi, ettei varsinaisesti tarvitse tehdä edes erillistä sivua: location -lohkossa voi palauttaa suoraan esimerkiksi tekstiä. IP-osoitteen selvittävän verkkopalvelun voi siis “koodata” kokonaan pelkästään asetustiedostoon:

server {
    server_name ip.kivihal.me;

    location / {
            default_type text/plain;
            return 200 "$remote_addr\n";
    }
}

Eli, palautetaan tekstiä sellaisenaan. Ei erityisesti mitään tiedostoa, vaan palautetaan asiakaskoneen IP-osoitteen sisältävän $remote_addr -muuttujan sisältö, ja \n eli rivinvaihto. Tätä ennen toki määritellään, että koodina on 200, eli “kaikki ok, sivu löytyi”.

Sitten vain säätämään DNS-palveluntarjoajalle uusi tietue ja sivu on pystyssä:

https://ip.kivihal.me

Toki, samalla vaivalla tämän sai tehtyä myös nykyisen nettisivun asetustiedostoon:

kivihal.me/ip

p = ^(11+)\1+$ →