Kako vam Spotify može pomoći u proučavanju demona, RFC-ova, mreža i promoviranju otvorenog koda. Ili što se događa ako ne možete platiti, ali stvarno želite vrhunske stvari.
početak
Trećeg dana primijećeno je da Spotify prikazuje reklame na temelju zemlje IP adrese. Također je primijećeno da u nekim zemljama oglašavanje uopće nije uvezeno. Na primjer, u Republici Bjelorusiji. A onda je skovan "briljantan" plan za onemogućavanje oglašavanja na nepremium računu.
Malo o Spotifyju
Općenito govoreći, Spotify ima čudnu politiku. Naš brat se mora dobro zeznuti da bi kupio premium: promijeniti mjesto u profilu u inozemstvo, potražiti odgovarajuću poklon karticu koja se može platiti samo PayPalom, koji se zadnje vrijeme čudno ponaša i traži hrpu dokumenata. Općenito, to je također avantura, ali drugačijeg reda. Iako većina ljudi to radi zbog mobilne verzije, mene to ne zanima. Stoga će sve ispod pomoći samo u slučaju desktop verzije. Štoviše, neće biti proširenja funkcija. Samo odsiječem neke od dodatnih.
Zašto je tako komplicirano?
I ja sam tako mislio kad sam registrirao socks-proxy podatke u Spotify konfiguraciji. Ispostavilo se da je problem u tome što provjera autentičnosti u Socksu pomoću prijave i lozinke ne radi. Osim toga, programeri redovito rade nešto oko proxyja: ponekad ga dopuštaju, ponekad zabranjuju, ponekad ga krše, što dovodi do čitavih panela rasprava izvan stranice.
Odlučeno je ne oslanjati se na nestabilne funkcije i pronaći nešto pouzdanije i zanimljivije.
Negdje se ovdje čitatelj mora zapitati: zašto ne uzeti ssh
s ključem -D
i to je kraj? I, općenito, bit će u pravu. Ali, prvo, ovo još uvijek treba demonizirati i sprijateljiti se s autosshom, kako ne bi razmišljali o pokidanim vezama. I drugo: previše je jednostavno i dosadno.
U redu
Kao i obično, idemo s lijeva na desno, odozgo prema dolje i opišemo sve što nam je potrebno za provedbu naše “jednostavne” ideje.
Prvo vam je potreban proxy
I postoji mnogo alternativa odjednom:
- možete samo otići i uzeti s otvorenih proxy popisa. Jeftino (ili bolje rečeno za ništa), ali apsolutno nepouzdano i životni vijek takvih proxyja teži nuli. Stoga bi bilo potrebno pronaći/napisati parser za proxy liste, filtrirati ih po željenoj vrsti i zemlji, a ostaje otvoreno pitanje zamjene pronađenog proxyja u Spotify (dobro, možda kroz
HTTP_PROXY
prijenos i stvaranje prilagođenog omotača za binarnu datoteku tako da se sav ostali promet ne šalje tamo). - Možete kupiti sličan proxy i spasiti se od većine gore opisanih problema. Ali po cijeni proxyja, možete odmah kupiti premium na Spotifyju, a to nije praktično za izvorni zadatak.
- Podigni svoje. Kao što ste vjerojatno pogodili, ovo je naš izbor.
Čisto slučajno se može ispostaviti da imate prijatelja sa serverom u Republici Bjelorusiji ili nekoj drugoj maloj zemlji. Morate ovo upotrijebiti i na njemu postaviti željeni proxy. Posebni znalci mogu se zadovoljiti s prijateljem s uključenim ruterom
Dakle, naše opcije: Squid - nije inspirativno i ne želim HTTP proxy, već ima previše ovog protokola. A u području ČARAPA nema ništa razumno osim
Ne čekajte Danteov priručnik za instalaciju i konfiguraciju. On client pass
, socks pass
, ispravno registrirajte sučelja i ne zaboravite dodati socksmethod: username
. U ovom obliku, za provjeru autentičnosti, logopass će se uzeti od korisnika sustava. A dio o sigurnosti: zabrana pristupa localhostu, ograničavanje korisnika itd. - to je čisto individualno, ovisno o osobnoj paranoji.
Postavite proxy prema mreži
Predstava je u dva čina.
Čin prvi
Sredili smo proxy, sada mu moramo pristupiti s globalne mreže. Ako imate stroj s bijelim IP-om u željenoj zemlji, tada možete sigurno preskočiti ovu točku. Mi ga nemamo (mi smo, kao što je gore spomenuto, smješteni kod prijatelja), a najbliži bijeli IP je negdje u Njemačkoj, pa ćemo proučiti mreže.
Pa da, pažljivi čitatelj opet će se zapitati: zašto ne uzmete postojeću uslugu poput
Zadatak: postoji proxy negdje daleko iza NAT-a, trebate ga objesiti na jedan od portova VPS-a koji ima bijeli IP i nalazi se na rubu svijeta.
Logično je pretpostaviti da se to može riješiti ili prosljeđivanjem porta (koje se provodi kroz gore spomenuti ssh
), ili kombiniranjem hardvera u virtualnu mrežu putem VPN-a. S ssh
znamo raditi, autossh
Dosadno je uzeti, pa uzmimo OpenVPN.
DigitalOcean ima systemd
. Samo ga stavite (config). /etc/openvpn/client/
i ne zaboravite promijeniti ekstenziju u .conf
. Nakon toga povucite uslugu [email protected]
ne zaboravi to učiniti za nju enable
i raduj se što je sve odletjelo.
Naravno, trebamo onemogućiti svako preusmjeravanje prometa na novostvoreni VPN, jer ne želimo smanjiti brzinu na klijentskom stroju propuštanjem prometa kroz pola lopte.
I da, moramo registrirati statičku IP adresu na VPN poslužitelju za našeg klijenta. Ovo će biti potrebno malo kasnije u priči. Da biste to učinili, morate omogućiti ifconfig-pool-persist
, Uredi ipp.txt
, uključeno uz OpenVPN i omogućiti client-config-dir, te urediti konfiguraciju željenog klijenta dodavanjem ifconfig-push
s ispravnom maskom i željenom IP adresom.
Čin drugi
Sada imamo stroj na "mreži" koji je okrenut prema Internetu i može se koristiti u sebične svrhe. Naime, kroz njega preusmjeriti dio prometa.
Dakle, novi zadatak: morate isključiti promet koji dolazi na jedan od VPS portova s bijelim IP-om tako da taj promet ide na novopovezanu virtualnu mrežu i da se odgovor može vratiti od tamo.
Rješenje: naravno iptables
! Kad ćeš inače imati tako divnu priliku vježbati s njim?
Potrebna konfiguracija može se pronaći dosta brzo, za tri sata, stotinjak psovki i pregršt potrošenih živaca, jer debugovanje mreža vrlo je specifičan postupak.
Prvo morate omogućiti preusmjeravanje prometa u kernelu. Ova stvar se zove ipv4.ip_forward
i omogućen je malo drugačije ovisno o OS-u i mrežnom upravitelju.
Drugo, trebate odabrati priključak na VPS-u i omotati sav promet koji ide prema njemu u virtualnu podmrežu. To se može učiniti, na primjer, ovako:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to-destination 10.8.0.2:8080
Ovdje preusmjeravamo sav TCP promet koji dolazi na port 8080 vanjskog sučelja na stroj s IP 10.8.0.2 i istim portom 8080.
Za one koji žele prljave detalje posla netfilter
, iptables
i usmjeravanje općenito, apsolutno je potrebno razmotriti
Dakle, sada naši paketi lete u virtualnu podmrežu i... tamo ostaju. Točnije, odgovor od socks proxyja leti natrag kroz default gateway na stroju s Danteom i primatelj ga ispušta, jer u mrežama nije uobičajeno slati zahtjev na jednu IP adresu, a primati odgovor s druge. Stoga, trebamo nastaviti dočaravati.
Dakle, sada trebate preusmjeriti sve pakete s proxyja natrag u virtualnu podmrežu prema VPS-u s bijelim IP-om. Ovdje je situacija malo gora, jer je jednostavno iptables
nećemo imati dovoljno, jer ako ispravimo odredišnu adresu prije usmjeravanja (PREROUTING
), tada naš paket neće letjeti na Internet, a ako to ne popravimo, paket će otići na default gateway
. Dakle, trebate učiniti sljedeće: zapamtite lanac mangle
, kako bi označili pakete kroz iptables
i zamotajte ih u prilagođenu tablicu usmjeravanja koja će ih poslati kamo trebaju ići.
Rečeno, učinjeno:
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
Uzimamo odlazni promet, označavamo sve što leti iz porta na kojem se nalazi proxy (8080 u našem slučaju), preusmjeravamo sav označeni promet u tablicu usmjeravanja s brojem 80 (općenito, broj ne ovisi ni o čemu, samo smo htjeli do) i dodajte jedno pravilo, prema kojem svi paketi uključeni u ovu tablicu lete u VPN podmrežu.
Sjajno! Sada paketi lete natrag prema VPS-u... i tamo umiru. Jer VPS ne zna što bi s njima. Stoga, ako se ne trudite, možete jednostavno preusmjeriti sav promet koji stiže iz virtualne podmreže natrag na Internet:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 172.42.1.10
Ovdje se sve što stigne iz podmreže 10.8.0.0 s maskom 255.255.255.000 zamota u izvorni-NAT i leti na zadano sučelje koje je okrenuto prema Internetu. Važno je napomenuti da će ova stvar raditi samo ako port prosljeđujemo transparentno, odnosno da dolazni port na VPS-u odgovara portu našeg proxyja. Inače ćete morati trpjeti još malo.
Negdje bi sada sve trebalo početi funkcionirati. I još samo malo: ne zaboravite provjeriti jesu li sve konfiguracije iptables
и route
nije nastavio nakon ponovnog pokretanja. Za iptables
postoje posebne datoteke poput /etc/iptables/rules.v4
(u slučaju Ubuntua), ali za rute je sve malo kompliciranije. Gurnuo sam ih unutra up/down
OpenVPN skripte, iako mislim da su mogle biti bolje napravljene.
Zamotajte promet iz aplikacije u proxy
Dakle, imamo proxy s autentifikacijom u željenoj zemlji, dostupan preko statične bijele IP adrese. Preostaje ga samo iskoristiti i tamo preusmjeriti promet sa Spotifyja. Ali postoji nijansa, kao što je gore spomenuto, lozinka za prijavu na proxy u Spotifyju ne radi, pa ćemo tražiti kako to zaobići.
Za početak, prisjetimo se o
Ali radost će biti kratkog vijeka, jer se ispostavilo da morate omogućiti debug mod i prilagođena proširenja jezgre u MacOS-u, arhivirati jednostavnu konfiguraciju i shvatiti da ovaj alat ima potpuno isti problem kao Spotify: ne može proći autentifikaciju pomoću prijava-lozinka na socks-proxyju.
Negdje ovdje došlo je vrijeme da poludite i kupite premium... ali ne! Pokušajmo tražiti da se to popravi, to je open source! Učinimo
Opet ćemo se uzrujati. Ali onda ćemo se sjetiti svoje mladosti i C-a, uključiti debug mod u Danteu, kopati po stotinama kilobajta zapisa, otići na
Automatizirajte to
Nakon što Proximac proradi, treba ga demonizirati i zaboraviti. Postoji jedan cijeli sustav inicijalizacije koji je prikladan za to, a nalazi se u MacOS-u, naime
Brzo ga nalazimo systemd
a ovdje je skoro lopatica i xml
. Nema otmjenih konfiguracija za vas, nema sličnih naredbi status
, restart
, daemon-reload
. Samo hardcore vrsta start-stop
, list-grep
, unload-load
i mnoge druge neobičnosti. Prevladavajući sve ovo pišemo plist
, Učitavam. Ne radi. Proučavamo metodu otklanjanja pogrešaka demona, otklanjamo pogreške, razumijemo što je tamo ENV
čak PATH
nismo isporučili normalnu, svađamo se, donosimo (dodaje /sbin
и /usr/local/bin
) i konačno smo zadovoljni autostartom i stabilnim radom.
Izdahnite
Kakav je rezultat? Tjedan avanture, klečeći zoološki vrt od usluga koje su srcu drage i rade ono što se od njih traži. Malo znanja iz sumnjivih tehničkih područja, malo open sourcea i osmijeh na licu od pomisli "Uspio sam!"
PS: ovo nije poziv na bojkot kapitalista, na štednju na šibicama ili na totalno lukavstvo, već samo naznaka mogućnosti istraživanja i razvoja tamo gdje ih, uglavnom, ne očekujete.
Izvor: www.habr.com