Aniden ortaya çıkan maceralar

Aniden ortaya çıkan maceralar

Spotify, arka plan programlarını, RFC'leri, ağları incelemenize ve açık kaynağı tanıtmanıza nasıl yardımcı olabilir? Ya da ödeyemeseniz de ne olur, ama gerçekten premium hediyeler istiyorsanız.

başlangıç

Üçüncü gün Spotify'ın IP adresinin bulunduğu ülkeye göre reklam gösterdiği fark edildi. Ayrıca bazı ülkelerde reklamın hiç ithal edilmediği de kaydedildi. Örneğin, Belarus Cumhuriyeti'nde. Ve sonra premium olmayan bir hesapta reklamları devre dışı bırakmak için "harika" bir plan yapıldı.

Spotify hakkında biraz

Genel olarak konuşursak, Spotify'ın garip bir politikası var. Kardeşimizin premium satın alabilmesi için oldukça saplantılı olması gerekiyor: Profilindeki konumu yurt dışı olarak değiştirin, son zamanlarda tuhaf davranan ve bir sürü belge isteyen, yalnızca PayPal ile ödeme yapılabilen uygun bir hediye kartı arayın. Genel olarak bu aynı zamanda bir maceradır, ancak farklı bir düzendedir. Her ne kadar çoğu kişi bunu mobil versiyon uğruna yapsa da ben ilgilenmiyorum. Bu nedenle, aşağıdaki her şey yalnızca masaüstü sürümü durumunda yardımcı olacaktır. Üstelik işlevlerde herhangi bir genişleme olmayacak. Sadece fazla olanlardan bazılarını kesiyorum.

Neden bu kadar karmaşık?

Ben de çorap proxy verilerini Spotify yapılandırmasına kaydederken öyle düşündüm. Sorunun, kullanıcı adı ve şifre kullanılarak çoraplarda kimlik doğrulamanın işe yaramaması olduğu ortaya çıktı. Ayrıca, geliştiriciler proxy etrafında düzenli olarak bir şeyler yaparlar: ya izin verirler, sonra yasaklarlar ya da bozarlar, bu da site dışında tüm tartışma panellerinin ortaya çıkmasına neden olur.

Kararsız işlevlere güvenmemeye, daha güvenilir ve ilginç bir şey bulmaya karar verildi.

Burada bir yerde okuyucunun şunu sorması gerekiyor: neden almayasınız? ssh bir anahtarla -D ve bu işin sonu mu? Ve genel olarak haklı olacak. Ancak, öncelikle, kopmuş bağlantıları düşünmemek için bunun yine de şeytanlaştırılması ve autossh ile arkadaş olunması gerekiyor. İkincisi: çok basit ve sıkıcı.

Sırayla

Her zamanki gibi soldan sağa, yukarıdan aşağıya gidip “basit” fikrimizi hayata geçirmek için ihtiyacımız olan her şeyi anlatalım.

İlk önce bir proxy'ye ihtiyacınız var

Ve aynı anda birçok alternatif var:

  • gidip açık proxy listelerinden alabilirsiniz. Ucuz (ya da daha doğrusu hiçbir şey için), ancak kesinlikle güvenilmez ve bu tür proxy'lerin ömrü sıfır olma eğilimindedir. Bu nedenle, proxy listeleri için bir ayrıştırıcı bulmak/yazmak, bunları istenen türe ve ülkeye göre filtrelemek gerekli olacaktır ve bulunan proxy'yi Spotify'da değiştirme sorunu açık kalmaya devam edecektir (belki de aracılığıyla) HTTP_PROXY diğer tüm trafiğin oraya gönderilmemesi için ikili dosya için özel bir sarmalayıcı aktarın ve oluşturun).
  • Benzer bir proxy satın alarak yukarıda anlatılan sorunların çoğundan kendinizi kurtarabilirsiniz. Ancak bir proxy fiyatı karşılığında Spotify'dan hemen premium satın alabilirsiniz ve bu, orijinal görev için pratik değildir.
  • Seninkini yükselt. Muhtemelen tahmin ettiğiniz gibi bu bizim seçimimiz.

Tamamen şans eseri, Belarus Cumhuriyeti'nde veya başka bir küçük ülkede sunucusu olan bir arkadaşınızın olduğu ortaya çıkabilir. Bunu kullanmanız ve üzerinde istediğiniz proxy'yi yayınlamanız gerekir. Özel uzmanlar, yönlendiricisi olan bir arkadaştan memnun olabilir DD-WRT veya benzer bir yazılım. Ama orada onun harika Dünya ve bu dünya açıkça bu hikayenin çerçevesine uymuyor.

Yani seçeneklerimiz: Squid - ilham verici değil ve bir HTTP proxy istemiyorum, bu protokolden zaten etrafta çok fazla var. Ve ÇORAP alanında mantıklı bir şey yok Dante henüz teslim etmediler. Bu nedenle alalım.

Kurulum ve yapılandırmayla ilgili Dante'nin kılavuzunu beklemeyin. O sadece Google'da araştırıyorum ve özel bir ilgi alanı değil. Minimum konfigürasyonda her türlü şeyi atmanız gerekir. client pass, socks pass, arayüzleri doğru şekilde kaydedin ve eklemeyi unutmayın socksmethod: username. Bu formda kimlik doğrulama için sistem kullanıcılarından logopass alınacaktır. Ve güvenlikle ilgili kısım: localhost'a erişimin yasaklanması, kullanıcıların sınırlandırılması vb. - bu tamamen kişiseldir ve kişisel paranoyaya bağlıdır.

Ağa bakan bir proxy dağıtın

Oyun iki perdeden oluşuyor.

Birinci

Proxy'yi çözdük, şimdi ona küresel ağdan erişmemiz gerekiyor. İstediğiniz ülkede beyaz IP'ye sahip bir makineniz varsa bu noktayı güvenle atlayabilirsiniz. Bir tanemiz yok (yukarıda belirtildiği gibi arkadaşlarımızın evlerinde barındırılıyoruz) ve en yakın beyaz IP Almanya'da bir yerde, bu yüzden ağları inceleyeceğiz.

Yani evet, dikkatli okuyucu tekrar soracaktır: neden şu şekilde mevcut bir hizmeti almıyorsunuz? Ngrok veya benzeri? Ve yine haklı çıkacak. Ancak bu bir hizmettir, yine şeytanlaştırılması gerekiyor, aynı zamanda paraya mal olabilir ve genel olarak sportif değildir. Bu nedenle hurda malzemelerden bisiklet yaratacağız.

Görev: NAT'ın çok gerisinde bir yerde bir proxy var, onu beyaz IP'ye sahip ve dünyanın ucunda bulunan bir VPS'nin bağlantı noktalarından birine asmanız gerekiyor.

Bunun port yönlendirme (yukarıda belirtilen yöntemle uygulanan) yoluyla çözülebileceğini varsaymak mantıklıdır. ssh) veya donanımı VPN aracılığıyla sanal bir ağda birleştirerek. İLE ssh nasıl çalışılacağını biliyoruz autossh Almak sıkıcı, o yüzden OpenVPN'i alalım.

DigitalOcean'ın sahip olduğu harika manul Bu meselede. Buna ekleyecek hiçbir şeyim yok. Ve ortaya çıkan yapılandırma OpenVPN istemcisine oldukça kolay bir şekilde bağlanabilir ve systemd. Sadece onu (config) içine koyun /etc/openvpn/client/ ve uzantıyı şu şekilde değiştirmeyi unutmayın: .conf. Bundan sonra servisi çekin [email protected]onun için bunu yapmayı unutma enable ve her şeyin uçup gitmesine sevinin.

Elbette trafiğin yeni oluşturulan VPN'e yönlendirilmesini devre dışı bırakmamız gerekiyor çünkü trafiği yarım topun içinden geçirerek istemci makinedeki hızı düşürmek istemiyoruz.

Ve evet, istemcimiz için VPN sunucusuna statik bir IP adresi kaydetmemiz gerekiyor. Hikayenin biraz ilerleyen kısımlarında buna ihtiyaç duyulacak. Bunu yapmak için etkinleştirmeniz gerekir ifconfig-pool-persist, düzenlemek ipp.txt, OpenVPN'e dahildir ve client-config-dir'i etkinleştirin, ayrıca istediğiniz istemcinin yapılandırmasını ekleyerek düzenleyin ifconfig-push doğru maske ve istenen IP adresiyle.

İkinci Yasa

Artık “ağda” internete bakan ve bencil amaçlarla kullanılabilecek bir makinemiz var. Yani trafiğin bir kısmını bunun üzerinden yönlendirin.

Yani, yeni bir görev: VPS bağlantı noktalarından birine beyaz IP ile gelen trafiği kapatmanız gerekir, böylece bu trafik yeni bağlanan sanal ağa gider ve yanıt oradan geri dönebilir.

Çözüm: elbette iptables! Başka ne zaman onunla pratik yapmak için bu kadar harika bir fırsata sahip olacaksın?

Gerekli konfigürasyon oldukça hızlı bir şekilde, üç saat içinde, yüzlerce küfür ve bir avuç boşa harcanan sinirle bulunabilir, çünkü ağlarda hata ayıklamak çok özel bir prosedürdür.

Öncelikle çekirdekte trafik yönlendirmeyi etkinleştirmeniz gerekir. Bu şeye denir ipv4.ip_forward ve işletim sistemine ve ağ yöneticisine bağlı olarak biraz farklı şekilde etkinleştirilir.

İkinci olarak, VPS'de bir bağlantı noktası seçmeniz ve ona giden tüm trafiği sanal bir alt ağa sarmanız gerekir. Bu, örneğin şu şekilde yapılabilir:

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

Burada harici arayüzün 8080 numaralı bağlantı noktasına gelen tüm TCP trafiğini IP 10.8.0.2 ve aynı 8080 numaralı bağlantı noktasına sahip bir makineye yönlendiriyoruz.

İşin kirli detaylarını isteyenler için netfilter, iptables ve genel olarak yönlendirmeyi düşünmek kesinlikle gereklidir bu veya bu.

Artık paketlerimiz sanal alt ağa uçuyor ve... orada kalıyorlar. Daha doğrusu, çorap proxy'sinden gelen yanıt, Dante'nin bulunduğu makinedeki varsayılan ağ geçidi üzerinden geri uçar ve alıcı onu bırakır, çünkü ağlarda bir IP'ye istek gönderip diğerinden yanıt almak alışılmış bir şey değildir. Bu nedenle sihir yapmaya devam etmemiz gerekiyor.

Bu nedenle, artık tüm paketleri proxy'den sanal alt ağa, beyaz bir IP ile VPS'ye yönlendirmeniz gerekiyor. Burada durum biraz daha kötü çünkü iptables yeterli olmayacağız çünkü yönlendirmeden önce hedef adresi düzeltirsek (PREROUTING), o zaman paketimiz İnternet'e uçmayacak ve eğer düzeltmezsek paket default gateway. Yani aşağıdakileri yapmanız gerekir: zinciri hatırlayın manglepaketleri işaretlemek için iptables ve onları gitmeleri gereken yere gönderecek özel bir yönlendirme tablosuna sarın.

Daha erken olmaz dedi ve bitirdi:

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

Giden trafiği alıyoruz, proxy'nin bulunduğu bağlantı noktasından uçan her şeyi işaretliyoruz (bizim durumumuzda 8080), işaretli tüm trafiği 80 numarasıyla yönlendirme tablosuna yönlendiriyoruz (genel olarak sayı hiçbir şeye bağlı değil, sadece istedik) to) ve bu tablodaki tüm paketlerin VPN alt ağına uçmasına göre tek bir kural ekleyin.

Harika! Artık paketler VPS'ye doğru uçuyor... ve orada ölüyor. Çünkü VPS bunlarla ne yapacağını bilmiyor. Bu nedenle, eğer zahmet etmezseniz, sanal alt ağdan gelen tüm trafiği tekrar İnternet'e yönlendirebilirsiniz:

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

Burada 10.8.0.0 alt ağından 255.255.255.000 maskesiyle gelen her şey kaynak-NAT'a sarılır ve internete çevrilen varsayılan arayüze uçar. Bu şeyin yalnızca bağlantı noktasını şeffaf bir şekilde iletirsek, yani VPS'ye gelen bağlantı noktasının proxy'mizin bağlantı noktasıyla eşleştiğinde işe yarayacağını unutmamak önemlidir. Aksi takdirde biraz daha acı çekmek zorunda kalacaksınız.

Artık bir yerlerde her şey çalışmaya başlamalı. Ve geriye çok az bir şey kaldı: tüm yapılandırmaların yapıldığından emin olmayı unutmayın. iptables и route yeniden başlatmanın ardından devam etmedi. İçin iptables gibi özel dosyalar var /etc/iptables/rules.v4(Ubuntu durumunda), ancak rotalar için her şey biraz daha karmaşıktır. onları içeri ittim up/down OpenVPN komut dosyaları, ancak bunların daha düzgün bir şekilde yapılabileceğini düşünüyorum.

Uygulamadan gelen trafiği proxy'ye sarın

Bu nedenle, istenen ülkede, statik beyaz bir IP adresi aracılığıyla erişilebilen, kimlik doğrulamalı bir proxy'miz var. Geriye kalan tek şey onu kullanmak ve Spotify'dan gelen trafiği oraya yönlendirmektir. Ancak yukarıda da belirtildiği gibi bir nüans var, Spotify'daki proxy için giriş şifresi çalışmıyor, bu yüzden bunu nasıl aşacağımızı arayacağız.

Başlangıç ​​olarak şunu hatırlayalım yakınlaştırıcı. Harika bir şey ama maliyeti bir yıldız gemisi kadar (40 dolar). Bu parayla tekrar premium satın alabilir ve işimizi halledebiliriz. Bu nedenle Mac'te daha özgür ve açık analoglar arayacağız (evet, Mac'te müzik dinlemek istiyoruz). Bütün bir aracı keşfedelim: yakın. Ve mutlu bir şekilde onu dürtmeye gideceğiz.

Ancak bu mutluluk kısa ömürlü olacak çünkü MacOS'ta hata ayıklama modunu ve özel çekirdek uzantılarını etkinleştirmeniz, basit bir yapılandırma dosyası oluşturmanız ve bu aracın Spotify ile tamamen aynı soruna sahip olduğunu anlamanız gerekiyor: Spotify'ı kullanarak kimlik doğrulamayı geçemiyor. çorap proxy'sinde giriş şifresi.

Buralarda bir yerlerde çıldırıp premium satın almanın zamanı geldi... ama hayır! Düzeltilmesini istemeye çalışalım, açık kaynak! Hadi yapalım bilet. Ve yanıt olarak, tek bakımcının artık bir MacBook'a sahip olmadığı ve canı cehenneme, bir düzeltmenin olmadığı hakkında yürek burkan bir hikayeyle karşılaşıyoruz.

Yine üzüleceğiz. Ama sonra gençliğimizi ve C'yi hatırlayacağız, Dante'de hata ayıklama modunu açacağız, yüzlerce kilobaytlık günlükleri kazacağız, RFC1927 SOCKS5 protokolü hakkında bilgi almak için Xcode'a bakalım ve sorunu bulalım. İstemcinin kimlik doğrulama için sunduğu yöntem kodları listesindeki bir karakteri düzeltmek yeterlidir ve her şey saat gibi çalışmaya başlar. Seviniyoruz, sürüm ikili dosyasını topluyoruz, yapıyoruz çekme isteği ve gün batımına girip bir sonraki noktaya geçiyoruz.

Otomatikleştirin

Proximac işe ​​yaradıktan sonra şeytanlaştırılıp unutulması gerekiyor. Buna uygun, MacOS'ta bulunan tek bir başlatma sistemi vardır, yani launchd.

Çabuk buluyoruz Manuel ve bunun hiç de öyle olmadığını anlıyoruz systemd ve burada neredeyse bir kepçe ve xml. Sizin için süslü yapılandırmalar yok, gibi komutlar yok status, restart, daemon-reload. Sadece hardcore tür start-stop, list-grep, unload-load ve daha birçok tuhaflık. Bütün bunların üstesinden gelerek yazıyoruz plist, Yükleniyor. Çalışmıyor. İblisin hata ayıklama yöntemini inceliyoruz, hata ayıklıyoruz, orada ne olduğunu anlıyoruz ENV hatta PATH normalini vermedik, tartıştık, getirdik (ekleyerek) /sbin и /usr/local/bin) ve nihayet otomatik başlatma ve kararlı çalışmadan memnunuz.

Nefes ver

Sonuç nedir? Bir haftalık macera, gönülden değer verilen ve gereğini yapan hizmetlerden diz çökmüş bir hayvanat bahçesi. Şüpheli teknik alanlarda biraz bilgi, biraz açık kaynak ve “Ben yaptım!” düşüncesinin yüzündeki gülümseme.

Not: Bu, kapitalistleri boykot etme, maçlardan tasarruf etme veya tam bir kurnazlık çağrısı değil, yalnızca genel olarak beklemediğiniz araştırma ve geliştirme olanaklarının bir göstergesidir.

Kaynak: habr.com

Yorum ekle