Franta – Občasník malého ajťáka

Domény, Hosting, Cestování

Přesměrování domén tak trochu jinak

Tak jsem dlouho uz nic nenapsal …. tak nejak me jisty jedinec demotivovat se podilet o nejaky hlubsi informace z meho parkovani, uvidime. Kazdopadne dneska mam novinku, kterou jsme v ramci Gransy spustili v techto dnech – sluzbu presmerovani domen tak trochu jinak na https://redirect.host 

Jak to vubec vzniklo ?

Tech duvodu jak to cele vzniklo je vicero ….

  • na Subregu prestala fungovat moznost proxy presmerovani, je tam nejaky technicky problem, co se mi nedari uplne vyresit
  • zacali jsme logovat pristupy do Elastiku a z toho vznikl pekny prehled pro zakazniky
  • v ramci nasi Slack skupiny Online Podnikani padali dotazy na moznost presmerovavat jinym zpusobem (meta, JS, …)
  • sam resim v ramci parkingu jak smerovat traffic podle GeoIP na ruzne cile

Premyslel jsem nad tim jak to vsechno skloubit, a nakonec dosel k zaveru. Jakym zpusobem vlastne funguje parking domen ? U me tak, ze veskery traffic zaloguju kvuli statistikam, a nasledne provedu presmerovani podle nastavenych pravidel (domena, geoip) a pokud zadna pravidla nejsou, vyberu random nejaky z nastavenych parkingu a traffic poslu na nej … jak ? samozrejme presmerovanim!

Logickou cestou lze tedy dojit k zaveru, ze muj parking neni nic jinyho nez takova vlastni redirectovaci sluzba.

Protoze jsem pred nedavnem resil celkem brutalni navyseni trafficu a tim padem odpadlo technicky reseni skrze Nginx/Apache/PHP, napsal jsem si tehdy vlastni webserver v Go langu ktery nedela nic jinyho nez:

  • prijme navstevnika – pokud jde o HTTPS, overi existenci certifikatu a pripadne navaze zabezpecene spojeni
  • zaloguje request do Elasticu
  • posle pozadavek do ZeroParku, jestli obdrzime nabidku na prodej dane navstevy
  • pokud ne, nebo nesplnuje urcite limity, provede definovany primy redirecty, tj per domain nebo per GeoIP
  • v pripade ze navstevnik je porad u nas, tak se vybere nahodne parking (mam je oddelene subdomenama v DNS)
  • a navstenika poslu na cilovou parkovaci sluzbu pres 301 redirect na konkretni subdomenu ktera v DNS uz smeruje na parking

Tohle primocare reseni zvlada nekolik desitek milionu pozadavku denne.

Aby to cele fungovalo perfektne a samo, bylo nutne vyresit jeste DNS server. Ten mam take zcela vlastni, napsany v Go, a ten vraci ciste na libovolny dotaz defaultni hodnoty. Odpada mi tak reseni pridavani/odebirani zon, generovani zonovych souboru, atd. A protoze u parkingu opravdu nepotrebuji resit DNSSEC a dalsi vymozenosti, je DNS SW postaven na opravdu extremne jednoduchem zakladu. V unoru jsme s jednim kolegou vyzkouseli jeho limity a kdyz bezproblemove zpracovaval vice nez 5,5 miliardy dotazu denne, byl jsem na nej pravem hrdy 🙂

Bohuzel nakonec traffic byl vyrazne vyssi, tak jsem premyslel jak to cele vyresit lepe … a vicemene jsem na to po SW strance uz neprisel. Vzhledem ke zkusenostem s provozem Anycast DNS jsem se nadchl pro myslenku vyzkouset si takovy vlastni „CDN“ a tak jsem pro parking zridil nekolik samostatnych fyzickych serveru v ruznych lokalitach napric svetem (pro me primarne exponovanych) a spustil vuci nim Anycast Sit (46.8.8.0/23).

Parking aktualne funguje s nulovym zatizenim, obstarava vice nez 100.000.000 pozadavku denne, loguje do ElasticSearch, resi redirecty a proste generuje $$$.

Jak na to ?

Prvni otazka teda byla co musim upravit aby to splnovalo pozadavky na redirectovaci sluzbu. Upravy nakonec nebyly nijak moc zasadni. Odstranil jsem komunikaci se Zeroparkem, dale jsem odstranil generovani random parkingu a zustal mi tak webserver resici SSL a presmerovani dle nastavenych parametru per domain nebo per GeoIP z DB.

Aby se DB nepretezovala, funguje v nem interni cache, kdy se jednou za X minut nactou vsechny zaznamy do cache a system pak funguje jen zni. Upravil jsem tedy vyuziti teto cache tak, abych do ni dostal veskere varianty redirectu ktere clovek zada, a dale i cas zpracovani, a to na pouhych 5 minut. Tedy aktualne redirectovaci software kazdych 5 minut nacita aktualizace redirectu uzivatelu.

Dalsim krokem bylo upraveni generovani redirectu. Na parkingu jsem pouzival standardni 301 Redirect … takze jsem pouze doplnil switch na zadany typ redirectu a dodal moznosti „meta“ a „javascript“ pri kterych se misto hlavicky pro redirect vypise pozadovany HTML kod.

A to bylo vse … behem par minut jsem z parkovaciho webserveru udelal redirectovaci webserver 🙂

Nejvetsi prace byla v administraci – nejsem uplne GUI clovek, takze me to dalo docela zabrat dat do kupy, ale jsem rad ze se povedlo. V tomto pripade bych podekoval Jakubovi Boučkovi za okamzity penetracni testy, diky kterym jsem mohl rovnou opravit neduhy meho vyvoje 🙂

Poslednim oriskem bylo i vyreseni SSL certifikatu. Zde jsem nakonec sel do reseni, ktere mozna nekdy i popisu v samostatnym clanku. Diky lasce ke Go mam aplikaci, ktera mi sedi (tail) na logu z redirectovaciho webserveru a odchytava chybove hlaseni o chybnych ceritifkatech (vzdy s prvnim pristupem na web). Jakmile nacte radek s chybou, vyseparuje domenu a pokud domena ma DNS servery ns1.redirect.host/ns2.redirect.host tak zazada o LE script skrze DNS validaci. Zadost vygeneruje Challenge kod, ktery aplikace ulozi do redis databaze, ze ktere rovnou pri pozadavku na _acme-challenge.domena.tld DNS software zaznamy nacte a odpovi. Diky tomu dojde k validaci zadosti behem chvilicky a vystavi se wildcard certifikat *.domena.tld Ma to tedy tu nevyhodu, ze pokud klient nepouzije nase DNS, ale svoje a jen nasmeruje domenu, neumim pak v takovym pripade ted vytvorit SSL certifikat, ale je to v Todo listu 🙂

Jak to dopadlo ?

Na https://redirect.host naleznete vysledny vytvor 🙂 Po jednoduche registraci se muzete prihlasit do administrace, kde na Vas ceka Dasboard. V nem naleznete prehled presmerovanyho trafficu a to:

  • navstevnost boti vs. navstevnici
  • TOP 10 domen
  • TOP 10 zemi
  • Poslednich 1000 pristupu

V menu Domains pod polozkou Add Domains muzete pridat domeny do Vaseho uctu s nastavenim defaultniho presmerovani. Domenam pak staci nastavit pouze DNS na ns1.redirect.host / ns2.redirect.host

Nasledne v prehledu domen lze zobrazit seznam Vasich domen s poctem hitu ktere na ne dorazil a prejit tak do Nastaveni nebo Statistik:

V nastaveni domeny pak muzete nastavit pozadovany filtry na presmerovani, a to konkretne:

  • vybrat GeoIP pro ktery presmerovat jinam
  • urcit jestli se ma presmerovavat traffic robotu, navstevniku nebo obojich (default)
  • a vybrat jaky typ presmerovani pouzit

Nakonec si muzete prohlidnout statistiky Vasi domeny. U statistic jsme se snazili byt co nejdetailnejsi, tedy muzete zjistit:

  • TOP 15 zemi navstevniku
  • TOP 15 navstivenych subdomen
  • TOP 15 refereru
  • TOP 15 navstivenych URI
  • Prehled typu zarizeni navstev
  • Prehled pouzitych metod (POST, GET, ..)
  • 2500 poslednich pristupu

A v neposledni rade v sekci Emails lze zobrazit jake emaily na domenu dorazily:

A to je v tuto chvili vse co rozhrani nabizi.

K cemu je to dobre ?

Presmerovani redirect.host funguje na Anycast siti. Tedy nejzasadnejsi technicka vlastnost je nizka letence napric svetem. Druhou vyhodou anycastu je vysoka dostupnost. Jakmile nejaky node umre, jeho provoz prebiraji ostatni.

Dale je dulezity i typ presmerovani.

Napriklad, mam domenu porn.tld , z ni vede odkaz na domena2.cz a tu potrebujem presmerovat na domena3.tld

V nasem pripade browser vleze na porn.tld , odtud na domena2.cz, kde pres 301 na domena3.tld – bohuzel v tomto pripade browser pri vstupu na domena2.cz nastavil v hlavickach referer na https://porn.tld. A to asi neni co bychom chteli, aby nas partner na domena3.cz videl. Z tohoto duvodu existuje Meta nebo JS presmerovani, pri kterem Vas prohlizec do cilove stranky vlozi jako referer adresu Vasi domeny, tj domena2.cz

Pokud Vas zajima vice detailu, nevahejte napsat do komentaru!

One Comment

  1. Pingback:Nová česká služba na přesměrování domén - Wladass.cz

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..