突如其来的冒险


Spotify如何帮助学习恶魔,RFC,网络和开源推广。 或者,如果您付不起钱,而一些真正的面包确实想要支付,那会发生什么。


开始


第三天,发现Spotify根据IP地址所在的国家/地区发布了广告。 也有人指出,在一些国家根本没有投放广告。 例如,在白俄罗斯 。 然后,在非高级帐户中停用广告的“辉煌”计划已经成熟。


关于Spotify的一些知识


一般来说,Spotifay有一个奇怪的政策。 我们的兄弟必须很变态才能购买特级产品:将个人资料中的位置更改为海外人,寻找只能用贝宝(Paypal)支付的合适的GIF卡,该卡最近很奇怪,想要一堆文件。 通常,这也是一次冒险,但是顺序不同。 尽管其中大多数是针对移动版本的,但我对此并不感兴趣。 因此,以下所有内容仅对台式机版本有用。 而且,功能不会扩展。 只切除一些多余的东西。


为什么这么复杂?


所以我想,在Spotify配置中注册socks-proxy数据。 问题在于,它们无法通过登录名和密码在袜子中进行身份验证。 另外,开发人员会定期围绕代理进行扭曲:允许,禁止或破坏代理,这导致了场外讨论的整个小组。


决定不依赖不稳定的功能,而是寻找更可靠和好奇的东西。


读者应该在这里问:为什么不使用-D处理ssh ? 而且,总的来说,他是正确的。 但是,首先,它仍然需要妖魔化并与autossh成为朋友,以免考虑断开连接。 其次:太简单又无聊了。


为了


像往常一样,让我们​​从左到右,从上到下,描述实现“简单”想法所需的一切。


首先你需要一个代理


以及许多其他选择:


  • 您可以直接从开放的代理列表中获取它。 价格便宜(或一无所获),但绝对不可靠,此类代理的寿命趋于零。 因此,有必要找到/编写列表的代理解析器,然后按所需的类型和国家/地区对其进行过滤,并且在Spotify中替换找到的代理的问题仍然存在(除非通过HTTP_PROXY二进制文件传输自定义包装,以便不将所有其他流量发送到此处) )
  • 您可以购买类似的代理,从而避免上述大多数问题。 但是,您可以以代理价格立即在Spotify上购买溢价,这并不是原始任务的一部分。
  • 提高你的。 您可能已经猜到了,这是我们的选择。

纯粹是偶然,结果可能是您有一个朋友在白俄罗斯或另一个小国家中使用服务器。 您需要使用它并在其上推出所需的代理。 可以通过DD-WRT或类似软件的路线与朋友达成特别的鉴赏家。 但是那里有它自己的 奇妙世界 ,这个世界显然不适合这个故事的框架。


因此,我们的选择是:鱿鱼-不鼓舞人心,而且我不希望使用HTTP代理,因此该协议存在太多问题。 在SOCKS领域,除了Dante之外,没有其他任何明智的选择。 因此,我们接受了。


不要等待安装和配置Dante的操作手册。 他只是谷歌 ,没什么兴趣。 在最低配置中,您需要删除各种client passsocks pass ,正确注册接口,并且不要忘记添加socksmethod: username 。 以这种形式进行身份验证时,徽标将取自系统用户。 有关安全性的部分:禁止访问本地主机,对用户的限制等-这纯粹是个人的,具体取决于个人的偏执狂。


将代理界面扩展到网络


表演分两幕。


第一幕


我们找到了代理,现在我们需要从全局Web访问它。 如果您的机器在正确的国家/地区具有白色IP,则可以安全地跳过此项目。 我们没有一个(如上所述,我们在家接待朋友),而最近的白色IP在德国的某个地方,因此我们将研究网络。


因此,是的,细心的读者会再次问:为什么不采用现有的服务(例如ngrok或类似服务)? 而且他会再次正确。 但这是一项服务,再次需要妖魔化,它也可能会花钱,而且通常不是运动。 因此,我们将使用即兴的材料制造自行车。


任务:在NAT以外的地方有一个代理,您需要将其挂在VPS端口之一上,该端口具有白色IP,位于世界的边缘。


逻辑上可以假设这是通过转发端口(通过上述ssh )或通过VPN将虚拟网络组合到虚拟网络中来解决的。 我们知道如何使用sshautossh无聊,所以我们以OpenVPN为例。


DigitalOcean在这件事上有出色的经验 。 我没什么可添加的。 最终的配置可以很容易地与OpenVPN客户端和systemd成为朋友。 将它(配置)放在/etc/openvpn/client/就足够了,不要忘记将扩展名更改为.conf 。 之后,拉开openvpn-client@openvpn-client-config-name.service服务,别忘了为此enable它,并为一切顺利而感到高兴。


当然,您需要禁用任何重定向到新创建的VPN的流量,因为由于流量超出一半,我们不想降低客户端计算机的速度。


是的,您需要在VPN服务器上为我们的客户端注册一个静态IP地址。 在叙述中,这将需要一点点。 为此,启用ifconfig-pool-persist ,编辑与OpenVPN捆绑在一起的ipp.txt并启用client-config-dir,再通过添加带有正确掩码和所需IP地址的ifconfig-push来编辑所需客户端的配置。


第二幕


现在,我们在“网络”中拥有一台面向Internet的机器,可以用于个人利益。 即,通过它重定向部分流量。


因此,这是一项新任务:您需要用白色IP封装到达VPS端口之一的流量,以使该流量飞向新连接的虚拟网络,然后答案可以从那里返回。


解决方案:当然是iptables ! 您什么时候会有如此绝妙的机会与他一起练习?


由于调试网络是一个非常特定的过程,因此很快就可以找到所需的配置,只需三个小时,就可以找到一百个誓言,并花了很少的精力。


首先,您需要在内核中启用流量重定向。 这个东西叫做ipv4.ip_forward并且根据操作系统和网络管理器的不同而有所不同。


其次,您需要在VPS上选择一个端口,并将进入该端口的所有流量包装在虚拟子网中。 例如,可以这样做:


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

在这里,我们将所有到达外部接口端口8080的TCP流量重定向到IP 10.8.0.2和相同端口8080的计算机。


那些想要netfilteriptables和路由一般细节的人应该绝对考虑这个问题


因此,现在我们的程序包飞到一个虚拟子网中,并且……留在那里。 更准确地说,来自袜子代理的响应通过Dante机器上的默认网关回飞,而收件人将其丢弃,因为在网络中,不接受向一个IP发送请求,而接收来自另一个IP的响应。 因此,您需要进一步想到。


因此,现在您需要将所有数据包从代理重定向到具有白色IP的虚拟子网的VPS。 这里的情况要差一些,因为iptables对于我们来说是远远不够的,因为如果我们在路由之前更正目标地址( PREROUTING ),那么我们的数据包将不会飞到Internet上,并且如果我们不解决它,数据包将到达default gateway 。 因此,您需要执行以下操作:记住mangle链,以便通过iptables对数据包进行标记并将其包装在自定义路由表中,该路由表会将其发送到应有的位置。


快做决定:


 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 

我们接收传出的流量,标记从代理所在端口飞来的所有内容(在本例中为8080),将所有标记的流量重定向到编号为80的路由表(通常,该编号不依赖任何内容,我只是想这样做),并添加唯一的规则,所有落入该表的数据包都会通过该数据包飞入VPN子网。


太好了! 现在,数据包飞回VPS ...并在那里死亡。 因为VPS不知道如何处理它们。 因此,如果您不打扰,只需将所有从虚拟子网到达的流量重定向到Internet:


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

在这里,从10.8.0.0子网到达的所有掩码为255.255.255.000的内容都被包裹在source-NAT中,并飞到默认接口,该接口已转到Internet。 重要的是要注意,只有当我们透明转发端口时,该功能才起作用。也就是说,VPS上的传入端口与代理的端口匹配。 否则,您将需要承受更多痛苦。


现在某个地方一切都应该开始工作。 还有一点点:不要忘记确保重启后所有iptablesroute配置都不会继续。 对于iptables有一些特殊文件,例如/etc/iptables/rules.v4 (对于Ubuntu),对于路由,一切都有些复杂。 我将它们推入OpenVPN的up/down脚本中,尽管我认为可以做到得体。


将流量从应用程序包装到代理


因此,我们在正确的国家/地区提供了具有身份验证的代理,可以通过静态白色IP地址进行访问。 仍然可以使用它并在那里重定向来自Spotify的流量。 但是有一点细微的差别,如上所述,Spotifaya中代理的登录密码不起作用,因此我们将寻找如何躲避。


对于初学者,请记住proxifier 。 很棒的东西,它的成本就像一艘飞船(40美元)。 我们可以花钱购买溢价并处理完。 因此,我们在罂粟上寻找更多的免费和开放式类似物(是的,我们想在罂粟上听音乐)。 我们发现了一个完整的工具: proximac 。 让我们高兴地戳他。


但是喜悦不会持续很长时间,因为事实证明,您需要在MacOS中打开调试模式和自定义内核扩展,进行简单的配置,并了解此工具与Spotify完全相同的问题:它无法使用登录密码进行身份验证袜子代理。


是时候在这里某个地方吓坏了,仍然要购买溢价...但是没有! 让我们尝试要求修复它,开源! 我们订票了 。 作为回应,我们得到了一个令人心碎的故事,那就是唯一的维护者不再拥有Macbook,并且对您不利,而不是修复。


再次难过。 但是,我们回想起了青年时期和C时代,在Dante中打开调试模式,探究了数百KB的日志,转到RFC1927获取有关SOCKS5协议的信息,并使用Xcode进行了查找,仍然发现了问题。 纠正客户端提供的用于身份验证的方法代码列表中的一个字符就足够了,并且一切都像时钟一样开始工作。 我们很高兴,收集了发行二进制文件,执行了池请求去日落 我们转到下一点。


自动化


一旦Proximac赚了,您需要妖魔化它,而忘记它。 为此,一个完整的初始化系统是合适的,即在MacOS上启动


我们很快找到了该手册,并了解它根本不是systemd ,这里几乎是一个独家新闻和xml 。 没有适合您的漂亮配置,没有statusrestartdaemon-reload类的命令。 只有start-stoplist-grepunload-load和许多其他形式的硬核。 克服所有这些,我们编写了plist ,load。 不起作用。 我们研究了调试守护程序debazhim的方法,我们了解到,即使PATH也没有在其中导入普通的守护程序,发誓,导入(添加/sbin/usr/local/bin ),并最终享受了自动启动和稳定的运行。


呼气


结果如何? 一周的冒险之旅,是一个动人心弦的动物园,提供贴心的服务,满足您的需求。 从“我做到了!”的想法中获得了对可疑技术领域的一点了解,一滴开源以及他脸上的笑容。


PS:这并不是呼吁抵制资本家,节省比赛费用或完全狡猾,而只是表明研究和开发的可能性,而在一般情况下,您不会期望它们。

Source: https://habr.com/ru/post/zh-CN444492/


All Articles