Aventuras de la nada


Cómo Spotify puede ayudar a aprender demonios, RFC, redes y promoción de código abierto. O qué sucede si no puede pagar, y algunos bollos premium realmente quieren.


Inicio


Al tercer día, se notó que Spotify publica anuncios basados ​​en el país de la dirección IP. También se observó allí que en algunos países la publicidad no se entregó en absoluto. Por ejemplo, en Bielorrusia . Y luego venció un plan "brillante" para deshabilitar los anuncios en una cuenta no premium.


Un poco sobre Spotify


En términos generales, Spotifay tiene una política extraña. Nuestro hermano tiene que ser bastante pervertido para comprar una prima: cambie la ubicación en el perfil a una en el extranjero, busque una tarjeta GIF adecuada que solo se pueda pagar con PayPal, que recientemente ha sido extraño y quiere un montón de documentos. En general, también una aventura, pero de un orden diferente. Aunque la mayor parte de esto es para la versión móvil, no me interesa. Por lo tanto, todo lo siguiente solo ayudará en el caso de la versión de escritorio. Además, no habrá expansión de funciones. Solo cortando algo del exceso.


¿Por qué tan complicado?


Y pensé que sí, registrando datos de proxy de calcetines en la configuración de Spotify. El problema resultó ser que su autenticación en los calcetines por inicio de sesión y contraseña no funciona. Además, los desarrolladores regularmente tuercen algo alrededor del proxy: permitiendo o deshabilitando, luego rompiéndolo, lo que da lugar a paneles enteros de discusiones en el sitio.


Se decidió no confiar en funciones inestables y encontrar algo más confiable y curioso.


En algún lugar aquí, el lector debería preguntarse: ¿por qué no tomar ssh con el -D y lidiar con el final? Y, en general, tendrá razón. Pero, en primer lugar, aún necesita ser demonizado y hacerse amigo de autossh, para no pensar en romper las conexiones. Y en segundo lugar: es demasiado simple y aburrido.


En orden


Como de costumbre, vamos de izquierda a derecha, de arriba a abajo y describamos todo lo que necesitamos para implementar nuestra idea "simple".


Primero necesitas un proxy


Y muchas alternativas a la vez:


  • puedes ir y obtenerlo de las listas de proxy abiertas. Barato (o más bien por nada), pero absolutamente poco confiable y la vida útil de tales representantes tiende a cero. Por lo tanto, sería necesario encontrar / escribir el analizador proxy de las listas, filtrarlos por el tipo y país deseados, y la cuestión de sustituir el proxy encontrado en Spotify permanece abierta (bueno, a menos que, a través de HTTP_PROXY transferir el contenedor personalizado para el binario para que no se envíe el resto del tráfico allí )
  • Puede comprar un proxy similar y salvarse de la mayoría de los problemas descritos anteriormente. Pero a un precio de proxy, puede comprar inmediatamente una prima en Spotify, y esto no es deporte como parte de la tarea inicial.
  • Levanta el tuyo. Como probablemente haya adivinado, esta es nuestra elección.

Por pura casualidad, puede resultar que tengas un amigo con un servidor en Bielorrusia u otro país pequeño. Debe usar esto y desplegar el proxy deseado en él. Los conocedores especiales pueden estar satisfechos con un amigo con una ruta a DD-WRT o software similar. Pero existe su propio mundo maravilloso y este mundo obviamente no encajará en el marco de esta historia.


Entonces, nuestras opciones: Calamar - no es inspirador, y no quiero un proxy HTTP, este protocolo tiene demasiados. Y en el campo de los CALCETINES, nada sensible excepto Dante ha sido entregado todavía. Por lo tanto, lo tomamos.


Manula para instalar y configurar Dante no espere. Simplemente busca en Google y es de poco interés. En la configuración mínima, debe soltar todo tipo de client pass de client pass , socks pass , registrar correctamente las interfaces y no olvide agregar el socksmethod: username . De esta forma, para la autenticación, el logopus se tomará de los usuarios del sistema. Y la parte sobre seguridad: la prohibición de acceso al host local, la restricción a los usuarios, etc., esto es puramente individual, dependiendo de la paranoia personal.


Expande la cara proxy a la red


La actuación en dos actos.


Acto uno


Descubrimos el proxy, ahora necesitamos acceder a él desde la web global. Si tiene una máquina con una IP blanca en el país correcto, puede omitir este elemento de forma segura. No tenemos uno (nosotros, como se mencionó anteriormente, alojamos amigos en casa) y la IP blanca más cercana está en algún lugar de Alemania, por lo que estudiaremos las redes.


Entonces, sí, un lector atento volverá a preguntar: ¿por qué no tomar un servicio existente como ngrok o similar? Y tendrá razón otra vez. Pero este es un servicio, nuevamente necesita ser demonizado, también puede costar dinero y, en general, no es deporte. Por lo tanto, crearemos bicicletas a partir de materiales improvisados.


Tarea: hay un proxy en algún lugar mucho más allá del NAT, debe colgarlo en uno de los puertos VPS, que tiene una IP blanca y se encuentra en el borde del mundo.


Es lógico suponer que esto se resuelve enviando el puerto (que se implementa a través del ssh mencionado anteriormente) o combinando piezas de hierro en una red virtual a través de VPN. Sabemos cómo trabajar con ssh , autossh aburrido tomar autossh , así que tomemos OpenVPN.


DigitalOcean tiene un maravilloso talento en este asunto. No tengo nada que agregarle. Y la configuración resultante puede hacerse muy fácilmente amiga del cliente OpenVPN y systemd . Es suficiente ponerlo (config) en /etc/openvpn/client/ y no olvide cambiar la extensión a .conf . Después de eso, openvpn-client@openvpn-client-config-name.service el servicio openvpn-client@openvpn-client-config-name.service , no olvide enable y esté contento de que todo haya volado.


Por supuesto, debe desactivar cualquier redirección de tráfico a una VPN recién creada, porque no queremos reducir la velocidad en la máquina del cliente debido al tráfico de conducción de media bola.


Y sí, debe registrar una dirección IP estática en el servidor VPN para nuestro cliente. Esto será necesario un poco más en la narrativa. Para hacer esto, habilite ifconfig-pool-persist ipp.txt , edite el ipp.txt que viene con OpenVPN y habilite client-config-dir, y edite la configuración del cliente deseado agregando ifconfig-push con la máscara correcta y la dirección IP deseada.


Acto dos


Ahora tenemos una máquina en la "red" que se da vuelta a Internet y se puede utilizar para beneficio personal. A saber, redirigir parte del tráfico a través de él.


Entonces, una nueva tarea: debe concluir el tráfico que llega a uno de los puertos VPS con una IP blanca para que este tráfico vuele a una red virtual recién conectada y la respuesta pueda volver desde allí.


Solución: ¡por supuesto iptables ! ¿Cuándo tendrás una oportunidad tan maravillosa para practicar con él?


La configuración necesaria se encuentra bastante pronto, en tres horas, cien malas palabras y un puñado de nervios gastados, porque las redes de depuración son un procedimiento muy específico.


Primero, debe habilitar la redirección de tráfico en el núcleo. Esta cosa se llama ipv4.ip_forward y se enciende un poco diferente dependiendo del sistema operativo y el administrador de red.


En segundo lugar, debe seleccionar un puerto en el VPS y envolver todo el tráfico que se dirige a él en una subred virtual. Esto se puede hacer, por ejemplo, así:


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

Aquí redirigimos todo el tráfico TCP que llegó al puerto 8080 de la interfaz externa a la máquina con IP 10.8.0.2 y el mismo puerto 8080.


Aquellos que quieran los detalles sucios de netfilter , iptables y enrutamiento en general deberían contemplar esto o aquello .


Entonces, ahora nuestros paquetes vuelan a una subred virtual y ... se quedan allí. Más precisamente, la respuesta del proxy de calcetines vuela de regreso a través de la puerta de enlace predeterminada en la máquina Dante y el destinatario la descarta, porque en las redes no se acepta enviar una solicitud a una IP, sino recibir una respuesta de otra. Por lo tanto, necesitas conjurar más.


Entonces, ahora necesita redirigir todos los paquetes desde el proxy a la subred virtual hacia VPS con IP blanca. Aquí la situación es un poco peor, porque iptables simplemente no será suficiente para nosotros, porque si PREROUTING la dirección de destino antes del enrutamiento ( PREROUTING ), nuestro paquete no volará a Internet, y si no lo arreglamos, el paquete irá a la default gateway . Por lo tanto, debe hacer lo siguiente: recuerde la cadena de mangle para etiquetar los paquetes a través de iptables y envolverlos en una tabla de enrutamiento personalizada que los enviará a donde debería.


Apenas dicho que hecho:


 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 

Tomamos el tráfico saliente, marcamos todo lo que vuela desde el puerto en el que se encuentra el proxy (8080 en nuestro caso), redirigimos todo el tráfico marcado a la tabla de enrutamiento con el número 80 (en general, el número no depende de nada, solo quería) y agregamos la única regla , por el cual todos los paquetes que caen en esta tabla vuelan a la subred VPN.


Genial Ahora los paquetes vuelan de regreso hacia VPS ... y mueren allí. Porque VPS no sabe qué hacer con ellos. Por lo tanto, si no se molesta, simplemente puede tomar y redirigir todo el tráfico que llega de la subred virtual a Internet:


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

Aquí, todo lo que llega de la subred 10.8.0.0 con una máscara de 255.255.255.000 está envuelto en NAT de origen y vuela a la interfaz predeterminada, que se convierte en Internet. Es importante tener en cuenta que esto solo funcionará si reenviamos el puerto de forma transparente, es decir, el puerto entrante en el VPS coincide con el puerto de nuestro proxy. De lo contrario, tendrá que sufrir un poco más.


En algún lugar ahora todo debería comenzar a funcionar. Y solo queda un poco: no olvide asegurarse de que todas las configuraciones de iptables y route no continúen después del reinicio. Para iptables hay archivos especiales como /etc/iptables/rules.v4 (en el caso de Ubuntu), y para rutas todo es un poco más complicado. Los introduje en los scripts de up/down de OpenVPN, aunque, creo, podría hacerse de forma más decente.


Envuelva el tráfico de la aplicación al proxy


Entonces, tenemos un proxy con autenticación en el país correcto, accesible por una dirección IP blanca estática. Queda por usarlo y redirigir el tráfico desde Spotify allí. Pero hay un matiz, como se mencionó anteriormente, la contraseña de inicio de sesión para el proxy en Spotifaya no funciona, por lo que buscaremos cómo esquivar.


Para empezar, recuerda proxifier . Gran cosa, solo cuesta como una nave espacial ($ 40). Podemos comprar primas por el dinero y lidiar con el final. Por lo tanto, buscamos más análogos libres y abiertos en la amapola (sí, queremos escuchar música en la amapola). Descubrimos una herramienta completa: proximac . Y alegremente vamos a golpearlo.


Pero la alegría no será larga, porque resulta que necesita activar el modo de depuración y las extensiones de kernel personalizadas en MacOS, presentar una configuración simple y comprender que esta herramienta tiene exactamente el mismo problema que Spotify: no puede autenticarse con una contraseña de inicio de sesión en calcetines proxy.


En algún lugar aquí es hora de enloquecer y aún comprar una prima ... ¡pero no! ¡Intentemos pedir solucionarlo, código abierto! Hacemos un boleto . Y en respuesta, tenemos una historia desgarradora de que el único responsable ya no tiene un macbook y al diablo contigo, y no una solución.


Molesto de nuevo. Pero luego recordamos que el joven y C, activan el modo de depuración en Dante, profundizan en cien kilobytes de registros, van a RFC1927 para obtener información sobre el protocolo SOCKS5, descifran con Xcode y aún encuentran el problema. Es suficiente corregir un carácter en la lista de códigos de método que ofrece el cliente para la autenticación y todo comienza a funcionar como un reloj. Nos alegramos, recopilamos el binario de lanzamiento, hacemos la solicitud del grupo y ir al atardecer Vamos al siguiente punto.


Automatizarlo


Una vez que Proximac ha ganado, debes demonizarlo y olvidarte de él. Para esto, es adecuado un sistema de inicialización completo, que está en MacOS, a saber, launchd .


Encontramos rápidamente el manual y entendemos que esto no es systemd en absoluto, y aquí es casi una primicia y xml . No hay configuraciones hermosas para ti, no hay comandos como status , restart , daemon-reload . Solo hardcore de la forma start-stop , list-grep , unload-load y muchas más rarezas. Superando todo esto, escribimos plist , load. No funciona Estudiamos el método de depuración del demonio, debazhim, entendemos que incluso el PATH no importó el normal allí, jura, importó (agregando /sbin y /usr/local/bin ) y finalmente disfrutamos de un inicio automático y una operación estable.


Exhalar


Cual es el resultado? Una semana de aventuras, un zoológico a la altura de las rodillas de servicios que es querido para el corazón y hace lo que se le exige. Un poco de conocimiento en áreas técnicas dudosas, una gota de código abierto y una sonrisa en su rostro por el pensamiento "¡Lo hice!"


PD: no se trata de un boicot a los capitalistas, de ahorros en partidos o de astucia total, sino solo una indicación de la posibilidad de investigación y desarrollo donde, en general, no se espera.

Source: https://habr.com/ru/post/444492/


All Articles