Abenteuer aus dem Blo

Abenteuer aus dem Blo

Wéi Spotify kann Iech hëllefen Daemonen, RFCs, Netzwierker ze studéieren an Open Source ze promoten. Oder wat geschitt wann Dir net bezuelen kann, mä Dir wëllt wierklech e puer Premium Goodies.

Den Ufank

Um drëtten Dag gouf gemierkt datt Spotify Annoncen op Basis vum Land vun der IP Adress weist. Et gouf och bemierkt datt an e puer Länner Reklamm guer net importéiert gouf. Zum Beispill, an der Republik Belarus. An dunn gouf e "brillanten" Plang ausgeschafft fir Reklammen an engem Net-Premium Kont auszeschalten.

E bëssen iwwer Spotify

Am allgemengen huet Spotify eng komesch Politik. Eise Brudder muss zimmlech verdréint ginn fir Premium ze kafen: d'Location a sengem Profil op d'Ausland änneren, eng passend Geschenkkaart sichen, déi nëmme mat PayPal bezuelt ka ginn, déi sech an der leschter Zäit komesch gehandelt huet a vill Dokumenter wëll. Am Allgemengen ass et och eng Aventure, awer vun enger anerer Uerdnung. Och wann déi meescht Leit dat fir d'Wuel vun der mobiler Versioun maachen, sinn ech net interesséiert. Dofir hëlleft alles hei drënner nëmmen am Fall vun der Desktop Versioun. Ausserdeem gëtt et keng Expansioun vu Funktiounen. Just e puer vun den Extra ofschneiden.

Firwat ass et sou komplizéiert?

An ech hu geduecht wann ech d'Socken-Proxy-Daten an der Spotify Config registréiert hunn. De Problem huet sech erausgestallt datt d'Authentifikatioun an de Socken mat Login a Passwuert net funktionnéiert. Plus, Entwéckler maachen reegelméisseg eppes ronderëm de Proxy: entweder erlaabt et, verbueden et dann oder briechen et, wat zu ganze Panele vun Diskussiounen op der Off-Site entsteet.

Et gouf decidéiert net op onbestänneg Funktiounen ze vertrauen an eppes méi zouverlässeg an interessant ze fannen.

Iergendwou hei muss de Lieser froen: firwat net huelen ssh mat engem Schlëssel -D an dat ass d'Enn? An, am Allgemengen, wäert hien Recht hunn. Awer als éischt muss dëst nach ëmmer demoniséiert ginn a mat Autossh Frënn gemaach ginn, fir net iwwer zerräissen Verbindungen ze denken. An zweetens: et ass ze einfach a langweileg.

An der Rei

Loosst eis wéi gewinnt vu lénks no riets, vun uewe bis ënnen goen an alles beschreiwen wat mir brauchen fir eis "einfach" Iddi ëmzesetzen.

Als éischt braucht Dir e Proxy

An et gi vill Alternativen gläichzäiteg:

  • Dir kënnt just goen an aus oppene Proxy Lëschte huelen. Bëlleg (oder éischter fir näischt), awer absolut onzouverlässeg an d'Liewensdauer vun esou Proxyen tendéiert op Null. Dofir wier et néideg fir e Parser fir Proxy Lëschten ze fannen / ze schreiwen, se no der gewënschter Aart a Land ze filteren, an d'Fro fir de fonnte Proxy an Spotify z'ersetzen bleift oppen (gutt, vläicht duerch HTTP_PROXY transferéieren an e personaliséierte Wrapper fir de Binär erstellen, sou datt all aner Traffic net dohinner geschéckt gëtt).
  • Dir kënnt en ähnlechen Proxy kafen an Iech vun de meeschte vun de Problemer hei uewen beschriwwen retten. Awer zum Präis vun engem Proxy kënnt Dir direkt Premium op Spotify kafen, an dëst ass net praktesch fir déi originell Aufgab.
  • Erhéijung Är. Wéi Dir wahrscheinlech virgestallt hutt, ass dëst eise Choix.

Reng zoufälleg kann et erausstellen datt Dir e Frënd mat engem Server an der Republik Belarus oder an engem anere klenge Land hutt. Dir musst dëst benotzen an de gewënschten Proxy drop ausrollen. Besonnesch Kenner kënnen zefridde sinn mat engem Frënd mat engem Router op DD-WRT oder ähnlech Software. Mee do hien wonnerbar Welt an dës Welt passt kloer net an de Kader vun dëser Geschicht.

Also, eis Optiounen: Squid - net inspiréierend, an ech wëll keen HTTP Proxy, et gi schonn ze vill vun dësem Protokoll ronderëm. An am Beräich vun SOCKS gëtt et näischt sënnvoll ausser Dante hunn nach net geliwwert. Dofir, loosst eis et huelen.

Waart net op dem Dante säi Handbuch iwwer d'Installatioun an d'Konfiguratioun. Hien just googelen an ass net besonnesch interessant. Am Minimum Configuratioun musst Dir all Zorte geheien client pass, socks pass, registréiert d'Interfaces korrekt a vergiesst net ze addéieren socksmethod: username. An dëser Form, fir d'Authentifikatioun, gëtt de Logopass vun de System Benotzer geholl. An den Deel iwwer Sécherheet: Zougang zu localhost verbidden, Benotzer limitéieren, etc. - dëst ass reng individuell, ofhängeg vu perséinlecher Paranoia.

Deploy e Proxy vis-à-vis vum Netz

D'Stéck ass an zwee Akten.

Akt eent

Mir hunn de Proxy zortéiert, elo musse mir et vum globalen Web zougräifen. Wann Dir eng Maschinn mat enger wäisser IP am gewënschten Land hutt, da kënnt Dir dëse Punkt sécher iwwersprangen. Mir hunn net een (mir, wéi uewen ernimmt, sinn bei Frënn d'Haiser gehost) an déi noosten wäiss IP ass iergendwou an Däitschland, sou wäerte mir Netzwierker studéieren.

Also jo, déi opmierksam Lieser wäert erëm froen: firwat huelt Dir net en existente Service wéi geck oder ähnlech? An hien wäert erëm richteg sinn. Mä dëst ass e Service, et muss erëm demoniséiert ginn, et kann och Sue kaschten an allgemeng ass et net sportlech. Dofir kreéiere mir Vëloen aus Schrottmaterialien.

Aufgab: et gëtt e Proxy iergendwou wäit hannert NAT, Dir musst et op ee vun de Ports vun engem VPS hänken, deen eng wäiss IP huet an um Rand vun der Welt läit.

Et ass logesch ze iwwerhuelen datt dëst entweder duerch Port Forwarding geléist ka ginn (wat duerch déi uewe genannte implementéiert gëtt ssh), oder duerch d'Kombinatioun vun Hardware an e virtuellt Netzwierk iwwer VPN. MAT ssh mir wëssen wéi ze schaffen, autossh Et ass langweileg ze huelen, also loosst eis OpenVPN huelen.

DigitalOcean huet wonnerbar manul op dëser Matière. Ech hunn näischt derzou ze addéieren. An déi doraus resultéierend Configuratioun kann ganz einfach mat der OpenVPN Client verbonne ginn an systemd. Gitt et einfach (config) an /etc/openvpn/client/ an vergiesst net d'Verlängerung ze änneren op .conf. Duerno, zitt de Service [email protected]vergiesst net et fir hatt ze maachen enable a freet Iech datt alles fort geflunn ass.

Natierlech musse mir all Viruleedung vum Traffic op den nei erstallten VPN auszeschalten, well mir wëllen d'Geschwindegkeet op der Clientmaschinn net reduzéieren andeems de Traffic duerch en halleft Ball passéiert.

A jo, mir mussen eng statesch IP Adress um VPN Server fir eise Client registréieren. Dëst wäert e bësse méi spéit an der Geschicht gebraucht ginn. Fir dëst ze maachen, musst Dir aktivéieren ifconfig-pool-persist, änneren ipp.txt, abegraff mat OpenVPN an aktivéiert Client-config-dir, plus d'Konfiguratioun vum gewënschten Client z'änneren andeems Dir bäidréit ifconfig-push mat der richteger Mask an der gewënschter IP Adress.

Akt zwee

Elo hu mir eng Maschinn um "Netz", déi géint den Internet steet a fir egoistesch Zwecker benotzt ka ginn. Nämlech, Viruleedung Deel vum Verkéier duerch et.

Also, eng nei Aufgab: Dir musst de Traffic auszeschalten, deen op ee vun de VPS Ports mat enger wäisser IP kënnt, fir datt dësen Traffic an dat neit verbonne virtuellt Netzwierk geet an d'Äntwert vun do zréck kënnt.

Léisung: natierlech iptables! Wéini soss hutt Dir sou eng wonnerbar Geleeënheet mat him ze üben?

Déi erfuerderlech Konfiguratioun kann zimlech séier fonnt ginn, an dräi Stonnen, honnert Schwieregkeeten an eng Handvoll verschwendene Nerven, well Debugging Netzwierker eng ganz spezifesch Prozedur ass.

Als éischt musst Dir Traffic Viruleedung am Kernel aktivéieren. Dës Saach gëtt genannt ipv4.ip_forward an ass liicht anescht aktivéiert ofhängeg vum OS an dem Netzwierkmanager.

Zweetens, musst Dir e Port op der VPS auswielen an all Traffic an e virtuellt Subnet wéckelen. Dëst kann zum Beispill esou gemaach ginn:

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

Hei redirect mir all TCP Traffic kommen op port 8080 vun der externen Interface op eng Maschinn mat IP 10.8.0.2 an déi selwecht port 8080.

Fir déi, déi dreckeg Detailer vun der Aarbecht wëllen netfilter, iptables a Routing am Allgemengen, ass et absolut néideg ze iwwerdenken et oder et.

Also, elo fléien eis Päckchen op de virtuelle Subnet a ... si bleiwen do. Méi präzis flitt d'Äntwert vum Socken Proxy zréck duerch d'Standardpaart op der Maschinn mam Dante an den Empfänger fällt se, well an Netzwierker et net üblech ass eng Ufro un eng IP ze schécken an eng Äntwert vun engem aneren ze kréien. Dofir musse mir weider zauberen.

Also, elo musst Dir all Pakete vum Proxy zréck an de virtuelle Subnet op de VPS mat enger wäisser IP redirectéieren. Hei ass d'Situatioun e bësse méi schlëmm, well et just ass iptables mir wäerten net genuch hunn, well wa mir d'Destinatiounsadress virum Routing korrigéieren (PREROUTING), da flitt eise Package net op den Internet, a wa mir et net fixéieren, da geet de Package op default gateway. Also, Dir musst déi folgend maachen: d'Kette erënneren mangle, fir Päck duerch ze markéieren iptables a wéckelt se an engem personaliséierte Routing-Table, deen se schéckt wou se solle goen.

Net méi séier gesot wéi gemaach:

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

Mir huelen den Ausgangsverkéier, markéieren alles wat aus dem Hafen flitt, op deem de Proxy sëtzt (8080 an eisem Fall), redirect all markéierte Traffic op d'Routing-Table mat der Nummer 80 (am Allgemengen hänkt d'Zuel vun näischt of, mir wollten just to) a füügt eng eenzeg Regel un, no där all Pakete, déi an dëser Tabell abegraff sinn, op de VPN-Subnet fléien.

Super! Elo fléien d'Päckchen zréck op de VPS ... a stierwen do. Well VPS weess net wat mat hinnen ze maachen. Dofir, wann Dir Iech net stéiert, kënnt Dir einfach all Traffic, deen aus dem virtuelle Subnet ukommen, zréck op den Internet redirectéieren:

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

Hei ass alles wat aus dem 10.8.0.0 Subnet mat enger Mask vun 255.255.255.000 kënnt a Quell-NAT gewéckelt a flitt op d'Default-Interface, déi op den Internet ëmgewandelt gëtt. Et ass wichteg ze bemierken datt dës Saach nëmme funktionnéiert wa mir den Hafen transparent weiderginn, dat heescht den erakommende Port op der VPS entsprécht dem Port vun eisem Proxy. Soss musst Dir e bësse méi leiden.

Iergendwou soll elo alles ufänken ze schaffen. A just e bësse bleift: vergiesst net sécher ze stellen datt all Configuratioun iptables и route huet no der Restart net weider. Fir iptables et gi speziell Dateien wéi /etc/iptables/rules.v4(am Fall vun Ubuntu), awer fir Strecken ass alles e bësse méi komplizéiert. Ech hunn se gedréckt up/down OpenVPN Scripten, obwuel ech mengen datt se méi anstänneg gemaach kënne ginn.

Wrap Traffic vun der Applikatioun an Proxy

Also hu mir e Proxy mat Authentifikatioun am gewënschten Land, zougänglech iwwer eng statesch wäiss IP Adress. Alles wat bleift ass et ze benotzen an de Verkéier vu Spotify dohinner ze redirectéieren. Awer et gëtt eng Nuance, wéi uewen erwähnt, d'Login-Passwuert fir de Proxy op Spotify funktionnéiert net, also wäerte mir kucken wéi et ronderëm kënnt.

Fir unzefänken, loosst eis drun erënneren Proxy. Flott Saachen, awer et kascht sou vill wéi e Starship ($ 40). Mat dëse Sue kënne mir erëm Premium kafen a mat deem fäerdeg sinn. Dofir wäerte mir no méi gratis an oppen Analoga um Mac sichen (jo, mir wëllen Musek um Mac lauschteren). Loosst eis e ganzt Tool entdecken: proximac. A mir wäerte frou him goen.

Awer d'Freed wäert kuerzlieweg sinn, well et stellt sech eraus datt Dir Debug Modus a personaliséiert Kernel Extensiounen am MacOS aktivéiere musst, eng einfach Configuratioun fichieren a verstinn datt dëst Tool genau dee selwechte Problem huet wéi Spotify: et kann d'Authentifikatioun net mat der Login-Passwuert op socks-proxy.

Iergendwou ronderëm hei ass et Zäit ze freaken an eng Premium ze kafen ... awer nee! Loosst eis probéieren ze froen datt et fixéiert gëtt, et ass Open Source! Loosst eis maachen Ticket. An als Äntwert kréie mir eng häerzzerräissend Geschicht iwwer wéi deen eenzegen Ënnerhalter kee MacBook méi huet an an d'Häll domat, net eng Fix.

Mir wäerten eis erëm opreegen. Awer dann erënnere mir eis Jugend an C, schalt den Debugmodus an Dante un, gräift duerch Honnerte vu Kilobyte vu Logbicher, gitt op RFC1927 fir Informatiounen iwwer de SOCKS5 Protokoll, loosst eis Xcode kucken an de Problem fannen. Et ass genuch fir ee Charakter an der Lëscht vu Methodcoden ze korrigéieren, déi de Client fir d'Authentifikatioun ubitt an alles fänkt un wéi d'Auer ze schaffen. Mir freeën eis, mir sammelen d'Verëffentlechung binär, mir maachen zéien Ufro a mir ginn an de Sonnenënnergang a ginn op den nächste Punkt.

Automatiséiert et

Wann Proximac funktionnéiert, muss et demoniséiert ginn a vergiess ginn. Et gëtt e ganze Initialiséierungssystem dee fir dëst gëeegent ass, deen am MacOS fonnt gëtt, nämlech lancéiert.

Mir fannen et séier manuell a mir verstinn datt dëst guer net ass systemd an hei ass et bal e Schossel an xml. Keng ausgefalene Konfiguratiounen fir Iech, keng Kommandoen wéi status, restart, daemon-reload. Nëmmen Hardcore Aart start-stop, list-grep, unload-load a vill méi oddities. All dëst iwwerwannen mir schreiwen plist, lueden. Geet net. Mir studéieren d'Method fir den Dämon ze Debuggen, debuggen et, verstinn wat do ass ENV даже PATH mir hunn deen normale net geliwwert, mir streiden, mir bréngen et an (derbäi /sbin и /usr/local/bin) a schlussendlech si mir frou mat Autostart a stabiler Operatioun.

Ausatmen

Wat ass d'Resultat? Eng Aventure Woch, engem Knéi Zoo vun Déngschtleeschtungen déi un d'Häerz leien an mécht wat vun et verlaangt. E bësse Wëssen an zweifelhaften technesche Beräicher, e bëssen Open Source an e Laachen um Gesiicht vum Gedanke "Ech hunn et gemaach!"

PS: Dëst ass net en Opruff fir e Boykott vun de Kapitalisten, fir op Mätscher ze spueren oder fir total Knascht, mee just eng Indikatioun fir d'Méiglechkeete vu Fuerschung an Entwécklung, wou Dir se allgemeng net erwaart.

Source: will.com

Setzt e Commentaire