Dogodivščine iz jasnega

Dogodivščine iz jasnega

Kako vam lahko Spotify pomaga pri preučevanju demonov, RFC-jev, omrežij in spodbujanju odprte kode. Ali kaj se zgodi, če ne morete plačati, vendar resnično želite nekaj vrhunskih dobrot.

začenja

Tretji dan je bilo opaziti, da Spotify prikazuje oglase glede na državo naslova IP. Ugotovljeno je bilo tudi, da v nekaterih državah oglaševanje sploh ni bilo uvoženo. Na primer, v Republiki Belorusiji. In potem je bil skovan "briljanten" načrt za onemogočanje oglaševanja v nepremijskem računu.

Malo o Spotifyju

Na splošno ima Spotify čudno politiko. Naš brat se mora za premium nakup kar pošteno zmotiti: spremeniti lokacijo v profilu v tujino, poiskati primerno darilno kartico, ki jo je mogoče plačati samo s PayPalom, ki se zadnje čase čudno obnaša in hoče kup dokumentov. Na splošno je to tudi avantura, vendar drugačnega reda. Čeprav večina ljudi to počne zaradi mobilne različice, me to ne zanima. Zato bo vse spodaj v pomoč le v primeru namizne različice. Poleg tega ne bo širitve funkcij. Samo odrežem nekaj odvečnih.

Zakaj je tako zapleteno?

In tako sem mislil, ko sem registriral podatke socks-proxy v konfiguraciji Spotify. Težava se je izkazala v tem, da avtentikacija v nogavicah z uporabo prijave in gesla ne deluje. Poleg tega razvijalci redno počnejo nekaj v zvezi s posrednikom: bodisi ga dovolijo, nato prepovejo ali zlomijo, kar povzroči cele panele razprav zunaj spletnega mesta.

Odločeno je bilo, da se ne bomo zanašali na nestabilne funkcije in da bomo našli nekaj bolj zanesljivega in zanimivega.

Nekje tu se mora bralec vprašati: zakaj ne vzeti ssh s ključem -D in to je konec? In na splošno bo imel prav. Toda najprej je treba to še vedno demonizirati in se spoprijateljiti z autossh, da ne bi razmišljali o pretrganih povezavah. In drugič: preveč je preprosto in dolgočasno.

Po vrstnem redu

Kot običajno gremo od leve proti desni, od zgoraj navzdol in opišemo vse, kar potrebujemo za uresničitev naše "preproste" ideje.

Najprej potrebujete proxy

In obstaja veliko alternativ hkrati:

  • lahko preprosto vzamete z odprtih seznamov posrednikov. Poceni (ali bolje rečeno za nič), vendar popolnoma nezanesljivi in ​​življenjska doba takšnih proxyjev se nagiba k ničli. Zato bi bilo treba poiskati/napisati razčlenjevalec proxy seznamov, jih filtrirati po želenem tipu in državi, odprto pa ostaja vprašanje zamenjave najdenega proxyja v Spotifyju (no, morda prek HTTP_PROXY prenos in ustvarite ovoj po meri za dvojiško datoteko, tako da ves drug promet ni poslan tja).
  • Lahko kupite podoben proxy in se rešite večine zgoraj opisanih težav. Toda po ceni proxyja lahko takoj kupite premium na Spotifyju in to ni praktično za prvotno nalogo.
  • Dvigni svojega. Kot ste verjetno uganili, je to naša izbira.

Čisto po naključju se lahko izkaže, da imate prijatelja s strežnikom v Republiki Belorusiji ali drugi majhni državi. To morate uporabiti in na njem razviti želeni proxy. Posebni poznavalci se lahko zadovoljijo s prijateljem z vključenim usmerjevalnikom DD-WRT ali podobno programsko opremo. Ampak tam njegov čudovit svet in ta svet očitno ne sodi v okvir te zgodbe.

Torej, naše možnosti: Squid - ni navdihujoče in ne želim HTTP proxyja, tega protokola je že preveč. In na področju NOGAVIC ni nič pametnega razen Dante še niso dostavljeni. Zato ga vzemimo.

Ne čakajte na Dantejev priročnik za namestitev in konfiguracijo. On samo googlam in ni posebnega interesa. V minimalni konfiguraciji morate vreči vse vrste client pass, socks pass, pravilno registrirajte vmesnike in ne pozabite dodati socksmethod: username. V tej obliki bo za avtentikacijo logopass vzet od uporabnikov sistema. In del o varnosti: prepoved dostopa do localhosta, omejevanje uporabnikov itd. - to je čisto individualno, odvisno od osebne paranoje.

Namestite proxy proti omrežju

Igra je v dveh dejanjih.

Prvo dejanje

Proxy smo uredili, zdaj moramo do njega dostopati iz svetovnega spleta. Če imate v želeni državi stroj z belim IP-jem, lahko to točko mirno preskočite. Nimamo ga (kot že omenjeno, gostujemo pri prijateljih) in najbližji beli IP je nekje v Nemčiji, zato bomo preučili omrežja.

Tako da, pozoren bralec se bo spet vprašal: zakaj ne vzamete obstoječe storitve, kot je ngrok ali podobno? In spet bo imel prav. Ampak to je storitev, spet jo je treba demonizirati, lahko tudi stane in na splošno ni športna. Zato bomo iz odpadnega materiala ustvarjali kolesa.

Naloga: nekje daleč za NAT je proxy, obesiti ga morate na enega od portov VPS, ki ima bel IP in se nahaja na robu sveta.

Logično je domnevati, da je to mogoče rešiti bodisi s posredovanjem vrat (ki se izvaja prek zgoraj omenjenega ssh) ali z združevanjem strojne opreme v virtualno omrežje prek VPN. Z ssh znamo delati, autossh Jemati ga je dolgočasno, zato vzemimo OpenVPN.

DigitalOcean ima čudovit manul o tej zadevi. Temu nimam kaj dodati. In nastalo konfiguracijo je mogoče enostavno povezati z odjemalcem OpenVPN in systemd. Samo vstavite (config). /etc/openvpn/client/ in ne pozabite spremeniti razširitve v .conf. Po tem potegnite storitev [email protected]ne pozabi storiti tega namesto nje enable in se veseli, da je vse odletelo.

Seveda moramo onemogočiti kakršno koli preusmeritev prometa na novo ustvarjeni VPN, saj ne želimo zmanjšati hitrosti na odjemalskem stroju s prepuščanjem prometa skozi pol krogle.

In ja, registrirati moramo statični naslov IP na strežniku VPN za našo stranko. To bo potrebno malo kasneje v zgodbi. Če želite to narediti, morate omogočiti ifconfig-pool-persist, Uredi ipp.txt, vključeno v OpenVPN in omogočiti client-config-dir ter urediti konfiguracijo želenega odjemalca z dodajanjem ifconfig-push s pravilno masko in želenim naslovom IP.

Drugo dejanje

Sedaj imamo v »omrežju« stroj, ki gleda na internet in ga lahko uporabimo v sebične namene. Preko njega namreč preusmeriti del prometa.

Torej, nova naloga: izklopiti morate promet, ki prihaja na ena od vrat VPS z belim IP-jem, tako da bo ta promet šel v na novo povezano virtualno omrežje in se bo odziv lahko vrnil od tam.

Rešitev: seveda iptables! Kdaj boš še imel tako čudovito priložnost vaditi z njim?

Zahtevano konfiguracijo najdemo precej hitro, v treh urah, stotih psovkah in peščici porabljenih živcev, saj je razhroščevanje omrežij zelo specifičen postopek.

Najprej morate omogočiti preusmeritev prometa v jedru. Ta stvar se imenuje ipv4.ip_forward in je omogočen nekoliko drugače, odvisno od operacijskega sistema in upravitelja omrežja.

Drugič, izbrati morate vrata na VPS in ves promet, ki gre do njega, zaviti v navidezno podomrežje. To je mogoče storiti na primer takole:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to-destination 10.8.0.2:8080

Tu preusmerimo ves promet TCP, ki prihaja na vrata 8080 zunanjega vmesnika, na stroj z IP 10.8.0.2 in istimi vrati 8080.

Za tiste, ki želijo umazane podrobnosti dela netfilter, iptables in usmerjanje na splošno, je nujno treba razmisliti это ali это.

Torej, zdaj naši paketi letijo v virtualno podomrežje in ... tam ostanejo. Natančneje, odgovor socks proxyja prileti nazaj skozi privzeti prehod na stroju z Dantejem in ga prejemnik spusti, ker v omrežjih ni običajno, da pošljete zahtevo na en IP in prejmete odgovor od drugega. Zato moramo še naprej pričarati.

Torej, zdaj morate preusmeriti vse pakete iz proxyja nazaj v virtualno podomrežje proti VPS z belim IP-jem. Tu je situacija malo slabša, ker je pač iptables ne bomo imeli dovolj, ker če popravimo ciljni naslov pred usmerjanjem (PREROUTING), potem naš paket ne bo odletel na internet in če tega ne popravimo, bo paket šel na default gateway. Torej morate storiti naslednje: spomnite se verige mangle, da označite pakete skozi iptables in jih zaviti v usmerjevalno tabelo po meri, ki jih bo poslala, kamor morajo iti.

Kmalu rečeno kot storjeno:

iptables -t mangle -A OUTPUT -p tcp --sport 8080 -j MARK --set-mark 0x80
ip rule add fwmark 0x80 table 80
ip route add default via 10.8.0.1 dev tun0 table 80

Vzamemo odhodni promet, označimo vse, kar leti iz vrat, na katerih sedi proxy (v našem primeru 8080), preusmerimo ves označeni promet v usmerjevalno tabelo s številko 80 (na splošno številka ni odvisna od ničesar, samo želeli smo do) in dodajte eno samo pravilo, v skladu s katerim vsi paketi, vključeni v to tabelo, letijo v podomrežje VPN.

Super! Zdaj paketi letijo nazaj proti VPS... in tam umrejo. Ker VPS ne ve, kaj bi z njimi. Torej, če se ne trudite, lahko preprosto preusmerite ves promet, ki prihaja iz virtualnega podomrežja, nazaj v internet:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 172.42.1.10

Tu je vse, kar prispe iz podomrežja 10.8.0.0 z masko 255.255.255.000, ovito v izvorni NAT in leti na privzeti vmesnik, ki je obrnjen na internet. Pomembno je vedeti, da bo ta stvar delovala le, če vrata posredujemo transparentno, to pomeni, da se vhodna vrata na VPS ujemajo z vrati našega proxyja. V nasprotnem primeru boste morali še malo potrpeti.

Nekje zdaj bi moralo vse začeti delovati. Ostaja le še nekaj: ne pozabite se prepričati, da so vse konfiguracije iptables и route po ponovnem zagonu se ni nadaljeval. Za iptables obstajajo posebne datoteke, kot je /etc/iptables/rules.v4(v primeru Ubuntuja), vendar je za poti vse malo bolj zapleteno. Porinil sem jih noter up/down OpenVPN skripte, čeprav mislim, da bi jih lahko naredili bolj spodobno.

Zavijte promet iz aplikacije v proxy

Imamo torej proxy z avtentikacijo v želeni državi, dostopen prek statičnega belega naslova IP. Vse kar ostane je, da ga uporabimo in tja preusmerimo promet s Spotifyja. Vendar obstaja odtenek, kot je navedeno zgoraj, prijavno geslo za proxy v Spotifyju ne deluje, zato bomo iskali, kako ga zaobiti.

Za začetek se spomnimo na zastopnik. Odlična stvar, vendar stane toliko kot zvezdna ladja (40 $). S tem denarjem lahko spet kupimo premijo in zaključimo s tem. Zato bomo iskali več brezplačnih in odprtih analogov na Macu (da, želimo poslušati glasbo na Macu). Odkrijmo eno celotno orodje: proksimak. In z veseljem ga bomo šli pocukat.

Toda veselje bo kratkotrajno, saj se izkaže, da morate v MacOS omogočiti način za odpravljanje napak in razširitve jedra po meri, vnesti preprosto konfiguracijo in razumeti, da ima to orodje popolnoma enako težavo kot Spotify: ne more prenesti avtentikacije z prijava-geslo na socks-proxyju.

Nekje tukaj je čas, da znorite in kupite premium ... ampak ne! Poskusimo prositi, da se popravi, je odprtokoden! Naredimo vstopnica. In kot odgovor dobimo srce parajočo zgodbo o tem, kako edini vzdrževalec nima več MacBooka in hudiča z njim, ne popravka.

Spet bomo razburjeni. Ampak potem se bomo spomnili naše mladosti in C, vklopili način za odpravljanje napak v Danteju, kopali po stotinah kilobajtov dnevnikov, šli na RFC1927 za informacije o protokolu SOCKS5 si poglejmo Xcode in poiščimo težavo. Dovolj je, da popravite en znak na seznamu kod metod, ki jih stranka ponuja za avtentikacijo, in vse začne delovati kot ura. Veselimo se, zbiramo izdano binarno datoteko povlecite zahtevo in gremo v sončni zahod in gremo do naslednje točke.

Avtomatizirajte ga

Ko Proximac enkrat deluje, ga je treba demonizirati in nanj pozabiti. Za to je primeren en cel inicializacijski sistem, ki ga najdemo v MacOS-u, namreč launchd.

Hitro najdemo priročnik in razumemo, da to sploh ni systemd in tukaj je skoraj zajemalka in xml. Brez modnih konfiguracij za vas, brez ukazov, kot je status, restart, daemon-reload. Samo hardcore vrste start-stop, list-grep, unload-load in še veliko drugih nenavadnosti. Premagovanje vsega tega pišemo plist, nalaganje. Ne deluje. Preučujemo metodo odpravljanja napak demona, odpravljamo napake, razumemo, kaj je tam ENV celo PATH nismo dostavili običajnega, se prepiramo, pripeljemo (dodatek /sbin и /usr/local/bin) in končno smo zadovoljni s samodejnim zagonom in stabilnim delovanjem.

Izdihnite

Kakšen je rezultat? Teden pustolovščin, klečeči živalski vrt od služb, ki je pri srcu in naredi, kar se od njega zahteva. Malo znanja na dvomljivih tehničnih področjih, malo odprte kode in nasmeh na obrazu ob misli "Uspelo mi je!"

PS: to ni poziv k bojkotu kapitalistov, k varčevanju na vžigalicah ali k totalni zvijačnosti, ampak samo nakazovanje možnosti raziskav in razvoja tam, kjer jih na splošno ne pričakuješ.

Vir: www.habr.com

Dodaj komentar