Wie Spotify dabei helfen kann, Dämonen, RFCs, Netzwerke und Open Source-Werbung zu lernen. Oder was passiert, wenn Sie nicht bezahlen können und einige Premium-Brötchen es wirklich wollen?
Starten Sie
Am dritten Tag wurde festgestellt, dass Spotify Anzeigen basierend auf dem Land der IP-Adresse veröffentlicht. Dort wurde auch festgestellt, dass in einigen Ländern überhaupt keine Werbung geliefert wurde. Zum Beispiel in Belarus . Und dann wurde ein "brillanter" Plan zum Deaktivieren von Anzeigen in einem Nicht-Premium-Konto ausgereift.
Ein bisschen über Spotify
Im Allgemeinen hat Spotifay eine seltsame Politik. Unser Bruder muss ziemlich pervers sein, um eine Prämie zu kaufen: Ändern Sie den Ort im Profil in einen in Übersee, suchen Sie nach einer geeigneten GIF-Karte, die nur mit Paypal bezahlt werden kann, was in letzter Zeit seltsam war und eine Reihe von Dokumenten benötigt. Im Allgemeinen auch ein Abenteuer, aber in einer anderen Reihenfolge. Obwohl das meiste davon für die mobile Version ist, interessiert mich das nicht. Daher helfen alle folgenden Punkte nur bei der Desktop-Version. Darüber hinaus wird es keine Funktionserweiterung geben. Nur einen Teil des Überschusses abschneiden.
Warum so kompliziert?
Und so dachte ich, die Socken-Proxy-Daten in der Spotify-Konfiguration zu registrieren. Das Problem war, dass die Authentifizierung in Socken durch Login und Passwort nicht funktionierte. Außerdem drehen Entwickler regelmäßig etwas um den Proxy herum: entweder zulassen oder deaktivieren, dann brechen, was zu ganzen Diskussionsrunden außerhalb des Standorts führt.
Es wurde beschlossen, sich nicht auf instabile Funktionen zu verlassen und etwas zuverlässigeres und neugierigeres zu finden.
Irgendwo hier sollte der Leser fragen: Warum nicht ssh
mit dem -D
und sich um das Ende kümmern? Und im Allgemeinen wird er Recht haben. Aber erstens muss es noch dämonisiert und mit autossh befreundet werden, um nicht daran zu denken, Verbindungen zu trennen. Und zweitens: Es ist zu einfach und langweilig.
In Ordnung
Gehen wir wie üblich 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 viele Alternativen gleichzeitig:
- Sie können es einfach von offenen Proxylisten holen. Billig (oder besser gesagt umsonst), aber absolut unzuverlässig und die Lebensdauer solcher Proxys tendiert gegen Null. Daher wäre es notwendig, den Proxy-Parser der 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 (es sei
HTTP_PROXY
über HTTP_PROXY
den benutzerdefinierten Wrapper für die Binärdatei übertragen, damit nicht der gesamte andere Datenverkehr dorthin gesendet wird ) - Sie können einen ähnlichen Proxy kaufen und sich vor den meisten der oben beschriebenen Probleme schützen. Zu einem Proxy-Preis können Sie jedoch sofort eine Prämie bei Spotify kaufen, und dies ist kein Sport als Teil der ursprünglichen Aufgabe.
- Erhebe deine. Wie Sie wahrscheinlich vermutet haben, ist dies unsere Wahl.
Rein zufällig kann sich herausstellen, dass Sie einen Freund mit einem Server in Belarus oder einem anderen kleinen Land haben. Sie müssen dies verwenden und den gewünschten Proxy darauf ausrollen. Spezielle Kenner können sich mit einem Freund über eine Route zu DD-WRT oder einer ähnlichen Software zufrieden geben. Aber dort gibt es eine eigene wunderbare Welt, und diese Welt wird offensichtlich nicht in den Rahmen dieser Geschichte passen.
Unsere Optionen: Squid - nicht inspirierend, und ich möchte keinen HTTP-Proxy. Dieses Protokoll enthält zu viele. Und im Bereich SOCKS wurde noch nichts Sinnvolles außer Dante geliefert. Deshalb nehmen wir es.
Manula für die Installation und Konfiguration von Dante warten nicht. Er googelt nur und ist von geringem Interesse. In der Mindestkonfiguration müssen Sie alle Arten von client pass
, socks pass
löschen, die Schnittstellen korrekt registrieren und nicht vergessen, socksmethod: username
hinzuzufügen. In diesem Formular wird der Logopus zur Authentifizierung den Benutzern des Systems entnommen. Und der Teil über Sicherheit: das Verbot des Zugriffs auf den lokalen Host, die Einschränkung der Benutzer usw. - dies ist rein individuell, abhängig von der persönlichen Paranoia.
Die Aufführung in zwei Akten.
Akt eins
Wir haben den Proxy herausgefunden, jetzt müssen wir über das globale Web darauf zugreifen. Wenn Sie einen Computer mit einer weißen IP im richtigen Land haben, können Sie diesen Artikel sicher überspringen. Wir haben keine (wir, wie oben erwähnt, hosten Freunde zu Hause) und die nächste weiße IP befindet sich irgendwo in Deutschland, daher werden wir die Netzwerke untersuchen.
Also ja, ein aufmerksamer Leser wird erneut fragen: Warum nicht einen bestehenden Dienst wie ngrok oder ähnliches in Anspruch nehmen? Und er wird wieder Recht haben. Aber dies ist ein Dienst, der wiederum dämonisiert werden muss, auch Geld kosten kann und im Allgemeinen kein Sport ist. Deshalb werden wir Fahrräder aus improvisierten Materialien herstellen.
Aufgabe: Es gibt einen Proxy irgendwo weit hinter dem NAT. Sie müssen ihn an einen der VPS-Ports hängen, der eine weiße IP hat und sich am Rande der Welt befindet.
Es ist logisch anzunehmen, dass dies entweder durch Weiterleiten des Ports (der über das oben genannte ssh
implementiert wird) oder durch Kombinieren von Eisenstücken zu einem virtuellen Netzwerk über VPN gelöst wird. Wir wissen, wie man mit ssh
, autossh
langweilig, also nehmen wir OpenVPN.
DigitalOcean hat in dieser Angelegenheit ein wunderbares Manul . Ich habe nichts hinzuzufügen. Und die resultierende Konfiguration kann ganz einfach mit dem OpenVPN-Client und systemd
angefreundet werden. Es reicht aus, es (config) in /etc/openvpn/client/
und nicht zu vergessen, die Erweiterung in .conf
zu .conf
. openvpn-client@openvpn-client-config-name.service
den Dienst openvpn-client@openvpn-client-config-name.service
, vergessen Sie nicht, ihn dafür zu enable
, und seien Sie froh, dass alles geflogen ist.
Natürlich müssen Sie die Umleitung des Datenverkehrs zu einem neu erstellten VPN deaktivieren, da wir die Geschwindigkeit auf dem Client-Computer nicht aufgrund des Verkehrs mit Halbkugeln verringern möchten.
Und ja, Sie müssen eine statische IP-Adresse auf dem VPN-Server für unseren Client registrieren. Dies wird in der Erzählung etwas weiter benötigt. Aktivieren Sie dazu ifconfig-pool-persist
, bearbeiten ipp.txt
die mit OpenVPN gebündelte ipp.txt
und aktivieren Sie client-config-dir. Bearbeiten Sie außerdem die Konfiguration des gewünschten Clients, indem Sie ifconfig-push
mit der richtigen Maske und der gewünschten IP-Adresse hinzufügen.
Zweiter Akt
Jetzt haben wir eine Maschine im „Netzwerk“, die dem Internet zugewandt ist und zum persönlichen Vorteil verwendet werden kann. Leiten Sie nämlich einen Teil des Verkehrs durch.
Eine neue Aufgabe: Sie müssen den an einem der VPS-Ports ankommenden Datenverkehr mit einer weißen IP-Adresse abschließen, damit dieser Datenverkehr zu einem frisch verbundenen virtuellen Netzwerk geleitet wird und die Antwort von dort zurückkehren kann.
Lösung: natürlich iptables
! Wann haben Sie eine wunderbare Gelegenheit, mit ihm zu üben?
Die notwendige Konfiguration wird ziemlich bald gefunden, in drei Stunden, hundert Schimpfwörtern und einer Handvoll verbrauchter Nerven, weil das Debuggen von Netzwerken ein sehr spezifisches Verfahren ist.
Zunächst müssen Sie die Verkehrsumleitung im Kernel aktivieren. Dieses Ding heißt ipv4.ip_forward
und wird je nach Betriebssystem und Netzwerkmanager etwas anders eingeschaltet.
Zweitens müssen Sie einen Port auf dem VPS auswählen und den gesamten Datenverkehr in ein virtuelles Subnetz einbinden. Dies kann zum Beispiel folgendermaßen geschehen:
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 eingegangen ist, auf den Computer mit IP 10.8.0.2 und demselben Port 8080 um.
Diejenigen, die die schmutzigen Details von netfilter
, iptables
und Routing im Allgemeinen wollen, sollten dies oder das unbedingt in Betracht ziehen.
Jetzt fliegen unsere Pakete in ein virtuelles Subnetz und ... sie bleiben dort. Genauer gesagt, die Antwort vom Socken-Proxy fliegt über das Standard-Gateway auf dem Dante-Computer zurück und der Adressat löscht sie, da in Netzwerken nicht akzeptiert wird, eine Anforderung an eine IP zu senden, sondern eine Antwort von einer anderen zu erhalten. Deshalb müssen Sie weiter zaubern.
Jetzt müssen Sie alle Pakete vom Proxy zurück zum virtuellen Subnetz in Richtung VPS mit weißer IP umleiten. Hier ist die Situation etwas schlimmer, weil iptables
für uns einfach nicht ausreicht. Wenn wir die Zieladresse vor dem Routing PREROUTING
( PREROUTING
), wird unser Paket nicht ins Internet übertragen, und wenn wir es nicht reparieren, wird das Paket an das default gateway
. Sie müssen also Folgendes tun: mangle
Sie an die mangle
Kette, um Pakete durch iptables
und sie in eine benutzerdefinierte Routing-Tabelle zu verpacken, die sie dorthin sendet, wo sie sollten.
Kaum gesagt als 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 Verkehr, markieren alles, was von dem Port fliegt, auf dem sich der Proxy befindet (in unserem Fall 8080), leiten den gesamten markierten Verkehr mit der Nummer 80 zur Routing-Tabelle um (im Allgemeinen hängt die Nummer von nichts ab, ich wollte nur) und fügen die einzige Regel hinzu , wodurch alle Pakete, die in diese Tabelle fallen, in das VPN-Subnetz fliegen.
Großartig! Jetzt fliegen die Pakete zurück in Richtung VPS ... und sterben dort. Weil VPS nicht weiß, was er damit anfangen soll. Wenn Sie sich nicht darum kümmern, können Sie einfach den gesamten vom virtuellen Subnetz ankommenden Datenverkehr zurück ins Internet leiten:
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 einer Maske von 255.255.255.000 ankommt, in Quell-NAT eingeschlossen und fliegt zur Standardschnittstelle, die an das Internet weitergeleitet wird. Es ist wichtig zu beachten, dass dieses Ding nur funktioniert, wenn wir den Port transparent weiterleiten, dh der eingehende Port auf dem VPS stimmt mit dem Port unseres Proxys überein. Andernfalls müssen Sie etwas mehr leiden.
Irgendwo sollte jetzt alles anfangen zu funktionieren. Und es bleibt nur ein wenig übrig: Vergessen Sie nicht, sicherzustellen, dass alle iptables
und Routenkonfigurationen nach dem Neustart nicht fortgesetzt werden. Für iptables
gibt es spezielle Dateien wie /etc/iptables/rules.v4
(im Fall von Ubuntu), und für Routen ist alles etwas komplizierter. Ich habe sie in die up/down
Skripte von OpenVPN verschoben, obwohl ich denke, dass dies anständiger gemacht werden könnte.
Wrap-Datenverkehr von der Anwendung zum Proxy
Wir haben also einen Proxy mit Authentifizierung im richtigen Land, auf den über eine statische weiße IP-Adresse zugegriffen werden kann. Es bleibt übrig, es zu verwenden und den Datenverkehr von Spotify dort umzuleiten. Wie oben erwähnt, gibt es jedoch eine Nuance: Das Anmeldekennwort für den Proxy in Spotifaya funktioniert nicht. Wir werden daher nach Möglichkeiten suchen, wie Sie ausweichen können.
Denken Sie zunächst an den Proxifier . Tolle Sache, es kostet nur wie ein Raumschiff (40 Dollar). Wir können für das Geld eine Prämie kaufen und uns um das Ende kümmern. Deshalb suchen wir nach mehr freien und offenen Analoga auf der Mohnblume (ja, wir wollen Musik auf der Mohnblume hören). Wir entdecken ein ganzes Werkzeug: proximac . Und freudig gehen wir ihn stupsen.
Die Freude wird jedoch nicht lange auf sich warten lassen, da sich herausstellt, 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 sich nicht mit einem angemeldeten Anmeldekennwort authentifizieren Socken-Proxy.
Irgendwo hier ist es Zeit auszuflippen und trotzdem eine Prämie zu kaufen ... aber nein! Lassen Sie uns versuchen, das Problem zu beheben, Open Source! Wir machen ein Ticket . Und als Antwort erhalten wir eine herzzerreißende Geschichte, dass der einzige Betreuer kein Macbook mehr hat und zur Hölle mit Ihnen, und keine Lösung.
Wieder verärgert. Aber dann erinnern wir uns an die Jugend und C, aktivieren den Debug- Modus in Dante, vertiefen uns in hundert Kilobyte Protokolle, gehen zu RFC1927, um Informationen zum SOCKS5-Protokoll zu erhalten, finden es mit Xcode heraus und finden das Problem immer noch. Es reicht aus, ein Zeichen in der Liste der Methodencodes zu korrigieren, die der Client zur Authentifizierung anbietet, und alles funktioniert wie eine Uhr. Wir freuen uns, sammeln die Release-Binärdatei, erledigen die Pool-Anfrage und Geh zum Sonnenuntergang Wir gehen zum nächsten Punkt.
Automatisieren Sie es
Sobald Proximac verdient hat, müssen Sie es dämonisieren und vergessen. Hierfür eignet sich ein ganzes Initialisierungssystem, das unter MacOS läuft, nämlich launchd .
Wir finden das Handbuch schnell und verstehen, dass dies überhaupt nicht systemd
, und hier ist es fast eine Kugel und xml
. Keine schönen Konfigurationen für Sie, keine Befehle wie status
, restart
, daemon-reload
. Nur Hardcore der Form start-stop
, list-grep
, unload-load
und viele weitere Kuriositäten. Um all dies zu überwinden, schreiben wir plist
, load. Das ____ funktioniert nicht. Wir untersuchen die Methode zum Debuggen des Daemons, debazhim. Wir verstehen, dass selbst der PATH
dort nicht den normalen importiert hat, schwört, importiert (Hinzufügen von /sbin
und /usr/local/bin
) und genießt schließlich den Autostart und den stabilen Betrieb.
Atme aus
Was ist das Ergebnis? Eine Woche voller Abenteuer, ein kniehoher Zoo mit Diensten, die dem Herzen am Herzen liegen und das tun, was von ihm verlangt wird. Ein wenig Wissen in zweifelhaften technischen Bereichen, ein Tropfen Open Source und ein Lächeln auf seinem Gesicht aus dem Gedanken "Ich habe es geschafft!"
PS: Dies ist kein Aufruf zum Boykott der Kapitalisten, zu Einsparungen bei Spielen oder zu völliger List, sondern nur ein Hinweis auf die Möglichkeit von Forschung und Entwicklung, wo man sie im Allgemeinen nicht erwartet.