ماجراهای خارج از آبی

ماجراهای خارج از آبی

چگونه Spotify می تواند به شما در مطالعه دیمون ها، RFC ها، شبکه ها و ترویج منبع باز کمک کند. یا اگر نتوانید پرداخت کنید، اما واقعاً چیزهای ممتاز می خواهید چه اتفاقی می افتد.

شروع

در روز سوم، مشاهده شد که Spotify در حال نمایش تبلیغات بر اساس کشور آدرس IP است. همچنین اشاره شد که در برخی از کشورها تبلیغات اصلا وارد نمی شد. به عنوان مثال، در جمهوری بلاروس. و سپس یک طرح "درخشان" برای غیرفعال کردن تبلیغات در یک حساب غیر حق بیمه طراحی شد.

کمی در مورد Spotify

به طور کلی، Spotify سیاست عجیبی دارد. برادر ما برای خرید پریمیوم باید کاملاً پیچ خورده باشد: مکان را در پروفایل خود به خارج از کشور تغییر دهید، به دنبال یک کارت هدیه مناسب بگردید که فقط با PayPal قابل پرداخت باشد، که اخیراً عجیب رفتار می کند و یک سری اسناد می خواهد. به طور کلی، این نیز یک ماجراجویی است، اما از نظم متفاوتی. اگرچه اکثر مردم این کار را به خاطر نسخه موبایل انجام می دهند، اما من به آن علاقه ای ندارم. بنابراین، همه موارد زیر فقط در مورد نسخه دسکتاپ کمک خواهد کرد. علاوه بر این، هیچ گسترشی از توابع وجود نخواهد داشت. فقط برخی از موارد اضافی را قطع کنید.

چرا اینقدر پیچیده است؟

و هنگام ثبت اطلاعات socks-proxy در پیکربندی Spotify چنین فکر می کردم. مشکل مشخص شد که احراز هویت در جوراب ها با استفاده از ورود و رمز عبور کار نمی کند. به‌علاوه، توسعه‌دهندگان مرتباً کاری را در اطراف پروکسی انجام می‌دهند: گاهی اجازه می‌دهند، گاهی آن را ممنوع می‌کنند، گاهی اوقات آن را می‌شکنند، که منجر به پانل‌های کامل بحث در خارج از سایت می‌شود.

تصمیم گرفته شد که به عملکردهای ناپایدار تکیه نکنیم و چیزی قابل اعتمادتر و جالب تر پیدا کنیم.

در اینجا خواننده باید بپرسد: چرا نمی گیریم ssh با یک کلید -D و این پایان کار است؟ و در کل حق با او خواهد بود. اما، اولا، این هنوز باید شیطانی شود و با autossh دوست شود تا به اتصالات پاره شده فکر نکنیم. و دوم اینکه: خیلی ساده و خسته کننده است.

به ترتیب

طبق معمول، بیایید از چپ به راست، از بالا به پایین برویم و همه چیزهایی را که برای اجرای ایده "ساده" خود نیاز داریم، شرح دهیم.

ابتدا به یک پروکسی نیاز دارید

و جایگزین های زیادی به طور همزمان وجود دارد:

  • شما فقط می توانید بروید و از لیست های باز پروکسی بگیرید. ارزان (یا بهتر است بگوییم بیهوده)، اما کاملاً غیرقابل اعتماد است و طول عمر چنین پراکسی هایی به صفر می رسد. بنابراین، لازم است یک تجزیه کننده برای لیست های پراکسی پیدا/نوشت کنید، آنها را بر اساس نوع و کشور مورد نظر فیلتر کنید، و سوال جایگزین کردن پراکسی یافت شده در Spotify باز باقی می ماند (خوب، شاید از طریق HTTP_PROXY انتقال دهید و یک بسته بندی سفارشی برای باینری ایجاد کنید تا تمام ترافیک های دیگر به آنجا ارسال نشود).
  • می توانید یک پروکسی مشابه بخرید و خود را از بیشتر مشکلاتی که در بالا توضیح داده شد نجات دهید. اما با قیمت یک پروکسی، می توانید بلافاصله در Spotify پریمیوم خریداری کنید و این برای کار اصلی عملی نیست.
  • مال خودت را بالا ببر همانطور که احتمالا حدس زدید، این انتخاب ماست.

کاملاً تصادفی ممکن است معلوم شود که شما یک دوست با یک سرور در جمهوری بلاروس یا یک کشور کوچک دیگر دارید. باید از این استفاده کنید و پروکسی مورد نظر را روی آن قرار دهید. خبره های خاص می توانند به دوستی با روتر راضی باشند DD-WRT یا نرم افزارهای مشابه اما آنجا خود را دنیای شگفت انگیز و این جهان به وضوح در چارچوب این داستان نمی گنجد.

بنابراین، گزینه های ما: Squid - الهام بخش نیست، و من یک پروکسی HTTP نمی خواهم، در حال حاضر تعداد زیادی از این پروتکل در اطراف وجود دارد. و در منطقه جوراب چیزی معقول نیست جز دانته هنوز تحویل نداده اند بنابراین، بیایید آن را بگیریم.

منتظر راهنمای دانته در مورد نصب و پیکربندی نباشید. او فقط گوگل کردن و مورد توجه خاصی نیست. در پیکربندی حداقل شما نیاز به پرتاب در همه انواع client pass, socks pass، رابط ها را به درستی ثبت کنید و فراموش نکنید که اضافه کنید socksmethod: username. در این فرم برای احراز هویت، logopass از کاربران سیستم گرفته می شود. و بخش مربوط به امنیت: ممنوعیت دسترسی به لوکال هاست، محدود کردن کاربران و غیره - این کاملاً فردی است، بسته به پارانویای شخصی.

یک پروکسی رو به روی شبکه مستقر کنید

نمایشنامه در دو پرده است.

اقدام یک

ما پروکسی را مرتب کردیم، اکنون باید از وب جهانی به آن دسترسی داشته باشیم. اگر دستگاهی با IP سفید در کشور مورد نظر دارید، می توانید با خیال راحت از این نکته رد شوید. ما یکی نداریم (همانطور که در بالا ذکر شد در خانه دوستان میزبان هستیم) و نزدیکترین IP سفید در جایی در آلمان است، بنابراین شبکه ها را مطالعه خواهیم کرد.

بنابراین بله، خواننده با دقت دوباره می پرسد: چرا یک سرویس موجود مانند را نمی پذیرید ngrok یا مشابه؟ و او دوباره حق خواهد داشت. اما این یک سرویس است، دوباره باید شیطان سازی شود، همچنین می تواند هزینه داشته باشد و به طور کلی ورزشی نیست. بنابراین، ما از مواد ضایعاتی دوچرخه ایجاد خواهیم کرد.

وظیفه: یک پروکسی در جایی بسیار پشت NAT وجود دارد، شما باید آن را روی یکی از پورت های VPS که دارای IP سفید است و در لبه دنیا قرار دارد، آویزان کنید.

منطقی است که فرض کنیم این می تواند با ارسال پورت (که از طریق موارد فوق اجرا می شود) حل شود. ssh، یا با ترکیب سخت افزار در یک شبکه مجازی از طریق VPN. با ssh ما می دانیم چگونه کار کنیم، autossh گرفتن خسته کننده است، پس بیایید OpenVPN را بگیریم.

DigitalOcean دارد مانول فوق العاده در مورد این موضوع من چیزی برای اضافه کردن به آن ندارم. و پیکربندی حاصل را می توان به راحتی با کلاینت OpenVPN وصل کرد systemd. فقط آن را (پیکربندی) در آن قرار دهید /etc/openvpn/client/ و فراموش نکنید که پسوند را به تغییر دهید .conf. پس از آن، سرویس را بکشید [email protected]فراموش نکنید که این کار را برای او انجام دهید enable و خوشحالم که همه چیز پرواز کرد.

البته، ما باید هرگونه تغییر مسیر ترافیک به VPN جدید ایجاد شده را غیرفعال کنیم، زیرا نمی‌خواهیم با عبور ترافیک از نیم توپ، سرعت دستگاه مشتری را کاهش دهیم.

و بله، ما باید یک آدرس IP ثابت در سرور VPN برای مشتری خود ثبت کنیم. این کمی بعد در داستان مورد نیاز خواهد بود. برای این کار باید فعال کنید ifconfig-pool-persist، ویرایش کنید ipp.txt، همراه با OpenVPN و فعال کردن client-config-dir، به علاوه پیکربندی مشتری مورد نظر را با افزودن ویرایش کنید. ifconfig-push با ماسک صحیح و آدرس IP مورد نظر.

قانون دو

اکنون ما ماشینی در "شبکه" داریم که رو به اینترنت است و می توان از آن برای اهداف خودخواهانه استفاده کرد. یعنی بخشی از ترافیک را از طریق آن هدایت کنید.

بنابراین، یک کار جدید: باید ترافیک ورودی به یکی از پورت های VPS را با یک IP سفید خاموش کنید تا این ترافیک به شبکه مجازی تازه متصل شده برود و پاسخ از آنجا بازگردد.

راه حل: البته 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

در اینجا ما تمام ترافیک TCP را که به پورت 8080 رابط خارجی می‌آید به ماشینی با IP 10.8.0.2 و همان پورت 8080 هدایت می‌کنیم.

برای کسانی که جزییات کثیف کار را می خواهند netfilter, iptables و به طور کلی مسیریابی، کاملاً لازم است که تامل شود این یا این.

بنابراین، اکنون بسته های ما به زیر شبکه مجازی پرواز می کنند و ... در آنجا می مانند. به طور دقیق تر، پاسخ از پروکسی socks از طریق دروازه پیش فرض روی دستگاه با Dante باز می گردد و گیرنده آن را رها می کند، زیرا در شبکه ها مرسوم نیست که یک درخواست به یک IP ارسال کنید و از دیگری پاسخ دریافت کنید. بنابراین، ما باید به تجسم ادامه دهیم.

بنابراین، اکنون باید تمام بسته ها را از پروکسی به زیرشبکه مجازی به سمت VPS با یک IP سفید هدایت کنید. در اینجا وضعیت کمی بدتر است، زیرا درست است iptables ما به اندازه کافی نخواهیم داشت، زیرا اگر آدرس مقصد را قبل از مسیریابی تصحیح کنیم (PREROUTING، بسته ما به اینترنت پرواز نمی کند و اگر آن را تعمیر نکنیم، بسته به اینترنت می رود 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 نمی داند با آنها چه کند. بنابراین، اگر زحمتی ندارید، می توانید به سادگی تمام ترافیک وارد شده از زیرشبکه مجازی را به اینترنت هدایت کنید:

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 می رسد در منبع-NAT پیچیده می شود و به رابط پیش فرض که به اینترنت تبدیل می شود پرواز می کند. توجه به این نکته مهم است که این مورد فقط در صورتی کار می کند که پورت را به صورت شفاف فوروارد کنیم، یعنی پورت ورودی در VPS با پورت پراکسی ما مطابقت داشته باشد. در غیر این صورت باید کمی بیشتر زجر بکشید.

یک جایی اکنون همه چیز باید شروع به کار کند. و فقط کمی باقی می ماند: فراموش نکنید که مطمئن شوید که همه تنظیمات iptables и route بعد از راه اندازی مجدد ادامه پیدا نکرد. برای iptables فایل های خاصی مانند /etc/iptables/rules.v4(در مورد اوبونتو)، اما برای مسیرها همه چیز کمی پیچیده تر است. آنها را به داخل هل دادم up/down اسکریپت‌های OpenVPN، اگرچه فکر می‌کنم می‌توانستند با معرفت‌تر انجام شوند.

ترافیک برنامه را در پروکسی قرار دهید

بنابراین، ما یک پروکسی با احراز هویت در کشور مورد نظر داریم که از طریق یک آدرس IP ثابت سفید قابل دسترسی است. تنها چیزی که باقی می ماند این است که از آن استفاده کنید و ترافیک را از Spotify به آنجا هدایت کنید. اما یک تفاوت ظریف وجود دارد، همانطور که در بالا ذکر شد، رمز ورود برای پروکسی در Spotify کار نمی کند، بنابراین ما به دنبال چگونگی دور زدن آن خواهیم بود.

برای شروع، بیایید در مورد پروکسی. چیزهای عالی، اما قیمت آن به اندازه یک کشتی فضایی (40 دلار) است. با این پول می توانیم دوباره حق بیمه بخریم و کارمان تمام شود. بنابراین، ما به دنبال آنالوگ های آزادتر و بازتر در مک خواهیم بود (بله، ما می خواهیم در مک به موسیقی گوش دهیم). بیایید یک ابزار کامل را کشف کنیم: پروگزی مک. و ما با خوشحالی می رویم او را بکوبیم.

اما این لذت کوتاه مدت خواهد بود، زیرا مشخص می شود که باید حالت اشکال زدایی و پسوندهای هسته سفارشی را در MacOS فعال کنید، یک پیکربندی ساده را ثبت کنید و درک کنید که این ابزار دقیقاً همان مشکل Spotify را دارد: نمی تواند با استفاده از احراز هویت عبور کند. ورود - رمز عبور در socks-proxy.

جایی در این حوالی وقت آن رسیده است که غصه بخورید و یک مبلغ ممتاز بخرید... اما نه! بیایید بخواهیم رفع شود، منبع باز است! بیایید انجام دهیم بلیط. و در پاسخ، داستانی دلخراش دریافت می کنیم که چگونه تنها نگهدارنده دیگر مک بوک ندارد و به جهنم آن، نه یک تعمیر.

بازم ناراحت میشیم اما پس از آن ما جوانی و C خود را به یاد خواهیم آورد، حالت اشکال زدایی را در دانته روشن می کنیم، صدها کیلوبایت سیاهه ها را حفاری می کنیم، به RFC1927 برای اطلاعات در مورد پروتکل SOCKS5، بیایید به Xcode نگاه کنیم و مشکل را پیدا کنیم. کافی است یک کاراکتر را در لیست کدهای روشی که مشتری برای احراز هویت ارائه می دهد اصلاح کنید و همه چیز مانند ساعت شروع به کار می کند. ما خوشحالیم، باینری انتشار را جمع آوری می کنیم، این کار را می کنیم درخواست کشش و به غروب آفتاب می رویم و به نقطه بعدی می رویم.

آن را خودکار کنید

هنگامی که Proximac کار می کند، باید شیطانی شود و فراموش شود. یک سیستم مقداردهی اولیه وجود دارد که برای این کار مناسب است که در MacOS یافت می شود راه اندازی شد.

ما به سرعت آن را پیدا می کنیم کتابچه راهنمای و ما درک می کنیم که این اصلاً نیست systemd و اینجا تقریباً یک قاشق و xml. بدون تنظیمات فانتزی برای شما، هیچ دستوری مانند status, restart, daemon-reload. فقط نوع هاردکور start-stop, list-grep, unload-load و خیلی چیزهای عجیب دیگر غلبه بر همه اینها می نویسیم plist، بارگذاری. کار نمی کند. ما روش اشکال زدایی شیطان را مطالعه می کنیم، آن را اشکال زدایی می کنیم، متوجه می شویم که چه چیزی وجود دارد ENV حتی PATH ما معمولی را تحویل ندادیم، بحث می کنیم، آن را وارد می کنیم (افزودن /sbin и /usr/local/bin) و در نهایت از راه اندازی خودکار و عملکرد پایدار راضی هستیم.

بازدم

نتیجه چیست؟ یک هفته ماجراجویی، یک باغ وحش زانو زده از خدماتی که برای قلبش عزیز است و آنچه را که لازم است انجام می دهد. کمی دانش در زمینه های فنی مشکوک، کمی منبع باز و لبخند بر لبان شما از فکر "من آن را انجام دادم!"

ص: این فراخوانی برای تحریم سرمایه داران، برای صرفه جویی در کبریت یا حیله گری کامل نیست، بلکه فقط نشانه ای از امکانات تحقیق و توسعه است، جایی که، به طور کلی، شما از آنها انتظار ندارید.

منبع: www.habr.com

اضافه کردن نظر