Авантура из ведра неба

Авантура из ведра неба

Како вам Спотифи може помоћи да проучавате демоне, РФЦ-ове, мреже и промовишете отворени код. Или шта се дешава ако не можете да платите, али заиста желите неке врхунске доброте.

почетак

Трећег дана је примећено да Спотифај приказује рекламе на основу земље ИП адресе. Такође је примећено да у неким земљама оглашавање уопште није увезено. На пример, у Републици Белорусији. А онда је скован „бриљантан“ план да се онемогући оглашавање на не-премиум налогу.

Мало о Спотифају

Уопштено говорећи, Спотифи има чудну политику. Наш брат мора да буде прилично уврнут да би купио премиум: промени локацију на свом профилу у иностранство, потражи одговарајућу поклон картицу која се може платити само преко ПаиПал-а, који се у последње време чудно понаша и тражи гомилу докумената. Генерално, то је такође авантура, али другачијег реда. Иако већина људи то ради због мобилне верзије, мене то не занима. Стога ће све испод помоћи само у случају десктоп верзије. Штавише, неће бити проширења функција. Само одсецам неке од додатних.

Зашто је то тако компликовано?

И ја сам тако мислио када сам регистровао соцкс-проки податке у конфигурацији Спотифаја. Испоставило се да је проблем у томе што аутентификација у чарапама користећи пријаву и лозинку не ради. Осим тога, програмери редовно раде нешто око проксија: понекад дозвољавају, понекад забрањују, понекад га разбијају, што доводи до читавих панела дискусија на ван сајта.

Одлучено је да се не ослањају на нестабилне функције и да се пронађе нешто поузданије и занимљивије.

Негде овде читалац мора да се запита: зашто не узети ssh са кључем -D и то је крај? И, генерално, биће у праву. Али, прво, ово још увек треба демонизовати и спријатељити се са аутоссх-ом, како не би размишљали о покиданим везама. И друго: превише је једноставно и досадно.

У реду

Као и обично, идемо с лева на десно, одозго према доле и опишемо све што нам је потребно за имплементацију наше „једноставне“ идеје.

Прво вам треба прокси

И постоји много алтернатива одједном:

  • можете једноставно отићи и узети са отворених прокси листа. Јефтино (или боље речено за ништа), али апсолутно непоуздано и животни век таквих проксија тежи нули. Због тога би било потребно пронаћи/написати парсер за листе проксија, филтрирати их по жељеном типу и земљи, а питање замене пронађеног проксија у Спотифају остаје отворено (па, можда преко HTTP_PROXY пренесите и креирајте прилагођени омотач за бинарни фајл тако да се сав други саобраћај не шаље тамо).
  • Можете купити сличан прокси и спасити се већине горе описаних проблема. Али по цени проксија, можете одмах купити премиум на Спотифају, а то није практично за првобитни задатак.
  • Подигни своје. Као што сте вероватно претпоставили, ово је наш избор.

Чисто случајно може се испоставити да имате пријатеља са сервером у Републици Белорусији или другој малој земљи. Морате да користите ово и на њему поставите жељени прокси. Посебни познаваоци могу бити задовољни пријатељем са укљученим рутером ДД-ВРТ или сличан софтвер. Али тамо његов диван свет а овај свет се очигледно не уклапа у оквире ове приче.

Дакле, наше опције: Скуид - није инспиративно, и не желим ХТТП прокси, већ постоји превише овог протокола. А у области ЧАРАПА нема ништа разумно осим Данте још нису испоручени. Стога, узмимо.

Не чекајте Дантеов приручник за инсталирање и конфигурисање. Он само гуглање и није од посебног интереса. У минималној конфигурацији морате убацити све врсте client pass, socks pass, исправно региструјте интерфејсе и не заборавите да додате socksmethod: username. У овом облику, за аутентификацију, логопасс ће бити преузет од корисника система. А део о безбедности: забрана приступа локалном хосту, ограничавање корисника итд. - ово је чисто индивидуално, зависно од личне параноје.

Поставите проки окренут према мрежи

Представа је у два чина.

Први чин

Средили смо прокси, сада треба да му приступимо са глобалне мреже. Ако имате машину са белим ИП-ом у жељеној земљи, онда можете безбедно да прескочите ову тачку. Немамо га (ми смо, као што је горе поменуто, хостовани у кућама пријатеља), а најближи бели ИП је негде у Немачкој, па ћемо проучавати мреже.

Дакле, да, пажљив читалац ће поново питати: зашто не узмете постојећу услугу попут нгрок или слично? И опет ће бити у праву. Али ово је услуга, опет је треба демонизовати, може и да кошта и уопште није спортска. Због тога ћемо креирати бицикле од отпадног материјала.

Задатак: постоји проки негде далеко иза НАТ-а, потребно је да га окачите на један од портова ВПС-а који има бели ИП и налази се на ивици света.

Логично је претпоставити да се то може решити било прослеђивањем портова (које се реализује преко горе наведених ssh), или комбиновањем хардвера у виртуелну мрежу преко ВПН-а. ВИТХ ssh знамо како да радимо, autossh Досадно је узимати, па хајде да узмемо ОпенВПН.

ДигиталОцеан има диван манул по овом питању. Немам шта да додам. И резултирајућа конфигурација се може прилично лако повезати са ОпенВПН клијентом и systemd. Само га убаците (конфигурацију). /etc/openvpn/client/ и не заборавите да промените екстензију на .conf. Након тога, повуците услугу [email protected]не заборави да то урадиш за њу enable и радуј се што је све одлетело.

Наравно, морамо да онемогућимо свако преусмеравање саобраћаја на новокреирани ВПН, јер не желимо да смањимо брзину на клијентској машини пропуштањем саобраћаја кроз пола лопте.

И да, морамо да региструјемо статичку ИП адресу на ВПН серверу за нашег клијента. Ово ће бити потребно мало касније у причи. Да бисте то урадили, потребно је да омогућите ifconfig-pool-persist, Уредити ipp.txt, укључен у ОпенВПН и омогући цлиент-цонфиг-дир, плус уредите конфигурацију жељеног клијента додавањем ifconfig-push са исправном маском и жељеном ИП адресом.

Други чин

Сада имамо машину на „мрежи“ која је окренута ка Интернету и може се користити у себичне сврхе. Наиме, преко њега преусмерити део саобраћаја.

Дакле, нови задатак: потребно је да искључите саобраћај који стиже на један од ВПС портова са белим ИП-ом тако да овај саобраћај иде у новоспојену виртуелну мрежу и да се одговор одатле може вратити.

Решење: наравно iptables! Када ћете још имати тако дивну прилику да вежбате са њим?

Потребна конфигурација се може пронаћи прилично брзо, за три сата, стотину псовки и прегршт потрошене нерава, јер је отклањање грешака у мрежама врло специфична процедура.

Прво, морате да омогућите преусмеравање саобраћаја у кернелу. Ова ствар се зове ipv4.ip_forward и омогућен је мало другачије у зависности од ОС-а и менаџера мреже.

Друго, потребно је да изаберете порт на ВПС-у и умотате сав саобраћај који иде ка њему у виртуелну подмрежу. То се може урадити, на пример, овако:

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

Овде преусмеравамо сав ТЦП саобраћај који долази на порт 8080 спољног интерфејса на машину са ИП 10.8.0.2 и истим портом 8080.

За оне који желе прљаве детаље посла netfilter, iptables и рутирање уопште, апсолутно је неопходно размислити ово или ово.

Дакле, сада наши пакети лете до виртуелне подмреже и... остају тамо. Тачније, одговор са соцкс проки-а лети назад кроз подразумевани гатеваи на машини са Дантеом и прималац га испушта, јер у мрежама није уобичајено да се пошаље захтев на једну ИП адресу, а добије одговор од друге. Стога, треба да наставимо са дочаравањем.

Дакле, сада морате да преусмерите све пакете са проксија назад у виртуелну подмрежу ка ВПС-у са белим ИП-ом. Овде је ситуација мало гора, јер је тако 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 (уопштено, број не зависи ни од чега, само смо желели до) и додајте једно правило, према којем сви пакети укључени у ову табелу лете у ВПН подмрежу.

Велики! Сада пакети лете назад ка ВПС-у... и тамо умиру. Зато што ВПС не зна шта да ради са њима. Стога, ако се не трудите, можете једноставно преусмерити сав саобраћај који стиже из виртуелне подмреже назад на Интернет:

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 умотава у соурце-НАТ и лети до подразумеваног интерфејса који је окренут ка Интернету. Важно је напоменути да ће ова ствар функционисати само ако транспарентно проследимо порт, односно долазни порт на ВПС-у одговара порту нашег проксија. У супротном ћете морати још мало да патите.

Негде сада све треба да проради. И само мало остаје: не заборавите да се уверите да су све конфигурације iptables и route није наставио након поновног покретања. За iptables постоје посебне датотеке попут /etc/iptables/rules.v4(у случају Убунтуа), али за руте је све мало компликованије. Угурао сам их up/down ОпенВПН скрипте, мада мислим да су могле да се ураде и пристојније.

Умотајте саобраћај из апликације у прокси

Дакле, имамо прокси са аутентификацијом у жељеној земљи, доступан преко статичке беле ИП адресе. Остаје само да га користите и преусмерите саобраћај са Спотифаја тамо. Али постоји нијанса, као што је горе поменуто, лозинка за пријаву на прокси у Спотифају не ради, па ћемо потражити како да је заобиђемо.

За почетак, да се подсетимо о заступник. Одлична ствар, али кошта колико и звездани брод (40 долара). Са овим новцем можемо поново да купимо премиум и завршимо са тим. Због тога ћемо тражити више бесплатних и отворених аналога на Мац-у (да, желимо да слушамо музику на Мац-у). Хајде да откријемо један цео алат: прокимац. И радо ћемо отићи да га боцкамо.

Али радост ће бити кратког века, јер се испоставило да морате да омогућите режим за отклањање грешака и прилагођене екстензије кернела у МацОС-у, да унесете једноставну конфигурацију и схватите да овај алат има потпуно исти проблем као Спотифи: не може да прође аутентификацију помоћу логин-пассворд на соцкс-проки.

Негде овде је време да се избезумите и купите премиум... али не! Хајде да покушамо да тражимо да се то поправи, то је опен соурце! Хајде да урадимо Улазница. И као одговор добијамо срцепарајућу причу о томе како једини одржавалац више нема МацБоок и дођавола, не поправку.

Опет ћемо бити узнемирени. Али онда ћемо се сетити наше младости и Ц, укључити режим за отклањање грешака у Дантеу, копати кроз стотине килобајта дневника, ићи на РФЦКСНУМКС за информације о СОЦКС5 протоколу, погледајмо Ксцоде и пронађемо проблем. Довољно је исправити један знак у листи кодова метода које клијент нуди за аутентификацију и све почиње да ради као сат. Радујемо се, прикупљамо бинарно издање, то радимо захтев за повлачењем и идемо у залазак сунца и идемо на следећу тачку.

Аутоматизујте га

Када Прокимац проради, треба га демонизовати и заборавити. Постоји један цео систем иницијализације који је погодан за ово, а који се налази у МацОС-у, наиме лаунцхд.

Брзо га нађемо упутство а разумемо да то уопште није systemd а овде је скоро мерица и xml. Нема фенси конфигурација за вас, нема команди попут status, restart, daemon-reload. Само хардкор start-stop, list-grep, unload-load и још много необичности. Превазилазећи све ово пишемо plist, лоадинг. Не ради. Проучавамо метод отклањања грешака демона, отклањамо грешке, разумемо шта је ту ENV чак PATH нисмо испоручили нормалан, ми се свађамо, уносимо га (додајући /sbin и /usr/local/bin) и коначно смо задовољни аутоматским покретањем и стабилним радом.

Издахните

Шта је резултат? Недеља авантуре, клечећи зоолошки врт од сервиса који је срцу драг и ради шта се од њега тражи. Мало знања у сумњивим техничким областима, мало отвореног кода и осмех на лицу од помисли "Успео сам!"

ПС: ово није позив на бојкот капиталиста, на штедњу на шибицама или на тотално лукавство, већ само назнака могућности истраживања и развоја тамо где их, генерално, не очекујете.

Извор: ввв.хабр.цом

Додај коментар