Comment Spotify peut aider à apprendre les démons, les RFC, les réseaux et la promotion open source. Ou que se passe-t-il si vous ne pouvez pas payer et que certains petits pains premium le veulent vraiment.
Commencer
Le troisième jour, il a été remarqué que Spotify diffuse des annonces en fonction du pays de l'adresse IP. Il a également été noté que, dans certains pays, la publicité n'était pas diffusée du tout. Par exemple, au Bélarus . Et puis un plan "génial" pour désactiver les publicités dans un compte non premium est arrivé à échéance.
Un peu sur Spotify
D'une manière générale, Spotifay a une politique étrange. Notre frère doit être assez pervers pour acheter une prime: changez l'emplacement dans le profil pour un étranger, recherchez une carte GIF appropriée qui ne peut être payée qu'avec paypal, qui a récemment été bizarre et veut un tas de documents. En général, c'est aussi une aventure, mais d'un ordre différent. Bien que la majeure partie soit destinée à la version mobile, cela ne m'intéresse pas. Par conséquent, tous les éléments suivants ne seront utiles que dans le cas de la version de bureau. De plus, il n'y aura pas d'extension des fonctions. Ne couper qu'une partie de l'excédent.
Pourquoi si compliqué?
Et donc j'ai pensé, en enregistrant les données de socks-proxy dans la configuration Spotify. Le problème s'est avéré que leur authentification dans les chaussettes par identifiant et mot de passe ne fonctionne pas. De plus, les développeurs tordent régulièrement quelque chose autour du proxy: soit l'autoriser, l'interdire ou le casser, ce qui donne lieu à des panels entiers de discussions sur le site.
Il a été décidé de ne pas s'appuyer sur des fonctions instables et de trouver quelque chose de plus fiable et curieux.
Quelque part ici, le lecteur devrait se demander: pourquoi ne pas prendre ssh
avec le -D
et gérer la fin? Et, en général, il aura raison. Mais, tout d'abord, il doit encore être diabolisé et lié d'amitié avec autossh, afin de ne pas penser à rompre les connexions. Et deuxièmement: c'est trop simple et ennuyeux.
Pour
Comme d'habitude, allons de gauche à droite, de haut en bas et décrivons tout ce dont nous avons besoin pour mettre en œuvre notre idée "simple".
Vous avez d'abord besoin d'un proxy
Et de nombreuses alternatives Ă la fois:
- vous pouvez simplement l'obtenir auprès de proxylistes ouverts. Pas cher (ou plutôt pour rien), mais absolument peu fiable et la durée de vie de ces procurations tend à zéro. Par conséquent, il serait nécessaire de trouver / écrire un analyseur proxy des listes, de les filtrer par le type et le pays souhaités, et la question de remplacer le proxy trouvé dans Spotify reste ouverte (enfin, à moins que, via
HTTP_PROXY
transmette et wrapper personnalisé pour le binaire afin que tout le reste du trafic n'y soit pas envoyé) ) - Vous pouvez acheter un proxy similaire et vous sauver de la plupart des problèmes décrits ci-dessus. Mais à un prix proxy, vous pouvez immédiatement acheter une prime sur Spotify, et ce n'est pas du sport dans le cadre de la tâche initiale.
- Soulevez le vôtre. Comme vous l'avez probablement deviné, c'est notre choix.
Par pur hasard, il se peut que vous ayez un ami avec un serveur au Bélarus ou dans un autre petit pays. Vous devez l'utiliser et y déployer le proxy souhaité. Les connaisseurs spéciaux peuvent se contenter d'un ami avec un itinéraire vers DD-WRT ou un logiciel similaire. Mais il y a son propre monde merveilleux et ce monde ne rentre évidemment pas dans le cadre de cette histoire.
Donc, nos options: Squid - pas inspirant, et je ne veux pas de proxy HTTP, ce protocole en a trop autour. Et dans le domaine des CHAUSSETTES, rien de sensé sauf Dante n'a encore été livré. Par conséquent, nous le prenons.
Manula pour l'installation et la configuration de Dante n'attendez pas. Il google juste et est de peu d'intérêt. Dans la configuration minimale, vous devez supprimer toutes sortes de client pass
socks pass
, enregistrer correctement les interfaces et ne pas oublier d'ajouter socksmethod: username
. Sous cette forme, pour l'authentification, le logopus sera prélevé auprès des utilisateurs du système. Et la partie sur la sécurité: l'interdiction d'accès à l'hôte local, la restriction sur les utilisateurs, etc. - c'est purement individuel, en fonction de la paranoïa personnelle.
La performance en deux actes.
Acte un
Nous avons compris le proxy, nous devons maintenant y accéder à partir du Web mondial. Si vous avez une machine avec une IP blanche dans le bon pays, vous pouvez ignorer cet élément en toute sécurité. Nous n'en avons pas (nous, comme mentionné ci-dessus, accueillons des amis à la maison) et l'adresse IP blanche la plus proche se situe quelque part en Allemagne, nous allons donc étudier les réseaux.
Alors oui, un lecteur attentif se posera à nouveau la question: pourquoi ne pas prendre un service existant comme ngrok ou similaire? Et il aura encore raison. Mais c'est un service, encore faut-il le diaboliser, ça peut aussi coûter de l'argent et en général ce n'est pas du sport. Par conséquent, nous allons créer des vélos à partir de matériaux improvisés.
Tâche: il y a un proxy quelque part bien au-delà du NAT, vous devez le suspendre à l'un des ports VPS, qui a une adresse IP blanche et est situé au bord du monde.
Il est logique de supposer que cela est résolu soit en redirigeant le port (qui est implémenté via le ssh
susmentionné), soit en combinant des morceaux de fer dans un réseau virtuel via VPN. Nous savons comment travailler avec ssh
, autossh
ennuyeux Ă prendre, prenons donc OpenVPN.
DigitalOcean a une merveilleuse manuc dans ce domaine. Je n'ai rien à y ajouter. Et la configuration qui en résulte peut être très facilement liée avec le client OpenVPN et systemd
. Il suffit de le mettre (config) dans /etc/openvpn/client/
et n'oubliez pas de changer l'extension en .conf
. Après cela, tirez le service openvpn-client@openvpn-client-config-name.service
, n'oubliez pas de l' enable
pour cela et soyez heureux que tout a volé.
Bien sûr, vous devez désactiver toute redirection de trafic vers un VPN fraîchement créé, car nous ne voulons pas réduire la vitesse sur la machine client en raison du trafic de conduite en demi-boule.
Et oui, vous devez enregistrer une adresse IP statique sur le serveur VPN pour notre client. Cela sera nécessaire un peu plus loin dans le récit. Pour ce faire, activez ifconfig-pool-persist
, modifiez le ipp.txt
fourni avec OpenVPN et activez client-config-dir, plus modifiez la configuration du client souhaité en ajoutant ifconfig-push
avec le masque correct et l'adresse IP souhaitée.
Acte deux
Nous avons maintenant une machine dans le «réseau» qui est tournée vers Internet et peut être utilisée pour un gain personnel. À savoir, rediriger une partie du trafic à travers elle.
Donc, une nouvelle tâche: vous devez terminer le trafic arrivant sur l'un des ports VPS avec une IP blanche afin que ce trafic vole vers un réseau virtuel fraîchement connecté et que la réponse puisse revenir de là .
Solution: bien sûr iptables
! Quand aurez-vous une merveilleuse occasion de pratiquer avec lui?
La configuration nécessaire se retrouve assez rapidement, en trois heures, une centaine de jurons et une poignée de nerfs épuisés, car le débogage des réseaux est une procédure très spécifique.
Tout d'abord, vous devez activer la redirection du trafic dans le noyau. Cette chose s'appelle ipv4.ip_forward
et s'active un peu différemment selon le système d'exploitation et le gestionnaire de réseau.
Deuxièmement, vous devez sélectionner un port sur le VPS et envelopper tout le trafic qui y accède dans un sous-réseau virtuel. Cela peut être fait, par exemple, comme ceci:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to-destination 10.8.0.2:8080
Ici, nous redirigeons tout le trafic TCP provenant du port 8080 de l'interface externe vers la machine avec IP 10.8.0.2 et le mĂŞme port 8080.
Ceux qui veulent les détails sales de netfilter
, iptables
et du routage en général devraient absolument envisager ceci ou cela .
Donc, maintenant nos packages volent dans un sous-réseau virtuel et ... ils y restent. Plus précisément, la réponse du proxy socks retourne via la passerelle par défaut sur la machine Dante et le destinataire la supprime, car dans les réseaux, il n'est pas accepté d'envoyer une demande à une IP, mais de recevoir une réponse d'une autre. Par conséquent, vous devez évoquer davantage.
Donc, maintenant vous devez rediriger tous les paquets du proxy vers le sous-réseau virtuel vers VPS avec IP blanche. Ici, la situation est un peu pire, car iptables
ne sera tout simplement pas suffisant pour nous, car si nous PREROUTING
adresse de destination avant le routage ( PREROUTING
), alors notre paquet sur Internet ne s'envolera pas, et si nous ne le réparons pas, le paquet ira à la default gateway
. Donc, vous devez faire ce qui suit: rappelez-vous la chaîne mangle
afin de baliser les paquets via iptables
et de les envelopper dans une table de routage personnalisée qui les enverra là où cela devrait.
AussitĂ´t dit, aussitĂ´t fait:
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
Nous prenons le trafic sortant, marquons tout ce qui vole du port sur lequel se trouve le proxy (8080 dans notre cas), redirigeons tout le trafic marqué vers la table de routage avec le numéro 80 (en général, le numéro ne dépend de rien, je voulais juste) et ajoutons la seule règle , par lequel tous les paquets qui tombent dans cette table volent dans le sous-réseau VPN.
Super! Maintenant, les paquets reviennent vers VPS ... et y meurent. Parce que VPS ne sait pas quoi faire avec eux. Par conséquent, si cela ne vous dérange pas, vous pouvez simplement récupérer et rediriger tout le trafic provenant du sous-réseau virtuel vers Internet:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 172.42.1.10
Ici, tout ce qui arrive du sous-réseau 10.8.0.0 avec un masque de 255.255.255.000 est enveloppé dans le NAT source et vole vers l'interface par défaut, qui est tournée vers Internet. Il est important de noter que cette chose ne fonctionnera que si nous transférons de manière transparente le port, c'est-à -dire que le port entrant sur le VPS correspond au port de notre proxy. Sinon, vous devrez souffrir un peu plus.
Quelque part maintenant, tout devrait commencer Ă fonctionner. Et juste un petit reste: n'oubliez pas de vous assurer que toutes les iptables
et route
ne continuent pas après le redémarrage. Pour iptables
il existe des fichiers spéciaux comme /etc/iptables/rules.v4
(dans le cas d'Ubuntu), et pour les routes, tout est un peu plus compliqué. Je les ai poussés dans les scripts up/down
d'OpenVPN, bien que, je pense, cela pourrait être fait plus décemment.
Envelopper le trafic de l'application vers le proxy
Nous avons donc un proxy avec authentification dans le bon pays, accessible par une adresse IP blanche statique. Il reste à l'utiliser et à rediriger le trafic depuis Spotify là -bas. Mais il y a une nuance, comme mentionné ci-dessus, le mot de passe de connexion pour le proxy dans Spotifaya ne fonctionne pas, nous allons donc chercher comment esquiver.
Pour commencer, n'oubliez pas le proxy . Grande chose, cela ne coûte que comme un vaisseau spatial (40 $). Nous pouvons acheter des primes pour l'argent et faire face à la fin. Par conséquent, nous recherchons plus d'analogues gratuits et ouverts sur le coquelicot (oui, nous voulons écouter de la musique sur le coquelicot). On découvre un seul outil: proximac . Et allons joyeusement le piquer.
Mais la joie ne sera pas longue, car il s'avère que vous devez activer le mode débogage et les extensions de noyau personnalisées sous MacOS, déposer une simple configuration et comprendre que cet outil a exactement le même problème que Spotify: il ne peut pas s'authentifier avec un mot de passe de connexion sur chaussettes-proxy.
Quelque part ici, il est temps de paniquer et d'acheter toujours une prime ... mais non! Essayons de demander de le réparer, open source! Nous faisons un ticket . Et en réponse, nous obtenons une histoire déchirante que le seul mainteneur n'a plus de macbook et au diable avec vous, et pas un correctif.
Bouleversé à nouveau. Mais ensuite, nous nous souvenons de la jeunesse et de C, activons le mode débogage dans Dante, explorons une centaine de kilo-octets de journaux, allons à RFC1927 pour obtenir des informations sur le protocole SOCKS5, le découvrir avec Xcode et toujours trouver le problème. Il suffit de corriger un caractère dans la liste des codes de méthode que le client propose pour l'authentification et tout commence à fonctionner comme une horloge. Nous nous réjouissons, récupérons la version binaire, faisons la demande de pool et aller au coucher du soleil Nous passons au point suivant.
Automatisez-le
Une fois que Proximac a gagné, vous devez le diaboliser et l'oublier. Pour cela, tout un système d'initialisation convient, qui est sur MacOS, à savoir launchd .
Nous trouvons rapidement le manuel et comprenons que ce n'est pas du tout systemd
, et ici c'est presque un scoop et du xml
. Pas de belles configurations pour vous, pas de commandes comme status
, restart
, daemon-reload
. Seulement hardcore de la forme start-stop
, list-grep
, unload-load
et bien d'autres bizarreries. Surmontant tout cela, nous écrivons plist
, charge. Ne marche pas. Nous étudions la méthode de débogage du démon, debazhim, nous comprenons que même le PATH
n'y a pas importé le normal, jure, importe (en ajoutant /sbin
et /usr/local/bin
) et enfin profiter du démarrage automatique et d'un fonctionnement stable.
Expirez
Quel est le résultat? Une semaine d'aventure, un zoo à hauteur de genoux de services chers au cœur et fait ce qui est exigé de lui. Un peu de connaissance dans des domaines techniques douteux, une goutte d'open source et un sourire sur son visage de la pensée "je l'ai fait!"
PS: ce n'est pas un appel au boycott des capitalistes, à des économies sur les matchs ou à la ruse totale, mais juste une indication de la possibilité de recherche et développement où, en général, vous ne vous y attendez pas.