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
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
Wachtsje net op Dante's hantlieding oer ynstallaasje en konfiguraasje. Hy 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
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 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
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
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
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
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
Wy fine it gau 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