Avonture uit die bloute

Avonture uit die bloute

Hoe Spotify jou kan help om daemone, RFC's, netwerke te bestudeer en oopbron te bevorder. Of wat gebeur as jy nie kan betaal nie, maar jy wil regtig 'n paar premium goedjies hê.

Begin

Op die derde dag is opgemerk dat Spotify advertensies vertoon gebaseer op die land van die IP-adres. Daar is ook opgemerk dat in sommige lande advertensies glad nie ingevoer is nie. Byvoorbeeld, in die Republiek van Wit-Rusland. En toe is 'n "briljante" plan beraam om advertensies in 'n nie-premierekening uit te skakel.

'n Bietjie oor Spotify

Oor die algemeen het Spotify 'n vreemde beleid. Ons broer moet redelik verdraai word om premium te koop: verander die ligging in sy profiel na oorsee, soek 'n geskikte geskenkbewys waarvoor net betaal kan word met PayPal, wat die afgelope tyd vreemd optree en 'n klomp dokumente wil hê. Oor die algemeen is dit ook 'n avontuur, maar van 'n ander orde. Alhoewel die meeste mense dit ter wille van die mobiele weergawe doen, stel ek nie daarin belang nie. Daarom sal alles hieronder net help in die geval van die rekenaarweergawe. Boonop sal daar geen uitbreiding van funksies wees nie. Sny net van die ekstras af.

Hoekom is dit so ingewikkeld?

En ek het so gedink toe ek die sokkie-instaanbediener-data in die Spotify-konfigurasie registreer. Die probleem blyk te wees dat verifikasie in sokkies met login en wagwoord nie werk nie. Boonop doen ontwikkelaars gereeld iets rondom die instaanbediener: laat dit soms toe, verbied dit soms, breek dit soms, wat aanleiding gee tot hele panele van besprekings op die terrein.

Daar is besluit om nie op onstabiele funksies staat te maak nie en om iets meer betroubaar en interessanter te vind.

Iewers hier moet die leser vra: hoekom nie vat nie ssh met 'n sleutel -D en dit is die einde daarvan? En oor die algemeen sal hy reg wees. Maar eerstens moet dit nog gedemoniseer word en vriende maak met autossh, om nie aan verskeurde verbindings te dink nie. En tweedens: dit is te eenvoudig en vervelig.

In volgorde

Soos gewoonlik, kom ons gaan van links na regs, bo na onder en beskryf alles wat ons nodig het om ons “eenvoudige” idee te implementeer.

Eerstens benodig jy 'n proxy

En daar is baie alternatiewe gelyktydig:

  • jy kan maar van oop volmaglyste gaan haal. Goedkoop (of eerder verniet), maar absoluut onbetroubaar en die leeftyd van sulke gevolmagtigdes neig na nul. Daarom sal dit nodig wees om 'n ontleder vir volmaglyste te vind/skryf, dit te filtreer volgens die verlangde tipe en land, en die vraag oor die vervanging van die gevonde instaanbediener in Spotify bly oop (wel, miskien deur HTTP_PROXY oordra en skep 'n pasgemaakte omhulsel vir die binêre sodat alle ander verkeer nie daarheen gestuur word nie).
  • Jy kan 'n soortgelyke instaanbediener koop en jouself red van die meeste van die probleme wat hierbo beskryf word. Maar teen die prys van 'n instaanbediener kan u dadelik premium op Spotify koop, en dit is nie prakties vir die oorspronklike taak nie.
  • Lig joune op. Soos jy waarskynlik geraai het, is dit ons keuse.

Dit kan bloot toevallig blyk dat jy 'n vriend het met 'n bediener in die Republiek van Wit-Rusland of 'n ander klein land. U moet dit gebruik en die verlangde instaanbediener daarop uitrol. Spesiale fynproewers kan tevrede wees met 'n vriend met 'n router aan DD-WRT of soortgelyke sagteware. Maar daar sy wonderlike wêreld en hierdie wêreld pas duidelik nie in die raamwerk van hierdie verhaal nie.

Dus, ons opsies: Inkvis - nie inspirerend nie, en ek wil nie 'n HTTP-instaanbediener hê nie, daar is reeds te veel van hierdie protokol rond. En in die gebied van SOCKS is daar niks sinvol nie, behalwe Dante nog nie afgelewer nie. Daarom, kom ons neem dit.

Moenie wag vir Dante se handleiding oor installering en konfigurasie nie. Hy net google en is nie van besondere belang nie. In die minimum opset wat jy nodig het om te gooi in alle vorme van client pass, socks pass, registreer die koppelvlakke korrek en moenie vergeet om by te voeg nie socksmethod: username. In hierdie vorm, vir verifikasie, sal die logopas van die stelselgebruikers geneem word. En die deel oor sekuriteit: verbieding van toegang tot localhost, beperking van gebruikers, ens. - dit is suiwer individueel, afhangend van persoonlike paranoia.

Ontplooi 'n instaanbediener wat na die netwerk kyk

Die toneelstuk is in twee bedrywe.

Bedryf een

Ons het die instaanbediener uitgesorteer, nou moet ons dit vanaf die globale web verkry. As u 'n masjien met 'n wit IP in die gewenste land het, kan u hierdie punt veilig oorslaan. Ons het nie een nie (ons, soos hierbo genoem, word by vriende se huise gehuisves) en die naaste wit IP is iewers in Duitsland, so ons sal netwerke bestudeer.

So ja, die aandagtige leser sal weer vra: hoekom neem jy nie 'n bestaande diens soos nie ngrok of soortgelyk? En hy sal weer reg wees. Maar dit is 'n diens, dit moet weer gedemoniseer word, dit kan ook geld kos en oor die algemeen is dit nie sportief nie. Daarom sal ons fietse van afvalmateriaal skep.

Taak: daar is 'n proxy iewers ver agter NAT, jy moet dit hang aan een van die poorte van 'n VPS wat 'n wit IP het en aan die rand van die wêreld geleë is.

Dit is logies om te aanvaar dat dit opgelos kan word óf deur hawe-aanstuur (wat geïmplementeer word deur die bogenoemde ssh), of deur hardeware te kombineer in 'n virtuele netwerk via VPN. MET ssh ons weet hoe om te werk, autossh Dit is vervelig om te neem, so kom ons neem OpenVPN.

DigitalOcean het wonderlike manul oor hierdie saak. Ek het niks om by te voeg nie. En die gevolglike konfigurasie kan redelik maklik gekoppel word aan die OpenVPN-kliënt en systemd. Plaas dit net (config) in /etc/openvpn/client/ en moenie vergeet om die uitbreiding na te verander nie .conf. Daarna, trek die diens [email protected]moenie vergeet om dit vir haar te doen nie enable en wees bly dat alles weggevlieg het.

Natuurlik moet ons enige herleiding van verkeer na die nuutgeskepte VPN deaktiveer, want ons wil nie die spoed op die kliëntmasjien verminder deur verkeer deur 'n halwe bal te stuur nie.

En ja, ons moet 'n statiese IP-adres op die VPN-bediener vir ons kliënt registreer. Dit sal 'n bietjie later in die verhaal nodig wees. Om dit te doen moet jy aktiveer ifconfig-pool-persist, wysig ipp.txt, ingesluit by OpenVPN en aktiveer client-config-dir, plus wysig die konfigurasie van die verlangde kliënt deur by te voeg ifconfig-push met die korrekte masker en gewenste IP-adres.

Bedryf twee

Nou het ons 'n masjien op die "netwerk" wat na die internet kyk en vir selfsugtige doeleindes gebruik kan word. Herlei naamlik 'n deel van die verkeer daardeur.

Dus, 'n nuwe taak: jy moet die verkeer wat by een van die VPS-poorte aankom met 'n wit IP afskakel sodat hierdie verkeer na die nuut gekoppelde virtuele netwerk gaan en die reaksie daarvandaan kan terugkeer.

Oplossing: natuurlik iptables! Wanneer anders sal jy so 'n wonderlike geleentheid hê om saam met hom te oefen?

Die vereiste konfigurasie kan redelik vinnig gevind word, binne drie uur, honderd vloekwoorde en 'n handvol vermorste senuwees, want ontfouting van netwerke is 'n baie spesifieke prosedure.

Eerstens moet u verkeersherleiding in die kern aktiveer. Hierdie ding word genoem ipv4.ip_forward en word effens anders geaktiveer, afhangende van die bedryfstelsel en netwerkbestuurder.

Tweedens moet u 'n poort op die VPS kies en alle verkeer wat daarheen gaan, in 'n virtuele subnet toevou. Dit kan byvoorbeeld so gedoen word:

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

Hier herlei ons alle TCP-verkeer wat na poort 8080 van die eksterne koppelvlak kom na 'n masjien met IP 10.8.0.2 en dieselfde poort 8080.

Vir diegene wat die vuil besonderhede van die werk wil hê netfilter, iptables en roetering in die algemeen, is dit absoluut noodsaaklik om te oorweeg hierdie of hierdie.

So, nou vlieg ons pakkies na die virtuele subnet en ... hulle bly daar. Meer presies, die reaksie van die sokkie-instaanbediener vlieg terug deur die verstekpoort op die masjien met Dante en die ontvanger laat dit val, want in netwerke is dit nie gebruiklik om 'n versoek na een IP te stuur en 'n antwoord van 'n ander te ontvang nie. Daarom moet ons aanhou toor.

Dus, nou moet u alle pakkies vanaf die instaanbediener teruglei na die virtuele subnet na die VPS met 'n wit IP. Hier is die situasie 'n bietjie erger, want dit is net iptables ons sal nie genoeg hê nie, want as ons die bestemmingsadres regstel voor roetering (PREROUTING), dan sal ons pakket nie na die internet vlieg nie, en as ons dit nie regmaak nie, gaan die pakket na default gateway. So, jy moet die volgende doen: onthou die ketting mangle, om pakkies deur te merk iptables en draai hulle toe in 'n pasgemaakte roeteringtabel wat hulle sal stuur waarheen hulle moet gaan.

Nie gou gesê as gedaan nie:

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

Ons neem uitgaande verkeer, merk alles wat vlieg vanaf die hawe waarop die proxy sit (8080 in ons geval), herlei alle gemerkte verkeer na die roetetabel met nommer 80 (in die algemeen hang die nommer niks af nie, ons wou net to) en voeg 'n enkele reël by, waarvolgens alle pakkies wat in hierdie tabel ingesluit is, na die VPN-subnet vlieg.

Puik! Nou vlieg die pakkies terug na die VPS... en sterf daar. Want VPS weet nie wat om met hulle te doen nie. Daarom, as jy nie die moeite doen nie, kan jy eenvoudig alle verkeer wat van die virtuele subnet aankom, terug na die internet herlei:

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

Hier word alles wat vanaf die 10.8.0.0-subnet met 'n masker van 255.255.255.000 kom, toegedraai in bron-NAT en vlieg na die verstek-koppelvlak, wat na die internet gedraai word. Dit is belangrik om daarop te let dat hierdie ding net sal werk as ons die poort deursigtig aanstuur, dit wil sê die inkomende poort op die VPS ooreenstem met die poort van ons proxy. Anders sal jy 'n bietjie meer moet ly.

Nou iewers moet alles begin werk. En net 'n bietjie bly oor: moenie vergeet om seker te maak dat alle konfigurasies nie iptables и route het nie voortgegaan na die herbegin nie. Vir iptables daar is spesiale lêers soos /etc/iptables/rules.v4(in die geval van Ubuntu), maar vir roetes is alles 'n bietjie meer ingewikkeld. Ek het hulle ingedruk up/down OpenVPN-skrifte, alhoewel ek dink dit kon meer ordentlik gedoen word.

Wikkel verkeer vanaf die toepassing in instaanbediener

Dus, ons het 'n instaanbediener met verifikasie in die gewenste land, toeganklik via 'n statiese wit IP-adres. Al wat oorbly, is om dit te gebruik en verkeer vanaf Spotify daarheen te herlei. Maar daar is 'n nuanse, soos hierbo genoem, die aanmeldwagwoord vir die instaanbediener in Spotify werk nie, so ons sal kyk hoe om dit te omseil.

Om mee te begin, laat ons onthou oor proxifier. Fantastiese goed, maar dit kos soveel soos 'n ruimteskip ($40). Met hierdie geld kan ons weer premie koop en daarmee klaar wees. Daarom sal ons soek na meer gratis en oop analoë op die Mac (ja, ons wil musiek op die Mac luister). Kom ons ontdek een hele hulpmiddel: proximac. En ons sal hom gelukkig gaan steek.

Maar die vreugde sal van korte duur wees, want dit blyk dat jy ontfoutingsmodus en pasgemaakte kernuitbreidings in MacOS moet aktiveer, 'n eenvoudige konfigurasie moet indien en verstaan ​​dat hierdie instrument presies dieselfde probleem as Spotify het: dit kan nie stawing deur die gebruik van die login-wagwoord op socks-proxy.

Iewers hier rond is dit tyd om te freak en 'n premie te koop ... maar nee! Kom ons probeer vra dat dit reggemaak word, dit is oopbron! Kom ons doen kaartjie. En in reaksie kry ons 'n hartverskeurende storie oor hoe die enigste onderhouder nie meer 'n MacBook het nie en tot die hel daarmee, nie 'n oplossing nie.

Ons sal weer ontsteld wees. Maar dan sal ons ons jeug en C onthou, die ontfoutmodus in Dante aanskakel, deur honderde kilogrepe logs grawe, gaan na RFC1927 vir inligting oor die SOCKS5-protokol, kom ons kyk na Xcode en vind die probleem. Dit is genoeg om een ​​karakter reg te stel in die lys metodekodes wat die kliënt bied vir verifikasie en alles begin soos klokslag werk. Ons is bly, ons versamel die vrystelling binêre, ons doen trek versoek en ons gaan die sonsondergang in en gaan na die volgende punt.

Outomatiseer dit

Sodra Proximac werk, moet dit gedemoniseer word en daarvan vergeet word. Daar is een hele inisialiseringstelsel wat hiervoor geskik is, wat in MacOS gevind word, naamlik van stapel gestuur.

Ons vind dit vinnig handleiding en ons verstaan ​​dat dit glad nie is nie systemd en hier is dit amper 'n scoop en xml. Geen fancy configs vir jou, geen opdragte soos status, restart, daemon-reload. Slegs hardcore soort start-stop, list-grep, unload-load en nog vele meer eienaardighede. Deur dit alles te oorkom, skryf ons plist, laai. Werk nie. Ons bestudeer die metode om die demoon te ontfout, ontfout dit, verstaan ​​wat daar is ENV selfs PATH ons het nie die normale een gelewer nie, ons argumenteer, ons bring dit in (voeg by /sbin и /usr/local/bin) en uiteindelik is ons tevrede met outostart en stabiele werking.

Uitasem

Wat is die resultaat? 'n Week van avontuur, 'n knielende dieretuin van dienste wat na aan die hart lê en doen wat daarvan vereis word. 'n Bietjie kennis op twyfelagtige tegniese gebiede, 'n bietjie oopbron en 'n glimlag op jou gesig van die gedagte "Ek het dit gedoen!"

NS: dit is nie 'n oproep vir 'n boikot van kapitaliste, vir besparing op vuurhoutjies of vir totale slinksheid nie, maar net 'n aanduiding van die moontlikhede van navorsing en ontwikkeling waar jy dit oor die algemeen nie verwag nie.

Bron: will.com

Voeg 'n opmerking