Abenteuer aus heiterem Himmel

Abenteuer aus heiterem Himmel

Wie Spotify Ihnen dabei helfen kann, Daemons, RFCs und Netzwerke zu studieren und Open Source zu fördern. Oder was passiert, wenn Sie nicht bezahlen können, aber unbedingt Premium-Goodies wollen?

Hauptseite

Am dritten Tag fiel auf, dass Spotify Werbung basierend auf dem Land der IP-Adresse anzeigte. Es wurde auch festgestellt, dass in einigen Ländern Werbung überhaupt nicht importiert wurde. Zum Beispiel in der Republik Weißrussland. Und dann wurde ein „brillanter“ Plan ausgeheckt, um Werbung in einem Nicht-Premium-Konto zu deaktivieren.

Ein wenig über Spotify

Im Allgemeinen verfolgt Spotify eine seltsame Richtlinie. Um Premium kaufen zu können, muss unser Bruder ganz schön durchdrehen: Ändern Sie den Standort in seinem Profil auf „Übersee“, suchen Sie nach einer passenden Geschenkkarte, die nur mit PayPal bezahlt werden kann, das verhält sich in letzter Zeit seltsam und benötigt eine Menge Dokumente. Im Allgemeinen ist es auch ein Abenteuer, aber von einer anderen Art. Obwohl die meisten Leute dies wegen der mobilen Version tun, habe ich kein Interesse daran. Daher hilft alles Folgende nur im Fall der Desktop-Version. Darüber hinaus erfolgt keine Funktionserweiterung. Ich schneide einfach einige der überzähligen ab.

Warum ist es so kompliziert?

Und das dachte ich mir auch, als ich die Socks-Proxy-Daten in der Spotify-Konfiguration registrierte. Es stellte sich heraus, dass die Authentifizierung in Socken mit Login und Passwort nicht funktionierte. Außerdem unternehmen Entwickler regelmäßig etwas rund um den Proxy: entweder erlauben sie ihn, dann verbieten sie ihn oder brechen ihn, was zu ganzen Diskussionsrunden außerhalb der Website führt.

Es wurde beschlossen, sich nicht auf instabile Funktionen zu verlassen und etwas Zuverlässigeres und Interessanteres zu finden.

Irgendwo hier muss sich der Leser fragen: Warum nicht nehmen? ssh mit einem Schlüssel -D und das ist das Ende? Und im Allgemeinen wird er Recht haben. Aber erstens muss dies noch verteufelt und mit Autossh angefreundet werden, um nicht an zerrissene Verbindungen zu denken. Und zweitens: Es ist zu einfach und langweilig.

In Ordnung

Gehen wir wie gewohnt von links nach rechts, von oben nach unten und beschreiben alles, was wir zur Umsetzung unserer „einfachen“ Idee benötigen.

Zuerst benötigen Sie einen Proxy

Und es gibt viele Alternativen auf einmal:

  • Sie können einfach aus offenen Proxy-Listen auswählen. Billig (oder besser gesagt umsonst), aber absolut unzuverlässig und die Lebensdauer solcher Proxys tendiert gegen Null. Daher wäre es notwendig, einen Parser für Proxy-Listen zu finden/zu schreiben, sie nach dem gewünschten Typ und Land zu filtern, und die Frage des Ersetzens des gefundenen Proxys in Spotify bleibt offen (naja, vielleicht durch). HTTP_PROXY übertragen und einen benutzerdefinierten Wrapper für die Binärdatei erstellen, damit der gesamte andere Datenverkehr nicht dorthin gesendet wird).
  • Sie können einen ähnlichen Proxy kaufen und sich die meisten der oben beschriebenen Probleme ersparen. Aber zum Preis eines Proxys kann man bei Spotify sofort Premium kaufen, was für die ursprüngliche Aufgabe nicht praktikabel ist.
  • Erhöhe deine. Wie Sie wahrscheinlich vermutet haben, ist dies unsere Wahl.

Rein zufällig kann sich herausstellen, dass Sie einen Freund mit einem Server in der Republik Weißrussland oder einem anderen kleinen Land haben. Diesen müssen Sie nutzen und den gewünschten Proxy darauf ausrollen. Besondere Kenner können sich mit einem Freund mit eingeschaltetem Router begnügen DD-WRT oder ähnliche Software. Aber dort seine wundervolle Welt und diese Welt passt eindeutig nicht in den Rahmen dieser Geschichte.

Also unsere Optionen: Squid – nicht inspirierend, und ich möchte keinen HTTP-Proxy, es gibt bereits zu viele dieses Protokolls. Und im Bereich SOCKEN gibt es nichts Vernünftiges außer Dante noch nicht geliefert. Deshalb nehmen wir es.

Warten Sie nicht auf Dantes Handbuch zur Installation und Konfiguration. Er google einfach mal und ist nicht von besonderem Interesse. In der Mindestkonfiguration müssen Sie alle möglichen Dinge einbauen client pass, socks pass, registrieren Sie die Schnittstellen korrekt und vergessen Sie nicht, sie hinzuzufügen socksmethod: username. In dieser Form wird den Systemnutzern zur Authentifizierung der Logopass entnommen. Und der Teil zur Sicherheit: den Zugriff auf localhost verbieten, Benutzer einschränken usw. – das ist rein individuell und hängt von der persönlichen Paranoia ab.

Stellen Sie einen Proxy bereit, der dem Netzwerk zugewandt ist

Das Stück besteht aus zwei Akten.

Akt eins

Wir haben den Proxy geklärt, jetzt müssen wir über das globale Web darauf zugreifen. Wenn Sie im gewünschten Land eine Maschine mit weißer IP haben, können Sie diesen Punkt getrost überspringen. Wir haben keine (wir sind, wie oben erwähnt, bei Freunden zu Hause) und die nächstgelegene weiße IP ist irgendwo in Deutschland, also werden wir Netzwerke untersuchen.

Also ja, der aufmerksame Leser wird sich wieder fragen: Warum nehmen Sie nicht einen bestehenden Dienst wie Ngrok o.ä? Und er wird wieder Recht haben. Aber das ist eine Dienstleistung, die wiederum verteufelt werden muss, sie kann auch Geld kosten und ist überhaupt nicht sportlich. Deshalb werden wir Fahrräder aus Altmaterialien herstellen.

Aufgabe: Irgendwo weit hinter NAT befindet sich ein Proxy. Sie müssen ihn an einen der Ports eines VPS hängen, der eine weiße IP hat und sich am Rande der Welt befindet.

Es ist logisch anzunehmen, dass dies entweder durch Portweiterleitung (die durch die oben genannten Maßnahmen implementiert wird) gelöst werden kann ssh) oder durch die Zusammenführung von Hardware zu einem virtuellen Netzwerk per VPN. MIT ssh Wir wissen, wie man arbeitet, autossh Es ist langweilig, also nehmen wir OpenVPN.

DigitalOcean hat wunderbarer Manuel zu diesem Thema. Ich habe dem nichts hinzuzufügen. Und die resultierende Konfiguration kann ganz einfach mit dem OpenVPN-Client verbunden werden und systemd. Fügen Sie es einfach (config) ein /etc/openvpn/client/ und vergessen Sie nicht, die Erweiterung in zu ändern .conf. Ziehen Sie danach den Dienst herunter [email protected]vergiss nicht, es für sie zu tun enable und freue dich, dass alles verflogen ist.

Natürlich müssen wir jegliche Umleitung des Datenverkehrs zum neu erstellten VPN deaktivieren, da wir die Geschwindigkeit auf dem Client-Computer nicht verringern möchten, indem wir den Datenverkehr durch eine halbe Kugel leiten.

Und ja, wir müssen für unseren Client eine statische IP-Adresse auf dem VPN-Server registrieren. Dies wird etwas später in der Geschichte benötigt. Dazu müssen Sie es aktivieren ifconfig-pool-persist, bearbeiten ipp.txt, in OpenVPN enthalten, aktivieren Sie das Client-Konfigurationsverzeichnis und bearbeiten Sie die Konfiguration des gewünschten Clients durch Hinzufügen ifconfig-push mit der richtigen Maske und der gewünschten IP-Adresse.

Zweiter Akt

Jetzt haben wir eine Maschine im „Netzwerk“, die dem Internet zugewandt ist und für egoistische Zwecke genutzt werden kann. Leiten Sie nämlich einen Teil des Datenverkehrs um.

Also eine neue Aufgabe: Sie müssen den Datenverkehr, der an einem der VPS-Ports mit einer weißen IP ankommt, abschalten, damit dieser Datenverkehr an das neu verbundene virtuelle Netzwerk weitergeleitet wird und die Antwort von dort zurückkehren kann.

Lösung: natürlich iptables! Wann sonst haben Sie eine so wunderbare Gelegenheit, mit ihm zu üben?

Die benötigte Konfiguration lässt sich recht schnell finden, in drei Stunden, hundert Schimpfwörtern und einer Handvoll verschwendeter Nerven, denn das Debuggen von Netzwerken ist ein sehr spezifischer Vorgang.

Zunächst müssen Sie die Verkehrsumleitung im Kernel aktivieren. Dieses Ding heißt ipv4.ip_forward und wird je nach Betriebssystem und Netzwerkmanager leicht unterschiedlich aktiviert.

Zweitens müssen Sie einen Port auf dem VPS auswählen und den gesamten Datenverkehr, der dorthin geht, in ein virtuelles Subnetz einbinden. Dies kann beispielsweise so erfolgen:

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

Hier leiten wir den gesamten TCP-Verkehr, der an Port 8080 der externen Schnittstelle ankommt, an eine Maschine mit IP 10.8.0.2 und demselben Port 8080 um.

Für diejenigen, die die schmutzigen Details des Jobs wissen wollen netfilter, iptables und Routing im Allgemeinen ist es unbedingt notwendig, darüber nachzudenken es oder es.

Jetzt fliegen unsere Pakete zum virtuellen Subnetz und... bleiben dort. Genauer gesagt fliegt die Antwort vom Socks-Proxy über das Standard-Gateway auf der Maschine mit Dante zurück und der Empfänger verwirft sie, da es in Netzwerken nicht üblich ist, eine Anfrage an eine IP zu senden und eine Antwort von einer anderen zu erhalten. Deshalb müssen wir weiter zaubern.

Jetzt müssen Sie alle Pakete vom Proxy zurück zum virtuellen Subnetz zum VPS mit einer weißen IP umleiten. Hier ist die Situation etwas schlimmer, weil es einfach so ist iptables wir werden nicht genug haben, denn wenn wir die Zieladresse vor dem Routing korrigieren (PREROUTING), dann fliegt unser Paket nicht ins Internet, und wenn wir es nicht reparieren, geht das Paket an default gateway. Sie müssen also Folgendes tun: Merken Sie sich die Kette mangle, um Pakete durchzukennen iptables und packen Sie sie in eine benutzerdefinierte Routing-Tabelle, die sie dorthin schickt, wo sie hin sollen.

Gesagt, getan:

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

Wir nehmen ausgehenden Datenverkehr entgegen, markieren alles, was von dem Port ausgeht, an dem sich der Proxy befindet (in unserem Fall 8080), und leiten den gesamten markierten Datenverkehr an die Routing-Tabelle mit der Nummer 80 um (im Allgemeinen hängt die Nummer von nichts ab, wir wollten nur). zu) und fügen Sie eine einzige Regel hinzu, nach der alle in dieser Tabelle enthaltenen Pakete zum VPN-Subnetz fliegen.

Großartig! Jetzt fliegen die Pakete zurück zum VPS... und sterben dort. Weil VPS nicht weiß, was er damit machen soll. Wenn Sie sich also nicht die Mühe machen, können Sie den gesamten vom virtuellen Subnetz eingehenden Datenverkehr einfach zurück ins Internet umleiten:

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

Hier wird alles, was aus dem 10.8.0.0-Subnetz mit der Maske 255.255.255.000 ankommt, in Source-NAT verpackt und fliegt zur Standardschnittstelle, die auf das Internet ausgerichtet ist. Es ist wichtig zu beachten, dass dies nur funktioniert, wenn wir den Port transparent weiterleiten, d. h. der eingehende Port auf dem VPS mit dem Port unseres Proxys übereinstimmt. Sonst wirst du noch etwas mehr leiden müssen.

Irgendwo sollte jetzt alles funktionieren. Und es bleibt nur noch ein bisschen: Vergessen Sie nicht, sicherzustellen, dass alle Konfigurationen iptables и route ging nach dem Neustart nicht weiter. Für iptables Es gibt spezielle Dateien wie /etc/iptables/rules.v4(im Fall von Ubuntu), aber für Routen ist alles etwas komplizierter. Ich habe sie hineingestoßen up/down OpenVPN-Skripte, obwohl ich denke, dass sie anständiger hätten gemacht werden können.

Wickeln Sie den Datenverkehr von der Anwendung in den Proxy ein

Wir haben also einen Proxy mit Authentifizierung im gewünschten Land, erreichbar über eine statische weiße IP-Adresse. Es bleibt nur noch, es zu nutzen und den Traffic von Spotify dorthin umzuleiten. Aber es gibt eine Nuance, wie oben erwähnt, das Login-Passwort für den Proxy in Spotify funktioniert nicht, also werden wir nach einer Möglichkeit suchen, es zu umgehen.

Erinnern wir uns zunächst einmal daran Proxy. Tolles Zeug, aber es kostet so viel wie ein Raumschiff (40 $). Mit diesem Geld können wir wieder Prämien kaufen und sind damit fertig. Deshalb werden wir nach weiteren kostenlosen und offenen Analoga auf dem Mac suchen (ja, wir wollen Musik auf dem Mac hören). Lassen Sie uns ein ganzes Tool entdecken: proximac. Und wir werden ihn gerne stupsen.

Aber die Freude wird nur von kurzer Dauer sein, denn es stellt sich heraus, dass Sie den Debug-Modus und benutzerdefinierte Kernel-Erweiterungen in MacOS aktivieren, eine einfache Konfiguration einreichen und verstehen müssen, dass dieses Tool genau das gleiche Problem wie Spotify hat: Es kann die Authentifizierung mit dem nicht bestehen Login-Passwort auf dem Socks-Proxy.

Irgendwo hier ist es an der Zeit auszuflippen und eine Prämie zu kaufen ... aber nein! Versuchen wir, darum zu bitten, dass das Problem behoben wird, es ist Open Source! Lass es uns tun Fahrkarte. Und als Antwort bekommen wir eine herzzerreißende Geschichte darüber, dass der einzige Betreuer kein MacBook mehr hat, und zum Teufel damit, keine Lösung.

Wir werden uns wieder aufregen. Aber dann erinnern wir uns an unsere Jugend und C, schalten den Debug-Modus in Dante ein, durchsuchen Hunderte Kilobyte Protokolle und gehen zu RFC1927 Für Informationen zum SOCKS5-Protokoll schauen wir uns Xcode an und finden das Problem. Es reicht aus, ein Zeichen in der Liste der Methodencodes zu korrigieren, die der Client zur Authentifizierung anbietet, und alles beginnt wie am Schnürchen zu funktionieren. Wir freuen uns, wir sammeln die Release-Binärdatei, das tun wir Pull-Anfrage und wir gehen in den Sonnenuntergang und gehen zum nächsten Punkt.

Automatisieren Sie es

Sobald Proximac funktioniert, muss es verteufelt und vergessen werden. Dafür gibt es ein ganzes Initialisierungssystem, das in MacOS zu finden ist, nämlich launchd.

Wir finden es schnell Handbuch und wir verstehen, dass dies überhaupt nicht der Fall ist systemd und hier ist es fast eine Schaufel und xml. Keine ausgefallenen Konfigurationen für Sie, keine Befehle wie status, restart, daemon-reload. Nur Hardcore-Typ start-stop, list-grep, unload-load und viele weitere Kuriositäten. Um all das zu überwinden, schreiben wir plist, Wird geladen. Das ____ funktioniert nicht. Wir studieren die Methode zum Debuggen des Dämons, debuggen ihn und verstehen, was da ist ENV auch PATH Wir haben nicht das Normale geliefert, wir argumentieren, wir bringen es ein (fügen hinzu /sbin и /usr/local/bin) und schließlich sind wir mit dem Autostart und dem stabilen Betrieb zufrieden.

Ausatmen

Was ist das Ergebnis? Eine Woche voller Abenteuer, ein kniender Zoo von Dienstleistungen, die dem Herzen am Herzen liegen und tun, was von ihm verlangt wird. Ein wenig Wissen in dubiosen technischen Bereichen, ein bisschen Open Source und ein Lächeln im Gesicht bei dem Gedanken „Ich habe es geschafft!“

PS: Dies ist kein Aufruf zum Boykott der Kapitalisten, zum Sparen von Streichhölzern oder zur totalen List, sondern nur ein Hinweis auf die Möglichkeiten der Forschung und Entwicklung, wo man sie im Allgemeinen nicht erwartet.

Source: habr.com

Kommentar hinzufügen