Petualangan metu saka biru

Petualangan metu saka biru

Kepiye Spotify bisa mbantu sampeyan sinau daemon, RFC, jaringan lan promosi sumber terbuka. Utawa apa mengkono yen sampeyan ora bisa mbayar, nanging sampeyan pengin tenan sawetara barang premium.

Начало

Ing dina katelu, diweruhi manawa Spotify nampilake pariwara adhedhasar negara alamat IP kasebut. Uga dicathet yen ing sawetara negara iklan ora diimpor. Contone, ing Republik Belarus. Lan banjur rencana "sarwa" ditetepake kanggo mateni pariwara ing akun non-premium.

A sethitik babagan Spotify

Umumé, Spotify duwe kabijakan sing aneh. Sadulur kita kudu cukup bengkong supaya bisa tuku premium: ngganti lokasi ing profil menyang jaban rangkah, goleki kertu hadiah sing cocog sing mung bisa dibayar nganggo PayPal, sing akhir-akhir iki tumindak aneh lan pengin akeh dokumen. Umumé, iki uga petualangan, nanging kanthi urutan sing beda. Senajan akeh wong nindakake iki kanggo versi seluler, Aku ora kasengsem ing. Mulane, kabeh ing ngisor iki mung bakal mbantu ing kasus versi desktop. Kajaba iku, ora bakal ana ekspansi fungsi. Mung ngethok sawetara ekstra.

Kok dadi rumit?

Lan aku panginten nalika ndhaptar data kaos kaki-proksi ing konfigurasi Spotify. Masalah kasebut yaiku otentikasi ing kaos kaki nggunakake login lan sandhi ora bisa digunakake. Kajaba iku, pangembang kanthi rutin nindakake apa wae ing babagan proxy: ngidini, banjur nglarang, utawa nglanggar, sing nyebabake kabeh panel diskusi ing situs web.

Diputusake supaya ora ngandelake fungsi sing ora stabil lan golek sing luwih dipercaya lan menarik.

Nang endi wae kene maca kudu takon: kok ora njupuk ssh karo kunci -D lan iku pungkasan? Lan, ing umum, dheweke bakal bener. Nanging, sepisanan, iki isih kudu demonized lan nggawe kanca karo autossh, supaya ora kanggo mikir bab sambungan ambruk. Lan kapindho: iku banget prasaja lan mboseni.

Supados

Kaya biasane, ayo pindhah saka kiwa menyang tengen, ndhuwur mudhun lan njlentrehake kabeh sing dibutuhake kanggo ngetrapake ide "prasaja".

Pisanan sampeyan butuh proxy

Lan ana akeh alternatif sekaligus:

  • sampeyan mung bisa pindhah lan njupuk saka dhaptar proxy mbukak. Murah (utawa ora ana apa-apa), nanging pancen ora bisa dipercaya lan umur proksi kasebut cenderung nol. Mulane, perlu kanggo nemokake / nulis parser kanggo dhaptar proxy, nyaring miturut jinis lan negara sing dikarepake, lan pitakonan ngganti proxy sing ditemokake ing Spotify tetep mbukak (uga, bisa uga liwat HTTP_PROXY nransfer lan nggawe bungkus khusus kanggo binar supaya kabeh lalu lintas liyane ora dikirim ing kana).
  • Sampeyan bisa tuku proxy sing padha lan nylametake dhewe saka akeh masalah sing diterangake ing ndhuwur. Nanging kanthi rega proxy, sampeyan bisa langsung tuku premium ing Spotify, lan iki ora praktis kanggo tugas asli.
  • Angkat sampeyan. Kaya sing sampeyan duga, iki pilihan kita.

Mesthi wae, sampeyan bisa uga duwe kanca karo server ing Republik Belarus utawa negara cilik liyane. Sampeyan kudu nggunakake iki lan muter metu proxy sing dikarepake ing. Connoisseurs khusus bisa isi karo kanca karo router ing DD-WRT utawa piranti lunak sing padha. Nanging ana kang donya apik banget lan donya iki cetha ora pas karo framework saka crita iki.

Dadi, pilihan kita: Cumi - ora menehi inspirasi, lan aku ora pengin proxy HTTP, wis akeh banget protokol iki. Lan ing wilayah SOCKS ora ana sing masuk akal kajaba Dante durung dikirim. Mulane, ayo padha njupuk.

Aja ngenteni manual Dante babagan nginstal lan konfigurasi. Dheweke mung googling lan ora kapentingan tartamtu. Ing konfigurasi minimal sampeyan kudu uncalan ing kabeh limo client pass, socks pass, ndhaftar antarmuka kanthi bener lan aja lali nambah socksmethod: username. Ing formulir iki, kanggo otentikasi, logopass bakal dijupuk saka pangguna sistem. Lan bagean babagan keamanan: nglarang akses menyang localhost, mbatesi pangguna, lan liya-liyane - iki murni individu, gumantung saka paranoia pribadi.

Pasang proxy madhep jaringan

Lakon ana rong babak.

Tumindak siji

Kita wis ngurutake proxy, saiki kita kudu ngakses saka web global. Yen sampeyan duwe mesin kanthi IP putih ing negara sing dikarepake, mula sampeyan bisa ngliwati titik iki kanthi aman. Kita ora duwe (kita, kaya kasebut ing ndhuwur, dadi tuan rumah ing omah kanca) lan IP putih sing paling cedhak ana ing ngendi wae ing Jerman, mula kita bakal sinau jaringan.

Dadi ya, maca sing ati-ati bakal takon maneh: kenapa sampeyan ora njupuk layanan sing wis ana ngrok utawa padha? Lan dheweke bakal bener maneh. Nanging iki layanan, maneh kudu demonized, uga bisa biaya dhuwit lan umume ora olahraga. Mula, kita bakal nggawe sepeda saka bahan kethokan.

Tugas: ana proxy nang endi wae adoh konco NAT, sampeyan kudu nyumerepi ing salah siji saka port VPS sing duwe IP putih lan dumunung ing pojok donya.

Iku logis kanggo nganggep yen iki bisa ditanggulangi kanthi port forwarding (sing dileksanakake liwat sing kasebut ing ndhuwur. ssh), utawa kanthi nggabungake hardware menyang jaringan virtual liwat VPN. KARO ssh kita ngerti carane bisa, autossh Bosen kanggo njupuk, mula ayo njupuk OpenVPN.

DigitalOcean wis manul apik tenan ing prakara iki. Aku ora duwe apa-apa kanggo nambah. Lan config asil bisa cukup gampang disambungake karo klien OpenVPN lan systemd. Cukup sijine (config) ing /etc/openvpn/client/ lan aja lali kanggo ngganti extension kanggo .conf. Sawise iku, tarik layanan [email protected]aja lali nindakake kanggo dheweke enable lan bungah-bungah manawa kabeh padha mabur.

Mesthi, kita kudu mateni pangalihan lalu lintas menyang VPN sing mentas digawe, amarga kita ora pengin nyuda kacepetan ing mesin klien kanthi ngliwati lalu lintas liwat setengah bal.

Lan ya, kita kudu ndhaptar alamat IP statis ing server VPN kanggo klien kita. Iki bakal dibutuhake sethitik mengko ing crita. Kanggo nindakake iki, sampeyan kudu ngaktifake ifconfig-pool-persist, nyunting ipp.txt, klebu karo OpenVPN lan ngaktifake client-config-dir, plus edit config saka klien sing dikarepake kanthi nambah ifconfig-push nganggo topeng sing bener lan alamat IP sing dikarepake.

Tumindak loro

Saiki kita duwe mesin ing "jaringan" sing ngadhepi Internet lan bisa digunakake kanggo tujuan egois. Yaiku, pangalihan bagean lalu lintas liwat.

Dadi, tugas anyar: sampeyan kudu mateni lalu lintas sing teka ing salah sawijining port VPS kanthi IP putih supaya lalu lintas iki menyang jaringan virtual sing mentas disambungake lan respon bisa bali saka kono.

Solusi: mesthi iptables! Kapan maneh sampeyan bakal duwe kesempatan sing apik kanggo latihan karo dheweke?

Konfigurasi sing dibutuhake bisa ditemokake kanthi cepet, sajrone telung jam, satus tembung sumpah lan sawetara syaraf sing boros, amarga jaringan debugging minangka prosedur sing spesifik.

Pisanan, sampeyan kudu ngaktifake pangalihan lalu lintas ing kernel. Bab iki diarani ipv4.ip_forward lan diaktifake rada beda gumantung ing OS lan manager jaringan.

Kapindho, sampeyan kudu milih port ing VPS lan mbungkus kabeh lalu lintas menyang subnet virtual. Iki bisa ditindakake, contone, kaya iki:

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

Ing kene kita pangalihan kabeh lalu lintas TCP menyang port 8080 antarmuka eksternal menyang mesin kanthi IP 10.8.0.2 lan port 8080 sing padha.

Kanggo sing pengin rincian reged proyek netfilter, iptables lan nuntun ing umum, iku pancen perlu kanggo contemplate iku utawa iku.

Dadi, saiki paket kita mabur menyang subnet virtual lan ... tetep ana. Luwih tepat, respon saka proxy kaos kaki bali liwat gateway standar ing mesin karo Dante lan panampa nyelehake, amarga ing jaringan ora umum ngirim panjalukan menyang siji IP lan nampa respon saka liyane. Mulane, kita kudu terus conjure.

Dadi, saiki sampeyan kudu ngarahake kabeh paket saka proxy bali menyang subnet virtual menyang VPS kanthi IP putih. Ing kene kahanan luwih elek, amarga mung iptables kita ora bakal cukup, amarga yen kita mbenerake alamat tujuan sadurunge nuntun (PREROUTING), banjur paket kita ora bakal mabur menyang Internet, lan yen kita ora ndandani iku, paket bakal pindhah menyang default gateway. Dadi, sampeyan kudu nindakake ing ngisor iki: elinga rantai kasebut mangle, kanggo menehi tandha paket liwat iptables lan Lebokake ing meja nuntun adat sing bakal ngirim menyang ngendi padha arep.

Ora let suwe ngandika saka rampung:

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

Kita njupuk lalu lintas metu, tandhani kabeh sing mabur saka port ing ngendi proxy lenggah (8080 ing kasus kita), pangalihan kabeh lalu lintas sing ditandhani menyang meja routing kanthi nomer 80 (umum, nomer kasebut ora gumantung apa-apa, kita mung pengin. kanggo) lan nambah aturan siji , miturut kang kabeh paket klebu ing meja iki mabur menyang subnet VPN.

apik tenan! Saiki paket mabur bali menyang VPS ... lan mati ana. Amarga VPS ora ngerti apa sing kudu ditindakake. Mulane, yen sampeyan ora keganggu, sampeyan mung bisa ngarahake kabeh lalu lintas sing teka saka subnet virtual bali menyang Internet:

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

Ing kene, kabeh sing teka saka subnet 10.8.0.0 kanthi topeng 255.255.255.000 dibungkus sumber-NAT lan mabur menyang antarmuka standar, sing diuripake menyang Internet. Wigati dicathet yen bab iki mung bakal bisa digunakake yen kita nerusake port kanthi transparan, yaiku, port mlebu ing VPS cocog karo port proxy kita. Yen ora, sampeyan kudu nandhang sangsara luwih sithik.

Nang endi wae saiki kabeh kudu diwiwiti. Lan mung sethitik tetep: aja lali kanggo mesthekake yen kabeh configs iptables и route ora diterusake sawise miwiti maneh. Kanggo iptables ana file khusus kaya /etc/iptables/rules.v4(ing cilik saka Ubuntu), nanging kanggo rute kabeh iku sethitik liyane rumit. Aku di-push menyang up/down Skrip OpenVPN, sanajan aku rumangsa bisa ditindakake kanthi luwih sopan.

Bungkus lalu lintas saka aplikasi ing proxy

Dadi, kita duwe proxy kanthi otentikasi ing negara sing dikarepake, bisa diakses liwat alamat IP putih statis. Kabeh sing isih ana yaiku nggunakake lan ngarahake lalu lintas saka Spotify ing kana. Nanging ana nuansa, kaya kasebut ing ndhuwur, login-sandi kanggo proxy ing Spotify ora bisa, supaya kita bakal katon kanggo carane njaluk watara.

Kanggo miwiti, ayo ngelingi babagan proxy. Barang sing apik banget, nanging regane kaya starship ($ 40). Kanthi dhuwit iki kita bisa maneh tuku premium lan rampung karo. Mulane, kita bakal nggoleki analog sing luwih gratis lan mbukak ing Mac (ya, kita pengin ngrungokake musik ing Mac). Ayo goleki siji alat lengkap: proksimak. Lan kita bakal seneng-seneng go poke wong.

Nanging kabungahan bakal sedhela, amarga sampeyan kudu ngaktifake mode debug lan ekstensi kernel khusus ing MacOS, ngajukake konfigurasi sing gampang lan ngerti manawa alat iki duwe masalah sing padha karo Spotify: ora bisa ngliwati otentikasi nggunakake login-sandi ing socks-proxy.

Nang endi wae watara kene iku wektu kanggo freak metu lan tuku premium ... nanging ora! Coba njaluk didandani, iku open source! Ayo padha nindakake tiket. Lan kanggo nanggepi, kita entuk crita sing nyenengake babagan mung siji-sijine sing ora duwe MacBook maneh, lan ora ana sing ndandani.

Kita bakal kesel maneh. Nanging banjur kita bakal ngelingi muda kita lan C, nguripake mode debug ing Dante, digali liwat atusan kilobyte log, pindhah menyang RFC1927 kanggo informasi bab protokol SOCKS5, ayo kang katon ing Xcode lan nemokake masalah. Cukup kanggo mbenerake siji karakter ing dhaptar kode metode sing ditawakake klien kanggo otentikasi lan kabeh wiwit kerja kaya jam. Kita bungah, kita ngumpulake binar release, kita nindakake panjaluk narik lan kita menyang sunset lan pindhah menyang titik sabanjuré.

Otomatis

Sawise Proximac bisa digunakake, iku perlu kanggo demonized lan lali bab. Ana siji sistem initialization kabeh sing cocok kanggo iki, kang ditemokaké ing MacOS, yaiku diluncurake.

Kita nemokake kanthi cepet manual lan kita ngerti yen iki ora kabeh systemd lan kene iku meh scoop lan xml. Ora ana konfigurasi sing apik kanggo sampeyan, ora ana prentah kaya status, restart, daemon-reload. Mung jinis hardcore start-stop, list-grep, unload-load lan akeh keanehan liyane. Ngatasi kabeh iki kita nulis plist, loading. Ora bisa. Kita sinau cara debugging setan, debug, ngerti apa sing ana ENV даже PATH kita ora ngirim sing normal, kita mbantah, kita nggawa (nambah /sbin и /usr/local/bin) lan pungkasane kita seneng karo autostart lan operasi stabil.

Ambegan

Apa asile? A minggu ngulandara, zoo kneeling saka layanan sing dear kanggo jantung lan nindakake apa sing dibutuhake. Kawruh cilik ing wilayah teknis sing ragu-ragu, rada mbukak sumber lan eseman saka pikirane "Aku nindakake!"

PS: iki dudu telpon kanggo boikot kapitalis, kanggo nyimpen ing pertandhingan utawa kanggo total licik, nanging mung pratondo saka kemungkinan riset lan pangembangan ngendi, ing umum, sampeyan ora nyana.

Source: www.habr.com

Add a comment