Nuotykiai netikėtai

Nuotykiai netikėtai

Kaip „Spotify“ gali padėti tyrinėti demonus, RFC, tinklus ir reklamuoti atvirąjį kodą. Arba kas atsitiks, jei negalite sumokėti, bet tikrai norite kokių nors aukščiausios kokybės gėrybių.

Pradėti

Trečią dieną pastebėta, kad Spotify rodo reklamas pagal IP adreso šalį. Taip pat pastebėta, kad kai kuriose šalyse reklama iš viso nebuvo importuojama. Pavyzdžiui, Baltarusijos Respublikoje. Ir tada buvo sukurtas „puikus“ planas išjungti reklamą ne aukščiausios kokybės paskyroje.

Šiek tiek apie Spotify

Apskritai, „Spotify“ turi keistą politiką. Mūsų brolis turi gerokai susisukti, kad nusipirktų premium: pakeisti vietą savo profilyje į užsienį, ieškoti tinkamos dovanų kortelės, už kurią būtų galima atsiskaityti tik per PayPal, kas pastaruoju metu buvo keista ir nori krūvos dokumentų. Apskritai tai irgi nuotykis, bet kitokios tvarkos. Nors dauguma žmonių tai daro dėl mobiliosios versijos, man tai neįdomu. Todėl viskas, kas nurodyta toliau, padės tik darbalaukio versijai. Be to, nebus plečiamos funkcijos. Tiesiog nupjaukite kai kuriuos papildomus.

Kodėl taip sudėtinga?

Ir aš taip galvojau registruodamas kojinių-proxy duomenis Spotify konfigūracijoje. Problema pasirodė ta, kad neveikia autentifikavimas kojinėse naudojant prisijungimo vardą ir slaptažodį. Be to, kūrėjai reguliariai kažką daro su įgaliotuoju serveriu: leidžia, tada uždraudžia arba sulaužo, o tai sukelia daugybę diskusijų už svetainės ribų.

Buvo nuspręsta nepasikliauti nestabiliomis funkcijomis ir rasti ką nors patikimesnio ir įdomesnio.

Kažkur čia skaitytojas turi paklausti: kodėl gi nepaėmus ssh su raktu -D ir tuo viskas baigsis? Ir apskritai jis bus teisus. Bet, pirma, tai vis tiek reikia demonizuoti ir susidraugauti su autossh, kad negalvotumėte apie nutrūkusius ryšius. Ir antra: tai per daug paprasta ir nuobodu.

tvarka

Kaip įprasta, eikime iš kairės į dešinę, iš viršaus į apačią ir aprašykime viską, ko reikia mūsų „paprastai“ idėjai įgyvendinti.

Pirmiausia jums reikia tarpinio serverio

Ir yra daug alternatyvų vienu metu:

  • galite tiesiog eiti ir paimti iš atvirų tarpinių serverių sąrašų. Pigu (tiksliau už nieką), bet absoliučiai nepatikima ir tokių tarpinių serverių tarnavimo laikas linkęs nulį. Todėl reikėtų susirasti/parašyti tarpinių serverių sąrašų analizatorių, juos filtruoti pagal norimą tipą ir šalį, ir lieka atviras klausimas dėl rasto tarpinio serverio pakeitimo Spotify (na, galbūt per HTTP_PROXY perkelti ir sukurti tinkintą dvejetainio failo įpakavimą, kad visas kitas srautas nebūtų siunčiamas ten).
  • Galite nusipirkti panašų tarpinį serverį ir apsisaugoti nuo daugumos aukščiau aprašytų problemų. Tačiau už tarpinio serverio kainą galite iš karto nusipirkti aukščiausios kokybės „Spotify“, o tai nėra praktiška atliekant pradinę užduotį.
  • Pakelk savo. Kaip tikriausiai atspėjote, tai yra mūsų pasirinkimas.

Grynai atsitiktinai gali pasirodyti, kad turite draugą su serveriu Baltarusijos Respublikoje ar kitoje mažoje šalyje. Turite tai naudoti ir jame įdiegti norimą tarpinį serverį. Ypatingi žinovai gali pasitenkinti draugu su įjungtu maršruto parinktuvu DD-WRT ar panašią programinę įrangą. Bet ten jo nuostabus pasaulis ir šis pasaulis aiškiai netelpa į šios istorijos rėmus.

Taigi, mūsų parinktys: Kalmarai – neįkvepiantis, ir aš nenoriu HTTP tarpinio serverio, šio protokolo jau yra per daug. O KOJINIŲ srityje nėra nieko protingo, išskyrus Dante dar nepristatė. Todėl paimkime.

Nelaukite Dantės diegimo ir konfigūravimo vadovo. Jis tik googlinu ir nėra ypatingo susidomėjimo. Minimalioje konfigūracijoje reikia įmesti visokių client pass, socks pass, teisingai užregistruokite sąsajas ir nepamirškite pridėti socksmethod: username. Šioje formoje autentifikavimui logotipas bus paimtas iš sistemos vartotojų. O dalis apie saugumą: prieigos prie localhost uždraudimas, vartotojų ribojimas ir pan. – tai grynai individualu, priklauso nuo asmeninės paranojos.

Įdiekite tarpinį serverį, nukreiptą į tinklą

Spektaklis yra dviejų veiksmų.

Veiks vienas

Sutvarkėme tarpinį serverį, dabar turime jį pasiekti iš pasaulinio žiniatinklio. Jei norimoje šalyje turite mašiną su baltu IP, galite saugiai praleisti šį punktą. Mes jo neturime (mes, kaip minėta, esame talpinami draugų namuose), o artimiausias baltas IP yra kažkur Vokietijoje, todėl tyrinėsime tinklus.

Taigi taip, dėmesingas skaitytojas vėl paklaus: kodėl gi nepasinaudojus esama paslauga ngrok ar panašiai? Ir jis vėl bus teisus. Bet tai yra paslauga, ją vėlgi reikia demonizuoti, tai irgi gali kainuoti ir apskritai tai nėra sportinė. Todėl dviračius kursime iš laužo medžiagų.

Užduotis: kažkur toli už NAT yra tarpinis serveris, jį reikia pakabinti ant vieno iš VPS, turinčio baltą IP ir esančio pasaulio pakraštyje, prievadų.

Logiška manyti, kad tai gali būti išspręsta naudojant prievado peradresavimą (kuris įgyvendinamas per minėtą ssh) arba sujungiant aparatinę įrangą į virtualų tinklą per VPN. SU ssh mes žinome, kaip dirbti, autossh Nuobodu, todėl imkime OpenVPN.

„DigitalOcean“ turi nuostabus manol šiuo klausimu. Neturiu ką prie to pridurti. Ir gautą konfigūraciją galima gana lengvai susieti su „OpenVPN“ klientu ir systemd. Tiesiog įdėkite jį (konfigūraciją). /etc/openvpn/client/ ir nepamirškite pakeisti plėtinio į .conf. Po to traukite paslaugą [email protected]nepamiršk tai padaryti dėl jos enable ir džiaukitės, kad viskas išskrido.

Žinoma, turime išjungti bet kokį srauto nukreipimą į naujai sukurtą VPN, nes nenorime sumažinti kliento mašinos greičio, praleisdami srautą per pusę kamuolio.

Taip, savo klientui VPN serveryje turime užregistruoti statinį IP adresą. To prireiks šiek tiek vėliau istorijoje. Norėdami tai padaryti, turite įjungti ifconfig-pool-persist, Redaguoti ipp.txt, įtrauktas į „OpenVPN“ ir įgalinti kliento konfigūracijos katalogą, taip pat redaguoti norimo kliento konfigūraciją pridėdami ifconfig-push su teisinga kauke ir norimu IP adresu.

Antras veiksmas

Dabar „tinkle“ turime mašiną, kuri yra nukreipta į internetą ir gali būti naudojama savanaudiškiems tikslams. Būtent per jį nukreipkite dalį srauto.

Taigi, nauja užduotis: reikia išjungti srautą, patenkantį į vieną iš VPS prievadų su baltu IP, kad šis srautas nukeliautų į naujai prijungtą virtualų tinklą ir atsakymas iš ten galėtų grįžti.

Sprendimas: žinoma iptables! Kada dar turėsite tokią nuostabią galimybę su juo praktikuotis?

Reikiamą konfigūraciją galima rasti gana greitai, per tris valandas, šimtą keiksmažodžių ir saują išeikvotų nervų, nes tinklų derinimas yra labai specifinė procedūra.

Pirma, branduolyje turite įjungti srauto peradresavimą. Šis dalykas vadinamas ipv4.ip_forward ir įjungiamas šiek tiek skirtingai, priklausomai nuo OS ir tinklo tvarkyklės.

Antra, turite pasirinkti VPS prievadą ir visą į jį einantį srautą suvynioti į virtualų potinklį. Tai galima padaryti, pavyzdžiui, taip:

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

Čia nukreipiame visą TCP srautą, ateinantį į išorinės sąsajos 8080 prievadą, į įrenginį, kurio IP 10.8.0.2 ir tas pats 8080 prievadas.

Tiems, kurie nori nešvarių darbo detalių netfilter, iptables ir apskritai maršruto parinkimą būtinai reikia apmąstyti tai arba tai.

Taigi, dabar mūsų paketai skrenda į virtualų potinklį ir... jie ten lieka. Tiksliau, atsakymas iš kojinių tarpinio serverio grįžta per numatytuosius šliuzus mašinoje su Dante ir gavėjas jį numeta, nes tinkluose nėra įprasta siųsti užklausą į vieną IP ir gauti atsakymą iš kito. Todėl turime ir toliau burti.

Taigi, dabar reikia nukreipti visus paketus iš tarpinio serverio atgal į virtualų potinklį link VPS su baltu IP. Čia situacija yra šiek tiek blogesnė, nes tai tiesiog iptables mums nepakaks, nes jei prieš maršrutą pataisysime paskirties adresą (PREROUTING), tada mūsų siuntinys nenuskris į internetą, o jei nepataisysime, siuntinys keliaus į default gateway. Taigi, turite atlikti šiuos veiksmus: prisiminkite grandinę mangle, norėdami pažymėti paketus iptables ir suvyniokite juos į pasirinktinę maršruto parinkimo lentelę, kuri nusiųs juos ten, kur jie turėtų eiti.

Ne anksčiau pasakyta, nei padaryta:

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

Priimame išeinantį srautą, pažymime viską, kas skrenda iš prievado, ant kurio sėdi tarpinis serveris (mūsų atveju 8080), visą pažymėtą srautą nukreipiame į maršruto lentelę numeriu 80 (apskritai skaičius nuo nieko nepriklauso, tiesiog norėjome į) ir pridėkite vieną taisyklę , pagal kurią visi į šią lentelę įtraukti paketai skraido į VPN potinklį.

Puiku! Dabar paketai skrenda atgal link VPS... ir ten miršta. Nes VPS nežino ką su jais daryti. Todėl, jei nesivargiate, galite tiesiog nukreipti visą srautą, ateinantį iš virtualaus potinklio atgal į internetą:

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

Čia viskas, kas ateina iš 10.8.0.0 potinklio su 255.255.255.000 kauke, yra suvyniota į šaltinio NAT ir nuskrenda į numatytąją sąsają, kuri yra nukreipta į internetą. Svarbu pažymėti, kad šis dalykas veiks tik tuo atveju, jei skaidriai persiųsime prievadą, tai yra, įeinantis prievadas VPS sutampa su mūsų tarpinio serverio prievadu. Priešingu atveju turėsite dar šiek tiek kentėti.

Kažkur dabar viskas turėtų pradėti veikti. Ir liko tik šiek tiek: nepamirškite įsitikinti, kad visos konfigūracijos iptables и route po pakartotinio paleidimo nebuvo tęsiamas. Dėl iptables yra specialūs failai, pvz /etc/iptables/rules.v4(Ubuntu atveju), bet maršrutams viskas yra šiek tiek sudėtingiau. Įstūmiau juos į up/down „OpenVPN“ scenarijai, nors manau, kad jie galėjo būti padaryti padoriau.

Apvyniokite srautą iš programos į tarpinį serverį

Taigi, turime tarpinį serverį su autentifikavimu norimoje šalyje, pasiekiamą per statinį baltą IP adresą. Belieka juo naudotis ir nukreipti srautą iš „Spotify“ ten. Tačiau yra niuansas, kaip minėta aukščiau, „Spotify“ tarpinio serverio prisijungimo slaptažodis neveikia, todėl ieškosime, kaip jį apeiti.

Norėdami pradėti, prisiminkime apie įgaliotasis serveris. Puikus daiktas, bet kainuoja tiek pat, kiek žvaigždėlaivis (40 USD). Už šiuos pinigus vėl galime nusipirkti „premium“ ir baigti. Todėl ieškosime daugiau nemokamų ir atviresnių analogų ant Mac (taip, norime klausytis muzikos ant Mac). Atraskime vieną visą įrankį: proksimakas. Ir mes su malonumu eisime jo smogti.

Tačiau džiaugsmas bus trumpalaikis, nes paaiškėja, kad reikia įjungti derinimo režimą ir pasirinktinius branduolio plėtinius „MacOS“, pateikti paprastą konfigūraciją ir suprasti, kad šis įrankis turi lygiai tą pačią problemą kaip „Spotify“: jis negali perduoti autentifikavimo naudojant prisijungimo slaptažodis kojinių tarpiniame serveryje.

Kažkur čia laikas išsigąsti ir nusipirkti aukščiausios kokybės... bet ne! Pabandykime paprašyti, kad tai būtų pataisyta, tai atvirojo kodo! Padarykim bilietas. Atsakydami gauname širdį veriančią istoriją apie tai, kaip vienintelis prižiūrėtojas nebeturi „MacBook“ ir po velnių, o ne pataisymą.

Mes vėl nusiminsime. Bet tada prisiminsime savo jaunystę ir C, įjungsime „Dante“ derinimo režimą, perkratysime šimtus kilobaitų rąstų, eisime į RFC1927 Norėdami gauti informacijos apie SOCKS5 protokolą, pažiūrėkime į Xcode ir suraskime problemą. Pakanka pataisyti vieną simbolį metodų kodų sąraše, kurį klientas siūlo autentifikuoti ir viskas pradeda veikti kaip iš laikrodžio. Džiaugiamės, renkame išleidimo dvejetainį failą, darome traukti prašymą o mes einame į saulėlydį ir einame į kitą tašką.

Automatizuoti

Kai Proximac pradės veikti, jį reikia demonizuoti ir pamiršti. Tam tinka viena visa inicijavimo sistema, kuri yra MacOS, būtent paleistas.

Greitai randame vadovas ir mes suprantame, kad tai visai ne systemd o čia jau beveik samtelis ir xml. Jokių įmantrių konfigūracijų, jokių panašių komandų status, restart, daemon-reload. Tik hardcore tipo start-stop, list-grep, unload-load ir dar daug keistenybių. Įveikę visa tai rašome plist, pakrovimas. Neveikia. Mes studijuojame demono derinimo metodą, deriname jį, suprantame, kas ten yra ENV net PATH nepristatėme įprasto, ginčijamės, atvežame (pridedama /sbin и /usr/local/bin) ir galiausiai džiaugiamės automatiniu paleidimu ir stabiliu darbu.

Iškvėpkite

Koks rezultatas? Savaitė nuotykių, klūpantis zoologijos sodas nuo paslaugų, kurios mielos širdžiai ir daro tai, ko reikalaujama. Šiek tiek žinių abejotinose techninėse srityse, šiek tiek atvirojo kodo ir šypsena veide nuo minties „Aš tai padariau!

PS: tai ne raginimas boikotuoti kapitalistus, taupyti degtukus ar totaliai gudrauti, o tik nuoroda į mokslinių tyrimų ir plėtros galimybes ten, kur jų apskritai nesitiki.

Šaltinis: www.habr.com

Добавить комментарий