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

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

Како Spotify може да ви помогне да ги проучувате демони, RFC, мрежи и да промовирате отворен код. Или што се случува ако не можете да платите, но навистина сакате некои премиум добрите.

почеток

Третиот ден беше забележано дека Spotify прикажува реклами врз основа на земјата на IP адресата. Беше забележано и дека во некои земји рекламирањето воопшто не беше увезено. На пример, во Република Белорусија. И тогаш беше изведен „брилијантен“ план за оневозможување на рекламирањето на не-премиум сметка.

Малку за Spotify

Општо земено, Spotify има чудна политика. Нашиот брат мора да биде прилично извртен за да купи премиум: сменете ја локацијата на неговиот профил во странство, барајте соодветна картичка за подарок што може да се плати само со PayPal, кој се однесува чудно во последно време и сака куп документи. Во принцип, тоа е исто така авантура, но од различен редослед. Иако повеќето луѓе го прават тоа заради мобилната верзија, мене не ме интересира. Затоа, сè подолу ќе помогне само во случајот со десктоп верзијата. Покрај тоа, нема да има проширување на функциите. Само отсечете некои од дополнителните.

Зошто е толку комплицирано?

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

Одлучено е да не се потпираме на нестабилни функции и да се најде нешто посигурно и поинтересно.

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

Во ред

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

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

И има многу алтернативи одеднаш:

  • можете само да отидете и да земете од отворените списоци на прокси. Евтини (или подобро за ништо), но апсолутно несигурни и животниот век на таквите прокси се стреми кон нула. Затоа, би било неопходно да се најде/напише парсер за списоци со прокси, да се филтрира по саканиот тип и земја, а прашањето за замена на пронајдениот прокси во Spotify останува отворено (добро, можеби преку HTTP_PROXY префрлете и креирајте прилагодена обвивка за бинарното, така што целиот друг сообраќај не се испраќа таму).
  • Можете да купите сличен прокси и да се спасите од повеќето проблеми опишани погоре. Но, по цена на прокси, можете веднаш да купите премиум на Spotify, и тоа не е практично за оригиналната задача.
  • Подигнете го вашето. Како што веројатно претпоставувате, ова е нашиот избор.

Чисто случајно може да испадне дека имате пријател со сервер во Република Белорусија или друга мала земја. Треба да го користите ова и да го поставите саканиот прокси на него. Специјалните познавачи можат да бидат задоволни со пријател со вклучен рутер DD-WRT или сличен софтвер. Но, таму неговата прекрасен свет и овој свет очигледно не се вклопува во рамката на оваа приказна.

Значи, нашите опции: Squid - не инспиративна, и не сакам HTTP прокси, веќе има премногу од овој протокол наоколу. И во областа на ЧОРАПИ нема ништо разумно освен Данте уште не се испорачани. Затоа, да го земеме.

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

Распоредете прокси свртен кон мрежата

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

Акт прв

Го средивме проксито, сега треба да му пристапиме од глобалната мрежа. Ако имате машина со бела IP адреса во саканата земја, тогаш можете безбедно да ја прескокнете оваа точка. Ние немаме (ние, како што споменавме погоре, сме хостирани во куќите на пријателите) и најблиската бела IP адреса е некаде во Германија, па ќе ги проучуваме мрежите.

Така да, внимателниот читател повторно ќе праша: зошто не земате постоечка услуга како нгрок или слично? И пак ќе биде во право. Но, ова е услуга, повторно треба да се демонизира, може да чини и воопшто не е спортска. Затоа, ќе создадеме велосипеди од отпадни материјали.

Задача: има прокси некаде далеку зад 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 и овозможете клиент-конфиг-дир, плус уредете ја конфигурацијата на саканиот клиент со додавање 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 и насочувањето воопшто, апсолутно е неопходно да се размислува овој или овој.

Така, сега нашите пакети летаат до виртуелната подмрежа и... остануваат таму. Поточно, одговорот од проксито за чорапи се враќа низ стандардната порта на машината со Данте и примачот го испушта, бидејќи во мрежите не е вообичаено да се испраќа барање до една 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(во случајот со Ubuntu), но за рутите сè е малку покомплицирано. Ги турнав внатре up/down OpenVPN скрипти, иако мислам дека можеа да се направат попристојно.

Завиткајте го сообраќајот од апликацијата во прокси

Значи, имаме прокси со автентикација во саканата земја, достапно преку статична бела IP адреса. Останува само да го искористите и да го пренасочите сообраќајот од Spotify таму. Но, постои една нијанса, како што споменавме погоре, лозинката за најава за прокси во Spotify не работи, па ќе бараме како да ја заобиколиме.

За почеток, да се потсетиме на полномошник. Одлични работи, но чини колку еден ѕвезден брод (40 долари). Со овие пари повторно можеме да купиме премија и да завршиме со тоа. Затоа, ќе бараме повеќе слободни и отворени аналози на Mac (да, сакаме да слушаме музика на Mac). Ајде да откриеме една цела алатка: проксимак. И ние со задоволство ќе одиме да го боцкаме.

Но, радоста ќе биде краткотрајна, бидејќи се испостави дека треба да го овозможите режимот за отстранување грешки и прилагодените екстензии на јадрото во MacOS, да поднесете едноставна конфигурација и да разберете дека оваа алатка го има истиот проблем како Spotify: не може да помине автентикација со помош на најава-лозинка на чорапи-прокси.

Некаде овде, време е да се налутиме и да купиме премиум... но не! Ајде да се обидеме да побараме да се поправи, тоа е со отворен код! Ајде билет. И како одговор добиваме потресна приказна за тоа како единствениот одржувач повеќе нема MacBook и по ѓаволите, а не поправка.

Пак ќе се нервираме. Но, тогаш ќе се потсетиме на нашата младост и C, ќе го вклучиме режимот за отстранување грешки во Данте, ќе копаме низ стотици килобајти трупци, ќе одиме на RFC1927 за информации за протоколот SOCKS5, да го погледнеме Xcode и да го најдеме проблемот. Доволно е да се коригира еден знак во списокот со кодови на методи што клиентот ги нуди за автентикација и сè почнува да работи како часовник. Се радуваме, го собираме бинарното ослободување, го правиме барање за повлекување и одиме на зајдисонце и одиме на следната точка.

Автоматизирај го

Откако Проксимак ќе проработи, треба да се демонизира и да се заборави. Постои еден цел систем за иницијализација кој е погоден за ова, кој се наоѓа во MacOS, имено лансиран.

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

Издишува

Каков е резултатот? Недела на авантура, клечена зоолошка градина од служби која е драга на срце и го прави она што се бара од неа. Малку знаење во сомнителни технички области, малку отворен код и насмевка на твоето лице од мислата „Јас го направив тоа!“

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

Извор: www.habr.com

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