Aventoeren út 'e blau

Aventoeren út 'e blau

Hoe Spotify kin jo helpe om daemons, RFC's, netwurken te studearjen en iepen boarne te befoarderjen. Of wat bart der as jo kinne net betelje, mar jo echt wol wat premium goodies.

Thús

Op 'e tredde dei waard it opmurken dat Spotify advertinsjes werjûn op basis fan it lân fan it IP-adres. It waard ek opmurken dat yn guon lannen reklame hielendal net ymportearre waard. Bygelyks, yn 'e Republyk Wyt-Ruslân. En doe waard in "briljant" plan útbrocht om reklame út te skeakeljen yn in net-premium akkount.

In bytsje oer Spotify

Yn 't algemien hat Spotify in nuver belied. Us broer moat aardich ferdraaid wurde om premium te keapjen: feroarje de lokaasje yn syn profyl nei it bûtenlân, sykje in gaadlike kadokaart dy't allinnich betelle wurde kin mei PayPal, dat de lêste tiid raar docht en in bult dokuminten wol. Yn 't algemien is it ek in aventoer, mar fan in oare oarder. Hoewol't de measte minsken dogge dit om 'e wille fan' e mobile ferzje, Ik bin net ynteressearre yn it. Dêrom sil alles hjirûnder allinich helpe yn it gefal fan 'e buroblêdferzje. Boppedat komt der gjin útwreiding fan funksjes. Krekt wat fan 'e ekstra ôfsnije.

Wêrom is it sa yngewikkeld?

En ik tocht dat by it registrearjen fan de socks-proxy-gegevens yn 'e Spotify-konfiguraasje. It probleem blykte te wêzen dat autentikaasje yn sokken mei oanmelding en wachtwurd net wurket. Plus, ûntwikkelders dogge geregeldwei wat om de proxy hinne: soms tastean, soms ferbiede, soms brekke it, dat jout oanlieding ta hiele panielen fan diskusjes op de off-site.

It waard besletten net te fertrouwe op ynstabile funksjes en te finen wat mear betrouber en ynteressant.

Earne hjir moat de lêzer freegje: wêrom net nimme ssh mei in kaai -D en dat is it ein? En, yn 't algemien, sil hy gelyk hawwe. Mar earst moat dit noch wurde demonisearre en befreone wurde mei autossh, om net te tinken oer ferskuorde ferbiningen. En twad: it is te ienfâldich en saai.

Yn oarder

Lykas gewoanlik, litte wy fan links nei rjochts, fan boppen nei ûnderen gean en alles beskriuwe wat wy nedich binne om ús "ienfâldige" idee út te fieren.

Earst moatte jo in proxy hawwe

En d'r binne in protte alternativen tagelyk:

  • jo kinne gewoan gean en nimme fan iepen proxylisten. Goedkeap (of leaver foar neat), mar absolút ûnbetrouber en it libben fan sokke proxies hat de neiging nei nul. Dêrom soe it nedich wêze om in parser foar proxylisten te finen / te skriuwen, se te filterjen op it winske type en lân, en de fraach fan it ferfangen fan de fûn proxy yn Spotify bliuwt iepen (goed, miskien fia HTTP_PROXY oerdrage en meitsje in oanpaste wrapper foar de binêre, sadat alle oare ferkear dêr net stjoerd wurdt).
  • Jo kinne in ferlykbere proxy keapje en josels bewarje fan 'e measte fan' e hjirboppe beskreaune problemen. Mar foar de priis fan in proxy kinne jo fuortendaliks premium keapje op Spotify, en dit is net praktysk foar de orizjinele taak.
  • Ferheegje dyn. Lykas jo wierskynlik riede, is dit ús kar.

Suver tafallich kin it bliken dat jo in freon hawwe mei in server yn 'e Republyk Wyt-Ruslân of in oar lyts lân. Jo moatte dit brûke en de winske proxy derop útrolje. Spesjale kenners kinne tefreden wêze mei in freon mei in router oan DD-WRT of ferlykbere software. Mar dêr syn prachtige wrâld en dizze wrâld past dúdlik net yn it ramt fan dit ferhaal.

Dat, ús opsjes: Squid - net ynspirearjend, en ik wol gjin HTTP-proxy, d'r binne al te folle fan dit protokol rûn. En op it gebiet fan SOCKS is d'r neat ferstannich útsein dante noch net levere. Dêrom, lit ús nimme it.

Wachtsje net op Dante's hantlieding oer ynstallaasje en konfiguraasje. Hy gewoan googelen en is net fan bysûnder belang. Yn de minimale konfiguraasje jo moatte smite yn alle soarten fan client pass, socks pass, registrearje de ynterfaces korrekt en ferjit net ta te foegjen socksmethod: username. Yn dit formulier, foar autentikaasje, sil de logopass wurde nommen fan 'e systeembrûkers. En it diel oer feiligens: tagong ta localhost ferbiede, brûkers beheine, ensfh. - dit is suver yndividueel, ôfhinklik fan persoanlike paranoia.

Implementearje in proxy foar it netwurk

It stik is yn twa bidriuwen.

Akte ien

Wy hawwe de proxy sorteare, no moatte wy tagong krije fan it wrâldwide web. As jo ​​​​in masine hawwe mei in wite IP yn it winske lân, dan kinne jo dit punt feilich oerslaan. Wy hawwe net ien (wy, lykas hjirboppe neamd, wurde hosted by freonen 'huzen) en de tichtstbye wite IP is earne yn Dútslân, dus wy sille studearje netwurken.

Dus ja, de oandachtige lêzer sil nochris freegje: wêrom nimst net in besteande tsjinst lykas ngrok of ferlykber? En hy sil wer gelyk hawwe. Mar dit is in tsjinst, it moat wer demonisearre wurde, it kin ek jild kostje en yn it algemien is it net sportyf. Dêrom sille wy fytsen meitsje fan ôffalmateriaal.

Taak: d'r is in proxy earne fier efter NAT, jo moatte it hingje op ien fan 'e havens fan in VPS dy't in wite IP hat en leit oan' e râne fan 'e wrâld.

It is logysk om oan te nimmen dat dit oplost wurde kin troch poarte trochstjoere (dat wurdt ymplementearre fia de boppeneamde ssh), of troch hardware te kombinearjen yn in firtuele netwurk fia VPN. MEI ssh wy witte hoe te wurkjen, autossh It is saai om te nimmen, dus litte wy OpenVPN nimme.

DigitalOcean hat prachtige manul oer dizze saak. Ik haw der neat oan ta te foegjen. En de resultearjende konfiguraasje kin frij maklik ferbûn wurde mei de OpenVPN-kliïnt en systemd. Set it gewoan yn (config). /etc/openvpn/client/ en ferjit net de útwreiding te feroarjen nei .conf. Dêrnei, lûk de tsjinst [email protected]ferjit it net foar har te dwaan enable en bliid dat alles fuort fleach.

Fansels moatte wy elke omlieding fan ferkear útskeakelje nei de nij oanmakke VPN, om't wy de snelheid op 'e kliïntmasine net wolle ferminderje troch ferkear troch in heale bal te passearjen.

En ja, wy moatte in statysk IP-adres registrearje op 'e VPN-tsjinner foar ús kliïnt. Dit sil in bytsje letter yn it ferhaal nedich wêze. Om dit te dwaan moatte jo ynskeakelje ifconfig-pool-persist, bewurkje ipp.txt, opnommen mei OpenVPN en ynskeakelje client-config-dir, plus bewurkje de konfiguraasje fan 'e winske client troch ta te foegjen ifconfig-push mei it juste masker en it winske IP-adres.

Akte twa

No hawwe wy in masine op it "netwurk" dy't rjochtet op it ynternet en kin brûkt wurde foar egoïstyske doelen. In part fan it ferkear dêrtroch nammentlik omliede.

Dat, in nije taak: jo moatte it ferkear útskeakelje dat oankomt by ien fan 'e VPS-poarten mei in wite IP, sadat dit ferkear nei it nij ferbûne firtuele netwurk giet en it antwurd dêrwei kin weromkomme.

Oplossing: fansels iptables! Wannear sille jo oars sa'n prachtige kâns hawwe om mei him te oefenjen?

De fereaske konfiguraasje kin frij fluch fûn wurde, yn trije oeren, hûndert skelwurden en in hânfol fergriemde senuwen, om't debuggen fan netwurken in heul spesifike proseduere is.

Earst moatte jo ferkear omlieding ynskeakelje yn 'e kernel. Dit ding hjit ipv4.ip_forward en is in bytsje oars ynskeakele ôfhinklik fan it OS en netwurkbehearder.

Twads moatte jo in poarte op 'e VPS selektearje en al it ferkear dat derhinne giet yn in firtuele subnet ynpakke. Dit kin bygelyks sa dien wurde:

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

Hjir omliede wy alle TCP-ferkear dat nei haven 8080 fan 'e eksterne ynterface komt nei in masine mei IP 10.8.0.2 en deselde haven 8080.

Foar dyjingen dy't de smoarge details fan 'e baan wolle netfilter, iptables en routing yn it algemien, is it perfoarst nedich om te betinken it of it.

Dat, no fleane ús pakketten nei it firtuele subnet en ... se bliuwe dêr. Krekter, it antwurd fan 'e socken proxy fljocht werom troch de standert poarte op' e masine mei Dante en de ûntfanger falt it, om't yn netwurken it net gewoan is om in fersyk nei ien IP te stjoeren en in antwurd fan in oar te ûntfangen. Dêrom moatte wy trochgean mei toverjen.

Dat, no moatte jo alle pakketten fan 'e proxy werom omleare nei it firtuele subnet nei de VPS mei in wite IP. Hjir is de situaasje in bytsje slimmer, want it is gewoan iptables wy sille net genôch hawwe, om't as wy it bestimmingsadres korrigearje foardat routing (PREROUTING), dan sil ús pakket net nei it ynternet fleane, en as wy it net reparearje, sil it pakket nei default gateway. Dus, jo moatte it folgjende dwaan: ûnthâlde de ketting mangle, om pakketten troch te markearjen iptables en wrap se yn in oanpaste routing tafel dat sil stjoere se wêr't se moatte gean.

Net earder sein as dien:

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

Wy nimme útgeand ferkear, markearje alles dat fljocht fan 'e haven wêrop de proxy sit (yn ús gefal 8080), omliede alle markearre ferkear nei de routingtabel mei nûmer 80 (yn't algemien hinget it nûmer neat ôf, wy woenen gewoan to) en foegje in inkele regel ta, neffens dêr't alle pakketten opnommen yn dizze tabel fleane nei de VPN subnet.

Grut! No fleane de pakjes werom nei de VPS... en stjerre dêr. Omdat VPS net wit wat te dwaan mei harren. Dêrom, as jo net lestich falle, kinne jo gewoan omliede alle ferkear dat komt fan it firtuele subnet werom nei it ynternet:

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

Hjir is alles wat komt fan it 10.8.0.0 subnet mei in masker fan 255.255.255.000 yn 'e boarne-NAT ferpakt en fljocht nei de standertynterface, dy't nei it ynternet draait. It is wichtich om te notearjen dat dit ding allinich sil wurkje as wy de poarte transparant trochstjoere, dat is, de ynkommende poarte op 'e VPS komt oerien mei de poarte fan ús proxy. Oars moatte jo noch wat lije.

Ergens moat no alles begjinne te wurkjen. En mar in bytsje bliuwt: ferjit net om te soargjen dat alle konfiguraasjes iptables и route gie net troch nei de trochstart. Foar iptables der binne spesjale triemmen lykas /etc/iptables/rules.v4(yn it gefal fan Ubuntu), mar foar rûtes is alles wat komplisearre. Ik triuwde se yn up/down OpenVPN-skripts, hoewol ik tink dat se fatsoenliker kinne wurde dien.

Wrap ferkear fan 'e applikaasje yn proxy

Dat, wy hawwe in proxy mei autentikaasje yn it winske lân, tagonklik fia in statysk wyt IP-adres. Alles wat oerbliuwt is it te brûken en ferkear fan Spotify dêr troch te lieden. Mar d'r is in nuânse, lykas hjirboppe neamd, it login-wachtwurd foar de proxy yn Spotify wurket net, dus wy sille sykje hoe't wy it kinne omgean.

Om te begjinnen, lit ús ûnthâlde oer proxy. Geweldich spul, mar it kostet safolle as in stjerreskip ($ 40). Mei dit jild kinne wy ​​wer premium keapje en der mei klear wêze. Dêrom sille wy sykje nei mear fergese en iepen analogen op 'e Mac (ja, wy wolle nei muzyk harkje op' e Mac). Litte wy ien folslein ark ûntdekke: proximac. En wy geane lokkich him te pokken.

Mar de freugde sil koart wêze, om't it docht bliken dat jo debug-modus en oanpaste kernel-útwreidingen yn MacOS moatte ynskeakelje, in ienfâldige konfiguraasje yntsjinje en begripe dat dit ark krekt itselde probleem hat as Spotify: it kin de autentikaasje net trochjaan mei de login-wachtwurd op sokken-proxy.

Earne om hjir is it tiid om te freak out en keapje in premium ... mar nee! Litte wy besykje te freegjen om it te reparearjen, it is iepen boarne! Litte wy dwaan kaartsje. En as antwurd krije wy in hertbrekkend ferhaal oer hoe't de ienige ûnderhâlder gjin MacBook mear hat en nei de hel mei it, gjin fix.

Wy sille wer oerstjoer. Mar dan sille wy ús jeugd en C ûnthâlde, de debugmodus yn Dante ynskeakelje, troch hûnderten kilobytes oan logs grave, gean nei RFC1927 foar ynformaasje oer it SOCKS5-protokol, litte wy nei Xcode sjen en it probleem fine. It is genôch om ien karakter te korrigearjen yn 'e list mei metoadekoades dy't de kliïnt biedt foar autentikaasje en alles begjint te wurkjen as in klok. Wy binne bliid, wy sammelje de frijlitting binêr, wy dogge pull fersyk en wy geane yn 'e sinne en gean nei it folgjende punt.

Automatisearje it

Sadree't Proximac wurket, moat it demonisearre wurde en fergetten wurde. D'r is ien folslein inisjalisaasjesysteem dat hjirfoar geskikt is, dat is te finen yn MacOS, nammentlik lansearre.

Wy fine it gau hantlieding en wy begripe dat dit is net hielendal systemd en hjir is it hast in skep en xml. Gjin fancy configs foar jo, gjin kommando's lykas status, restart, daemon-reload. Allinnich hardcore soarte start-stop, list-grep, unload-load en noch folle mear nuverheden. Dit alles oerwinne wy ​​skriuwe plist, laden. Wurket net. Wy studearje de metoade foar it debuggen fan 'e demon, debuggen it, begripe wat d'r is ENV даже PATH wy hawwe de normale net levere, stelle wy, wy bringe it yn (taheakjen /sbin и /usr/local/bin) en úteinlik binne wy ​​bliid mei autostart en stabile operaasje.

Exhale

Wat is it resultaat? In wike fan aventoer, in knibbeljende bistetún fan tsjinsten dy't nei it hert leit en docht wat der fan frege wurdt. In bytsje kennis op dubieuze technyske gebieten, in bytsje iepen boarne en in glimke op jo gesicht fan 'e gedachte "Ik haw it dien!"

PS: dit is gjin oprop foar in boykot fan kapitalisten, om te besparjen op wedstriden of foar totale list, mar gewoan in yndikaasje fan de mooglikheden fan ûndersyk en ûntwikkeling dêr't jo se oer it algemien net ferwachtsje.

Boarne: www.habr.com

Add a comment