Mavidən çıxan macəra

Mavidən çıxan macəra

Spotify demonları, RFC-ləri, şəbəkələri öyrənməyə və açıq mənbəni təbliğ etməyə necə kömək edə bilər. Və ya ödəyə bilmirsinizsə, amma həqiqətən bəzi mükafatlar istəsəniz nə olar.

Start

Üçüncü gün Spotify-ın IP ünvanının ölkəsi əsasında reklamlar nümayiş etdirdiyi müşahidə edildi. O da qeyd olunub ki, bəzi ölkələrdə reklam ümumiyyətlə idxal olunmayıb. Məsələn, Belarus Respublikasında. Və sonra qeyri-mükafat hesabında reklamı söndürmək üçün "parlaq" bir plan hazırlanmışdır.

Spotify haqqında bir az

Ümumiyyətlə, Spotify-ın qəribə siyasəti var. Qardaşımız premium almaq üçün kifayət qədər əyilməlidir: profilindəki yerini xaricə dəyişdirin, son vaxtlar qəribə davranan və bir çox sənəd istəyən PayPal ilə ödənilə bilən uyğun hədiyyə kartı axtarın. Ümumiyyətlə, bu, həm də bir macəradır, lakin fərqli bir nizamdır. Əksər insanlar bunu mobil versiya üçün etsə də, bu məni maraqlandırmır. Buna görə də, aşağıda göstərilən hər şey yalnız masa üstü versiyası vəziyyətində kömək edəcəkdir. Üstəlik, funksiyaların genişləndirilməsi olmayacaq. Sadəcə bəzi əlavələri kəsin.

Niyə bu qədər mürəkkəbdir?

Spotify konfiqurasiyasında corab-proksi məlumatlarını qeydiyyatdan keçirərkən belə düşündüm. Problem, login və paroldan istifadə edərək corablarda identifikasiyanın işləməməsi oldu. Üstəlik, tərtibatçılar mütəmadi olaraq proksi ətrafında bir şey edirlər: bəzən icazə verir, bəzən qadağan edir, bəzən onu pozur, bu da saytdan kənarda bütün müzakirə panellərinə səbəb olur.

Qeyri-sabit funksiyalara etibar etməmək və daha etibarlı və maraqlı bir şey tapmaq qərara alındı.

Burada bir yerdə oxucu soruşmalıdır: niyə götürmürsən? ssh açarla -D və bunun sonu? Və ümumiyyətlə, o, haqlı olacaq. Ancaq, ilk növbədə, yırtılmış əlaqələr haqqında düşünməmək üçün bunu hələ də şeytanlaşdırmaq və autossh ilə dost etmək lazımdır. İkincisi: çox sadə və darıxdırıcıdır.

Sırayla

Həmişə olduğu kimi, soldan sağa, yuxarıdan aşağıya keçək və “sadə” ideyamızı həyata keçirmək üçün bizə lazım olan hər şeyi təsvir edək.

Əvvəlcə bir proxy lazımdır

Və eyni anda bir çox alternativ var:

  • siz sadəcə gedib açıq proxy siyahılarından götürə bilərsiniz. Ucuz (daha doğrusu heç bir şey üçün), lakin tamamilə etibarsızdır və bu cür etibarnamələrin ömrü sıfıra enir. Buna görə də, proksi siyahıları üçün analizator tapmaq/yazmaq, onları istədiyiniz növ və ölkə üzrə süzgəcdən keçirmək lazımdır və Spotify-da tapılan proksi ilə əvəz edilməsi məsələsi açıq qalır (yaxşı, bəlkə də HTTP_PROXY köçürün və binar üçün xüsusi sarğı yaradın ki, bütün digər trafik oraya göndərilməsin).
  • Bənzər bir proxy satın ala və yuxarıda təsvir olunan problemlərin əksəriyyətindən özünüzü xilas edə bilərsiniz. Ancaq bir proxy qiymətinə dərhal Spotify-da mükafat ala bilərsiniz və bu, orijinal tapşırıq üçün praktik deyil.
  • Özünüzü qaldırın. Yəqin ki, təxmin etdiyiniz kimi, bu bizim seçimimizdir.

Sırf təsadüfən Belarus Respublikasında və ya başqa bir kiçik ölkədə serveri olan bir dostunuz olduğu ortaya çıxa bilər. Bundan istifadə etməli və istədiyiniz proksi-ni üzərinə yaymalısınız. Xüsusi bilicilər marşrutlaşdırıcısı olan bir dostla kifayətlənə bilərlər DD-WRT və ya oxşar proqram təminatı. Amma orada onun gözəl dünya və bu dünya açıq şəkildə bu hekayənin çərçivəsinə sığmır.

Beləliklə, seçimlərimiz: Squid - ruhlandırıcı deyil və mən HTTP proksisini istəmirəm, artıq bu protokolun çoxu var. Corablar sahəsində isə başqa mənalı heç nə yoxdur Dante hələ çatdırılmayıb. Ona görə də götürək.

Dantenin quraşdırma və konfiqurasiya haqqında təlimatını gözləməyin. O sadəcə googling və xüsusi maraq kəsb etmir. Minimum konfiqurasiyada hər cür atmaq lazımdır client pass, socks pass, interfeysləri düzgün qeyd edin və əlavə etməyi unutmayın socksmethod: username. Bu formada autentifikasiya üçün sistem istifadəçilərindən loqopass alınacaq. Və təhlükəsizliklə bağlı hissə: localhost-a girişin qadağan edilməsi, istifadəçilərin məhdudlaşdırılması və s. - bu, şəxsi paranoyyadan asılı olaraq sırf fərdidir.

Şəbəkəyə baxan bir proxy yerləşdirin

Tamaşa iki pərdədən ibarətdir.

Bir hərəkət

Proksini sıraladıq, indi ona qlobal internetdən daxil olmalıyıq. İstədiyiniz ölkədə ağ IP-yə malik bir maşınınız varsa, bu nöqtəni etibarlı şəkildə atlaya bilərsiniz. Birimiz yoxdur (yuxarıda qeyd edildiyi kimi, dostların evində yerləşirik) və ən yaxın ağ IP Almaniyanın bir yerindədir, ona görə də şəbəkələri öyrənəcəyik.

Bəli, diqqətli oxucu yenidən soruşacaq: niyə kimi mövcud xidmətdən istifadə etmirsiniz? ngrok yoxsa buna bənzər? Və yenə haqlı olacaq. Ancaq bu bir xidmətdir, onu yenidən şeytanlaşdırmaq lazımdır, bu da pula başa gələ bilər və ümumiyyətlə idman deyil. Ona görə də biz hurda materiallardan velosipedlər yaradacağıq.

Tapşırıq: NAT-dan uzaq bir yerdə bir proxy var, onu ağ IP-yə malik və dünyanın kənarında yerləşən VPS portlarından birinə asmaq lazımdır.

Bunun ya port yönləndirilməsi ilə həll oluna biləcəyini güman etmək məntiqlidir (bu, yuxarıda qeyd olunanlar vasitəsilə həyata keçirilir. ssh) və ya avadanlığı VPN vasitəsilə virtual şəbəkəyə birləşdirərək. İLƏ ssh necə işləməyi bilirik, autossh Qəbul etmək darıxdırıcıdır, ona görə də OpenVPN-i götürək.

DigitalOcean var gözəl manul bu mövzuda. Mənim ona əlavə edəcəyim heç nə yoxdur. Və ortaya çıxan konfiqurasiya OpenVPN müştərisi ilə olduqca asanlıqla əlaqələndirilə bilər və systemd. Sadəcə onu (konfiqurasiya) daxil edin /etc/openvpn/client/ və uzantısını dəyişdirməyi unutmayın .conf. Bundan sonra xidməti çəkin [email protected]onun üçün bunu etməyi unutmayın enable və hər şeyin uçduğuna sevin.

Əlbəttə ki, yeni yaradılmış VPN-ə trafikin hər hansı yönləndirilməsini deaktiv etməliyik, çünki trafiki yarım topdan keçirərək müştəri maşınında sürəti azaltmaq istəmirik.

Bəli, müştərimiz üçün VPN serverində statik IP ünvanını qeyd etməliyik. Bu hekayədə bir az sonra lazım olacaq. Bunu etmək üçün aktivləşdirməlisiniz ifconfig-pool-persist, redaktə edin ipp.txt, OpenVPN-ə daxildir və müştəri konfiqurasiyasını aktivləşdirin, əlavə olaraq istədiyiniz müştərinin konfiqurasiyasını redaktə edin ifconfig-push düzgün maska ​​və istədiyiniz IP ünvanı ilə.

İkinci hərəkət

İndi bizim “şəbəkə”də İnternetlə üzbəüz olan və eqoist məqsədlər üçün istifadə edilə bilən bir maşın var. Yəni trafikin bir hissəsini onun vasitəsilə yönləndirin.

Beləliklə, yeni bir vəzifə: ağ IP ilə VPS portlarından birinə gələn trafiki söndürməlisiniz ki, bu trafik yeni qoşulmuş virtual şəbəkəyə getsin və cavab oradan qayıda bilsin.

Həll yolu: əlbəttə iptables! Onunla məşq etmək üçün başqa nə vaxt belə gözəl fürsətiniz olacaq?

Tələb olunan konfiqurasiya olduqca tez tapıla bilər, üç saat, yüz söyüş və bir ovuc əsəb, çünki sazlama şəbəkələri çox xüsusi bir prosedurdur.

Birincisi, nüvədə trafikin yönləndirilməsini aktivləşdirməlisiniz. Bu şey deyilir ipv4.ip_forward və OS və şəbəkə menecerindən asılı olaraq bir qədər fərqli şəkildə aktivləşdirilir.

İkincisi, VPS-də bir port seçmək və ona gedən bütün trafiki virtual alt şəbəkəyə yığmaq lazımdır. Bu, məsələn, belə edilə bilər:

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

Burada biz xarici interfeysin 8080 portuna gələn bütün TCP trafikini IP 10.8.0.2 və eyni port 8080 olan maşına yönləndiririk.

İşin çirkli detallarını istəyənlər üçün netfilter, iptables və ümumiyyətlə marşrutlaşdırma haqqında düşünmək mütləq lazımdır bu və ya bu.

Beləliklə, indi paketlərimiz virtual alt şəbəkəyə uçur və... orada qalırlar. Daha doğrusu, proksi corabdan gələn cavab Dante ilə maşındakı standart şluz vasitəsilə geri uçur və alıcı onu atır, çünki şəbəkələrdə bir IP-yə sorğu göndərmək və digərindən cavab almaq adət deyil. Ona görə də biz sehrbazlığa davam etməliyik.

Beləliklə, indi bütün paketləri proksidən virtual alt şəbəkəyə ağ IP ilə VPS-ə yönləndirməlisiniz. Burada vəziyyət bir az daha pisdir, çünki sadəcə olaraq iptables bizdə kifayət etməyəcəyik, çünki marşrutlaşdırmadan əvvəl təyinat ünvanını düzəltsək (PREROUTING), onda paketimiz İnternetə uçmayacaq və onu düzəltməsək, paket gedəcək default gateway. Beləliklə, aşağıdakıları etməlisiniz: zənciri xatırlayın mangle, paketləri qeyd etmək üçün iptables və onları getməli olduqları yerə göndərəcək xüsusi marşrutlaşdırma cədvəlinə sarın.

Daha tez deyildi:

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

Gedən trafiki götürürük, proksinin oturduğu limandan uçan hər şeyi qeyd edirik (bizim vəziyyətimizdə 8080), bütün qeyd olunan trafiki 80 nömrəsi ilə marşrut cədvəlinə yönləndiririk (ümumiyyətlə, nömrə heç nədən asılı deyil, sadəcə istədik. to) və bir qayda əlavə edin , bu cədvələ daxil olan bütün paketlər VPN alt şəbəkəsinə uçur.

Əla! İndi paketlər VPS-ə doğru uçur... və orada ölür. Çünki VPS onlarla nə edəcəyini bilmir. Buna görə də, narahat olmasanız, sadəcə olaraq virtual alt şəbəkədən gələn bütün trafiki yenidən İnternetə yönləndirə bilərsiniz:

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 şəbəkəsindən 255.255.255.000 maskası ilə gələn hər şey mənbə-NAT-a bükülür və İnternetə çevrilən standart interfeysə uçur. Qeyd etmək lazımdır ki, bu şey yalnız portu şəffaf şəkildə yönləndirsək, yəni VPS-də daxil olan port proksi portumuza uyğun gələrsə işləyəcək. Əks təqdirdə bir az daha əziyyət çəkməli olacaqsınız.

Haradasa indi hər şey işə başlamalıdır. Və yalnız bir az qalır: bütün konfiqurasiyaların olduğundan əmin olmağı unutmayın iptables и route yenidən başladıqdan sonra davam etmədi. üçün iptables kimi xüsusi fayllar var /etc/iptables/rules.v4(Ubuntu vəziyyətində), lakin marşrutlar üçün hər şey bir az daha mürəkkəbdir. Mən onları içəri itələdim up/down OpenVPN skriptləri, baxmayaraq ki, düşünürəm ki, onlar daha layiqli edilə bilərdi.

Tətbiqdən gələn trafiki proksiyə sarın

Beləliklə, statik ağ IP ünvanı vasitəsilə əldə edilə bilən, istədiyiniz ölkədə identifikasiyası olan bir proxy-miz var. Qalan yalnız ondan istifadə etmək və Spotify-dən trafiki oraya yönləndirməkdir. Ancaq bir nüans var, yuxarıda qeyd edildiyi kimi, Spotify-da proksi üçün giriş-parol işləmir, ona görə də onun ətrafından necə çıxacağımızı axtaracağıq.

Başlamaq üçün, haqqında xatırlayaq proxy. Əla şeylər, lakin bir ulduz gəmisi qədər baha başa gəlir ($40). Bu pulla biz yenidən mükafat ala bilərik və bununla da məşğul ola bilərik. Buna görə də, biz Mac-da daha pulsuz və açıq analoqlar axtaracağıq (bəli, biz Mac-da musiqi dinləmək istəyirik). Bütün bir alət kəşf edək: proksimak. Və biz məmnuniyyətlə gedəcəyik.

Ancaq sevinc qısa ömürlü olacaq, çünki MacOS-da sazlama rejimini və xüsusi kernel genişləndirmələrini aktivləşdirməli, sadə konfiqurasiya faylı verməli və bu alətin Spotify ilə eyni problemi olduğunu başa düşməlisiniz: o, identifikasiyadan istifadə edə bilməz. corab-proxy-də giriş-parol.

Burada hardasa qəzəblənmək və mükafat almaq vaxtıdır... amma yox! Gəlin bunun düzəldilməsini xahiş etməyə çalışaq, açıq mənbədir! edək bilet. Cavab olaraq, yeganə texniki qulluqçunun artıq MacBook-a sahib olmadığı və onunla cəhənnəmə getməsi barədə ürəkaçan hekayə alırıq, nəinki düzəliş.

Yenə əsəbiləşəcəyik. Ancaq sonra gəncliyimizi və C-ni xatırlayacağıq, Dante-də debug rejimini yandıracağıq, yüzlərlə kilobayt logları qazacağıq, gedin RFC1927 SOCKS5 protokolu haqqında məlumat üçün Xcode-a baxaq və problemi tapaq. Müştərinin autentifikasiya üçün təklif etdiyi metod kodları siyahısında bir simvolu düzəltmək kifayətdir və hər şey saat mexanizmi kimi işləməyə başlayır. Biz sevinirik, buraxılış binarını yığırıq, edirik çəkmə tələbi və biz gün batımına girib növbəti nöqtəyə keçirik.

Onu avtomatlaşdırın

Proximac işlədikdən sonra onu şeytanlaşdırmaq və unutmaq lazımdır. Bunun üçün uyğun olan, MacOS-da olan bir bütöv başlatma sistemi var, yəni işə salındı.

Tez tapırıq təlimat və bunun heç də olmadığını başa düşürük systemd və burada demək olar ki, bir çömçə və xml. Sizin üçün heç bir dəbdəbəli konfiqurasiya, kimi əmrlər yoxdur status, restart, daemon-reload. Yalnız sərt tip start-stop, list-grep, unload-load və daha çox qəribəliklər. Bütün bunları aşaraq yazırıq plist, yüklənir. İşləmir. Biz cini aradan qaldırmaq üsulunu öyrənirik, onu düzəldirik, orada nə olduğunu başa düşürük ENV hətta PATH normalı çatdırmadıq, mübahisə edirik, gətiririk (əlavə edir /sbin и /usr/local/bin) və nəhayət, avtostart və sabit işləmədən məmnunuq.

Nəfəs verin

Nəticə nədir? Bir həftə macəra, ürək üçün əziz olan və ondan tələb olunanı yerinə yetirən xidmətlərdən diz çökmüş zoopark. Şübhəli texniki sahələrdə bir az bilik, bir az açıq mənbə və “Mən bunu etdim!” düşüncəsindən üzünüzdə təbəssüm.

PS: bu, kapitalistləri boykot etməyə, kibritlərə qənaət etməyə və ya tam hiyləgərliyə çağırış deyil, sadəcə olaraq, ümumiyyətlə, gözləmədiyiniz tədqiqat və inkişaf imkanlarının göstəricisidir.

Mənbə: www.habr.com

Добавить комментарий