Avventure fora di u celu

Avventure fora di u celu

Cumu Spotify pò aiutà à studià i demoni, RFC, e rete è prumove a fonte aperta. O ciò chì succede s'ellu ùn pò micca pagà, ma veramente vulete alcuni boni premium.

U principiu

U terzu ghjornu, hè statu nutatu chì Spotify mostrava publicità basatu annantu à u paese di l'indirizzu IP. Hè ancu nutatu chì in certi paesi a publicità ùn era micca impurtata in tuttu. Per esempiu, in a Republica di Bielorussia. È dopu un pianu "brillante" hè statu sbulicatu per disattivà a publicità in un contu non premium.

Un pocu nantu à Spotify

In generale, Spotify hà una pulitica strana. U nostru fratellu deve esse abbastanza torciatu per cumprà premium: cambia u locu in u so prufilu à l'oltremare, cercate una carta di rigalu adattata chì pò esse pagata solu cù PayPal, chì hà agitu stranu ultimamente è vole una mansa di documenti. In generale, hè ancu una avventura, ma di un altru ordine. Ancu s'è a maiò parte di e persone facenu questu per a versione mobile, ùn sò micca interessatu. Per quessa, tuttu quì sottu aiuterà solu in u casu di a versione desktop. Inoltre, ùn ci sarà micca espansione di funzioni. Solu tagliendu alcuni di quelli extra.

Perchè hè cusì cumplicatu?

E aghju pensatu cusì quandu si registranu i dati di calzini-proxy in a cunfigurazione di Spotify. U prublema hè stata chì l'autentificazione in calzini cù login è password ùn funziona micca. In più, i sviluppatori facenu regularmente qualcosa intornu à u proxy: sia permette, dopu pruibisce, o rompe, chì dà origine à pannelli interi di discussioni fora di u situ.

Hè statu decisu di ùn s'appoghjanu micca nantu à e funzioni inestabile è di truvà qualcosa di più affidabile è interessante.

In qualchì locu quì u lettore deve dumandà: perchè micca piglià ssh cù una chjave -D è questu hè a fine? È, in generale, hà da esse ghjustu. Ma, prima, questu sempre deve esse demonizatu è fà amici cù autossh, per ùn pensà micca à e cunnessione strappate. E siconda: hè troppu simplice è noioso.

Per

Comu di solitu, andemu da a manca à a diritta, da cima à fondu è discrivimu tuttu ciò chì avemu bisognu per implementà a nostra idea "semplice".

Prima avete bisognu di un proxy

È ci sò parechje alternative à una volta:

  • pudete solu andà è piglià da listi proxy aperti. Cheap (o piuttostu per nunda), ma assolutamente inaffidabile è a vita di tali proxy tende à zero. Dunque, saria necessariu di truvà / scrive un parser per i listi di proxy, filtrà per u tipu è u paese desideratu, è a quistione di rimpiazzà u proxy trovu in Spotify resta aperta (bene, forse attraversu HTTP_PROXY trasferimentu è creà un wrapper persunalizatu per u binariu in modu chì tutti l'altri traffici ùn sò micca mandati quì).
  • Pudete cumprà un proxy simili è salvà da a maiò parte di i prublemi descritti sopra. Ma à u prezzu di un proxy, pudete immediatamente cumprà premium in Spotify, è questu ùn hè micca praticu per u compitu originale.
  • Alzate u vostru. Cum'è probabilmente avete capitu, questa hè a nostra scelta.

Puramente per casu pò esse chì avete un amicu cù un servitore in a Republica di Bielorussia o in un altru paese. Avete bisognu di utilizà questu è sparghje u proxy desideratu nantu à questu. Connoisseurs spiciali ponu esse cuntentati cù un amicu cun un router DD-WRT o un software simile. Ma quì i so mondu maravigliu è stu mondu chjaramente ùn si mette micca in u quadru di sta storia.

Allora, e nostre opzioni: Squid - micca inspirante, è ùn vogliu micca un proxy HTTP, ci sò digià troppu di stu protokollu intornu. È in l'area di SOCKS ùn ci hè nunda di sensibule eccettu Dante ùn anu ancu mandatu. Dunque, andemu à piglià.

Ùn aspettate micca u manuale di Dante nantu à l'installazione è a cunfigurazione. Ellu solu google è ùn hè micca d'interessu particulari. In a cunfigurazione minima avete bisognu à scaccià in ogni tipu client pass, socks pass, registrà currettamente l'interfaccia è ùn vi scurdate di aghjunghje socksmethod: username. In questa forma, per l'autentificazione, u logopass serà pigliatu da l'utilizatori di u sistema. È a parte di a sicurità: pruibisce l'accessu à u locale host, limità l'utilizatori, etc. - questu hè puramente individuale, secondu a paranoia persunale.

Implementa un proxy di fronte à a reta

U ghjocu hè in dui atti.

Attu unu

Avemu risoltu u proxy, avà avemu bisognu di accede da u web globale. Se tenete una macchina cù una IP bianca in u paese desideratu, pudete saltà in modu sicuru stu puntu. Ùn avemu micca unu (noi, cum'è l'annunziate sopra, sò ospitu in casa di l'amici) è l'IP biancu più vicinu hè in un locu in Germania, cusì studiaremu e rete.

Allora iè, u lettore attentu torna à dumandà: perchè ùn pigliate micca un serviziu esistente cum'è ngrok o simile? È hà da esse ghjustu di novu. Ma questu hè un serviziu, hè di novu deve esse demonizatu, pò ancu costu soldi è in generale ùn hè micca sportiu. Dunque, creeremu e biciclette da materiali di scarti.

Task: ci hè un proxy in un locu luntanu daretu à NAT, avete bisognu à appiccà nantu à unu di i porti di un VPS chì hà una IP bianca è si trova à a riva di u mondu.

Hè logicu di suppone chì questu pò esse risoltu sia da u portu forwarding (chì hè implementatu per via di u sopra citatu). ssh), o cumminendu hardware in una reta virtuale via VPN. CUN ssh sapemu travaglià, autossh Hè stancu di piglià, allora pigliamu OpenVPN.

DigitalOcean hà maravigliosa manu nantu à sta materia. Ùn aghju nunda à aghjunghje. È a cunfigurazione risultante pò esse abbastanza facilmente cunnessa cù u cliente OpenVPN è systemd. Basta à mette (config). /etc/openvpn/client/ è ùn vi scurdate di cambià l'estensione à .conf. Dopu quì, tira u serviziu [email protected]ùn vi scurdate di fà per ella enable è rallegrate chì tuttu hè volatu.

Di sicuru, avemu bisognu di disattivà ogni redirezzione di u trafficu à a nova VPN creata, perchè ùn vulemu riduce a veloce nantu à a macchina di u cliente passendu u trafficu per mezu di una bola.

È sì, avemu bisognu di registrà un indirizzu IP staticu in u servitore VPN per u nostru cliente. Questu serà necessariu un pocu più tardi in a storia. Per fà questu, avete bisognu di attivà ifconfig-pool-persist, edità ipp.txt, inclusu cù OpenVPN è attivate client-config-dir, più edità a cunfigurazione di u cliente desideratu aghjunghjendu ifconfig-push cù a maschera curretta è l'indirizzu IP desideratu.

Attu dui

Avà avemu una macchina nantu à a "rete" chì face l'Internet è pò esse usata per scopi egoisti. Vale à dì, redirect parte di u trafficu attraversu.

Allora, un novu compitu: avete bisognu di disattivà u trafficu chì ghjunghje à unu di i porti VPS cù una IP bianca per chì stu trafficu và à a reta virtuale novamente cunnessa è a risposta pò vultà da quì.

Soluzione: di sicuru iptables! Quandu altru averete una opportunità cusì maravigliosa di praticà cun ellu?

A cunfigurazione necessaria pò esse truvata abbastanza rapidamente, in trè ore, un centu ghjuramentu è una mansa di nervi perditi, perchè debugging networks hè una prucedura assai specifica.

Prima, avete bisognu di attivà a redirezzione di u trafficu in u kernel. Sta cosa hè chjamata ipv4.ip_forward è hè attivatu un pocu sfarente secondu u OS è u gestore di a rete.

Siconda, avete bisognu di selezziunà un portu nantu à u VPS è imbulighjate tuttu u trafficu andendu in una subnet virtuale. Questu pò esse fattu, per esempiu, cusì:

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

Quì redirigemu tuttu u trafficu TCP chì vene à u portu 8080 di l'interfaccia esterna à una macchina cù IP 10.8.0.2 è u stessu portu 8080.

Per quelli chì volenu i dettagli brutti di u travagliu netfilter, iptables è routing in generale, hè assolutamente necessariu di cuntemplazione si o si.

Allora, avà i nostri pacchetti volanu à a subnet virtuale è ... fermanu quì. Più precisamente, a risposta da u proxy di calzini vola torna da a porta predeterminata in a macchina cù Dante è u destinatariu l'abbanduneghja, perchè in e rete ùn hè micca abitudine di mandà una dumanda à una IP è riceve una risposta da un altru. Dunque, avemu bisognu di cuntinuà à evoca.

Allora, avà avete bisognu di redirige tutti i pacchetti da u proxy à a subnet virtuale versu u VPS cù una IP bianca. Quì a situazione hè un pocu peghju, perchè hè ghjustu iptables ùn avemu micca abbastanza, perchè se correggemu l'indirizzu di destinazione prima di u routing (PREROUTING), allura u nostru pacchettu ùn volarà micca in Internet, è se ùn l'avemu micca riparatu, u pacchettu andarà default gateway. Dunque, avete bisognu di fà u seguente: ricurdate di a catena mangle, per marcà i pacchetti iptables è imbulighjate in una tavola di routing persunalizata chì li mandarà induve duveranu andà.

Appena dittu chè fattu:

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

Pigliemu u trafficu in uscita, marcate tuttu ciò chì vola da u portu nantu à quale u proxy si trova (8080 in u nostru casu), redirige tuttu u trafficu marcatu à a tavola di routing cù u numeru 80 (in generale, u numeru ùn dipende micca di nunda, avemu solu vulsutu). à) è aghjunghje una regula unica, secondu a quale tutti i pacchetti inclusi in questa tavula volanu à a subnet VPN.

Perfettu! Avà i pacchetti volanu versu u VPS ... è mori quì. Perchè VPS ùn sapi micca chì fà cun elli. Dunque, sè ùn vi preoccupate micca, pudete simpricimenti reindirizzà tuttu u trafficu chì vene da a subnet virtuale torna à Internet:

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

Quì, tuttu ciò chì ghjunghje da a subnet 10.8.0.0 cù una maschera di 255.255.255.000 hè impannillatu in fonte-NAT è vola à l'interfaccia predeterminata, chì hè vultata à Internet. Hè impurtante à nutà chì sta cosa hà da travaglià solu s'ellu trasmettemu in modu trasparenti u portu, vale à dì, u portu in entrata in u VPS currisponde à u portu di u nostru proxy. Altrimenti vi tuccherà à soffre un pocu di più.

In qualchì locu avà tuttu deve cumincià à travaglià. È resta un pocu: ùn vi scurdate di assicurà chì tutte e cunfigurazioni iptables и route ùn hà micca cuntinuatu dopu à u riavviu. Per iptables ci sò schedari spiciali cum'è /etc/iptables/rules.v4(in u casu di Ubuntu), ma per e rotte tuttu hè un pocu più cumplicatu. I spinghje in up/down OpenVPN scripts, ancu s'ellu pensu chì puderianu esse fattu più decently.

Wrap trafficu da l'applicazione in proxy

Dunque, avemu un proxy cù autentificazione in u paese desideratu, accessibile via un indirizzu IP biancu staticu. Il ne reste plus qu'à l'utiliser et à rediriger le trafic de Spotify. Ma ci hè una sfumatura, cum'è l'esitatu sopra, u login-password per u proxy in Spotify ùn funziona micca, cusì circheremu cumu si mette in u circondu.

Per principià, ricurdemu di circa proxy. Grandi cose, ma custa quant'è una nave stellare ($ 40). Cù questi soldi, pudemu dinò cumprà premium è esse fattu cun ellu. Dunque, circheremu più analoghi gratuiti è aperti nantu à u Mac (iè, vulemu à sente a musica in u Mac). Scopremu un strumentu sanu: vicinu. È andemu cun piacè à chjappàlu.

Ma l'alegria sarà di corta durata, perchè risulta chì avete bisognu di attivà u modu di debug è estensioni di kernel persunalizati in MacOS, fate una cunfigurazione simplice è capisce chì questu strumentu hà esattamente u stessu prublema cum'è Spotify: ùn pò micca passà l'autentificazione cù u login-password in socks-proxy.

In qualchì locu quì hè u tempu di freak out è cumprà un premium ... ma micca! Pruvemu di dumandà ch'ella sia riparata, hè open source ! Facemu bigliettu. È in risposta avemu una storia straziante nantu à cumu l'unicu mantene ùn hà più un MacBook è à l'infernu cun ellu, micca una correzione.

Seremu turbati di novu. Ma dopu avemu da ricurdà a nostra ghjuventù è C, accende u modu di debug in Dante, scavà centinaie di kilobyte di logs, andate à RFC 1927 per infurmazione nantu à u protocolu SOCKS5, fighjemu Xcode è truvate u prublema. Hè abbastanza per correggerà un caratteru in a lista di i codici di metudu chì u cliente offre per l'autentificazione è tuttu cumencia à travaglià cum'è clockwork. Ci rallegramu, cullemu u binari di liberazione, facemu pull request è andemu in u tramontu è andemu à u puntu dopu.

Automatizà lu

Una volta chì Proximac funziona, deve esse demonizatu è scurdatu. Ci hè un sistema di inizializazione tutale chì hè adattatu per questu, chì si trova in MacOS, vale à dì lanciatu.

Truvemu prestu manuale è avemu capitu chì questu ùn hè micca in tuttu systemd è quì hè quasi un scoop è xml. Nisuna cunfigurazione fantastica per voi, senza cumandamenti cum'è status, restart, daemon-reload. Solu tipu hardcore start-stop, list-grep, unload-load è parechje altre stranezze. Superendu tuttu questu avemu scrivite plist, carica. Ùn funziona micca. Studiemu u metudu di debugging u dimòniu, debug it, capisce ciò chì ci hè ENV даже PATH ùn avemu micca consegnatu u normale, discutemu, l'avemu purtatu (aghjunghjendu /sbin и /usr/local/bin) è infine simu cuntenti cù l'autostart è l'operazione stabile.

Exhale

Chì ghjè u risultatu ? Una settimana di avventura, un zoo inginocchiatu da i servizii chì hè caru à u core è face ciò chì hè dumandatu. Un pocu di cunniscenza in spazii tecnichi dubbiosi, un pocu di fonte aperta è un sorrisu in faccia da u pensamentu "L'aghju fattu!"

PS: ùn hè micca una chjama per un boicottamentu di i capitalisti, per salvà i partiti o per l'astuzia tutale, ma solu una indicazione di e pussibilità di ricerca è sviluppu induve, in generale, ùn l'aspitte micca.

Source: www.habr.com

Add a comment