Күтүлбөгөн жерден укмуштуу окуялар

Күтүлбөгөн жерден укмуштуу окуялар

Spotify кантип демондорду, RFC'лерди, тармактарды изилдөөгө жана ачык булакты илгерилетүүгө жардам берет. Же төлөй албасаңыз эмне болот, бирок сиз чындап эле премиум жакшы нерселерди кааласаңыз.

баштап

Үчүнчү күнү, ал Spotify IP дареги өлкөнүн негизинде жарнамаларды көрсөтүп жатканы байкалган. Ошондой эле, айрым өлкөлөрдө жарнама таптакыр импорттолбогону белгиленди. Мисалы, Белоруссия Республикасында. Анан премиум эмес аккаунтта жарнаманы өчүрүү үчүн "мыкты" план иштелип чыкты.

Spotify жөнүндө бир аз

Жалпысынан алганда, Spotify кызыктай саясаты бар. Биздин бир тууган премиум сатып алуу үчүн абдан бурмаланып кетиши керек: профилиндеги жайгашкан жерин чет өлкөгө өзгөртүп, PayPal менен гана төлөнүүчү ылайыктуу белек картасын издеңиз, акыркы убакта кызыктай болуп калган жана бир топ документтерди талап кылат. Жалпысынан алганда, бул укмуштуу окуя, бирок башка тартипте. Көпчүлүк адамдар муну мобилдик версия үчүн жасашса да, мен ага кызыкпайм. Ошондуктан, төмөндөгүлөрдүн баары иш столунун версиясында гана жардам берет. Анын үстүнө функцияларды кеңейтүү болбойт. Жөн гана кээ бир ашыкчаларды кесип.

Эмне үчүн мынчалык татаал?

Spotify конфигурациясында байпак-прокси маалыматтарын каттоодо мен ошентип ойлогом. Көйгөй логин жана паролду колдонуу менен байпактарда аутентификация иштебей жатканында болуп чыкты. Мындан тышкары, иштеп чыгуучулар проксидин айланасында дайыма бир нерсе жасашат: кээде ага уруксат берип, кээде тыюу салып, кээде бузуп, сайттан тышкаркы жерде талкуулардын бардык панелдерин пайда кылат.

Туруксуз функцияларга ишенбөө жана ишенимдүү жана кызыктуураак нерсени табуу чечими кабыл алынды.

Бул жерде окурман суроо бериши керек: эмне үчүн кабыл албайт ssh ачкыч менен -D жана мунун аягы? Ал эми жалпысынан алганда, ал туура болот. Бирок, биринчиден, үзүлгөн байланыштар жөнүндө ойлонбоо үчүн, бул дагы деле жинденип, autossh менен достош керек. Экинчиден: бул өтө жөнөкөй жана кызыксыз.

Ирээти менен

Адаттагыдай эле, солдон оңго, жогорудан ылдыйга өтүп, «жөнөкөй» идеябызды ишке ашыруу үчүн зарыл болгон нерселердин баарын сүрөттөп көрөлү.

Биринчиден, сизге прокси керек

Жана бир эле учурда көптөгөн альтернативалар бар:

  • сиз жөн гана барып, ачык прокси тизмелерден ала аласыз. Арзан (же такыр бекер), бирок таптакыр ишеничсиз жана мындай проксилердин өмүрү нөлгө барабар. Ошондуктан, прокси тизмелер үчүн талдоочу табып/жазып, аларды каалаган түр жана өлкө боюнча чыпкалоо керек болот жана Spotify'да табылган проксиди алмаштыруу маселеси ачык бойдон калууда (жакшы, балким аркылуу HTTP_PROXY башка бардык трафик ал жакка жөнөтүлбөй тургандай кылып, экилик үчүн ыңгайлаштырылган орогучту түзүңүз).
  • Окшош прокси сатып алып, өзүңүздү жогоруда сүрөттөлгөн көйгөйлөрдүн көбүнөн сактай аласыз. Бирок прокси баасында сиз дароо Spotify'дан премиум сатып алсаңыз болот жана бул баштапкы тапшырма үчүн практикалык эмес.
  • Өзүңдү көтөр. Сиз ойлогондой, бул биздин тандоо.

Кокустан Беларусь Республикасында же башка кичинекей өлкөдө сервер менен досуңуз бар экени белгилүү болушу мүмкүн. Сиз муну колдонуп, ага керектүү проксиди чыгарышыңыз керек. Атайын билгичтер роутери бар досуна ыраазы боло алышат DD-WRT же ушул сыяктуу программалык камсыздоо. Бирок ал жерде анын керемет дүйнө жана бул дүйнө бул окуянын алкагында так туура келбейт.

Ошентип, биздин варианттар: Squid - шыктандыруучу эмес, жана мен HTTP проксисин каалабайм, айланасында бул протоколдор өтө көп. Ал эми байпак чөйрөсүндө акылга сыярлык эч нерсе жок Данте азырынча жеткире элек. Ошондуктан, аны алып көрөлү.

Орнотуу жана конфигурациялоо боюнча Дантенин колдонмосун күтпөңүз. Ал жөн гана гуглинг жана өзгөчө кызыгууну туудурбайт. Минималдуу конфигурацияда сиз ар кандай нерселерди киргизишиңиз керек client pass, socks pass, интерфейстерди туура каттаңыз жана кошууну унутпаңыз socksmethod: username. Бул формада аутентификация үчүн системанын колдонуучуларынан логоппас алынат. Ал эми коопсуздук жөнүндө: локалдык хостко кирүүгө тыюу салуу, колдонуучуларды чектөө ж.

Тармакка караган проксиди жайгаштырыңыз

Спектакль эки актыдан турат.

Биринчи аракет

Биз проксиди иргедик, эми ага глобалдык желеден кирүү керек. Эгер сизде каалаган өлкөдө ак IP бар машина бар болсо, анда бул пунктту коопсуз өткөрүп жиберсеңиз болот. Бизде бирөө жок (жогоруда айтылгандай, биз досторубуздун үйүндө жайгашканбыз) жана эң жакын ак IP Германиянын бир жеринде, ошондуктан биз тармактарды изилдейбиз.

Ошентип, ооба, кунт коюп окурман дагы бир жолу сурайт: эмне үчүн буга окшогон кызматты колдонбойсуз ngrok же окшош? Жана ал дагы туура болот. Бирок бул кызмат, аны кайра шайтандаштыруу керек, ал дагы акча талап кылышы мүмкүн жана жалпысынан бул спорттук эмес. Ошондуктан, калдыктардан велосипеддерди жасайбыз.

Тапшырма: NATтын артында бир жерде прокси бар, аны ак IP бар жана дүйнөнүн четинде жайгашкан VPS портторунун бирине илип коюшуңуз керек.

Муну порттук багыттоо аркылуу чечсе болот (жогоруда айтылгандар аркылуу ишке ашырылат) деп айтуу логикага ылайыктуу. ssh), же жабдыктарды VPN аркылуу виртуалдык тармакка бириктирүү аркылуу. МЕНЕН ssh биз кантип иштөөнү билебиз, autossh Бул кызыксыз, ошондуктан OpenVPN алалы.

DigitalOcean бар керемет манул бул маселе боюнча. Мен ага кошумчалай турган эч нерсем жок. Жана пайда болгон конфигурацияны OpenVPN кардары менен оңой туташтырууга болот жана systemd. Жөн гана аны (конфигурациялоо) киргизиңиз /etc/openvpn/client/ жана кеңейтүүнү өзгөртүүнү унутпаңыз .conf. Андан кийин, кызматты тартыңыз [email protected]ал үчүн муну унутпа enable жана баары учуп кеткенине кубангыла.

Албетте, биз трафикти жаңыдан түзүлгөн VPNге багыттоону өчүрүшүбүз керек, анткени биз трафикти жарым топ аркылуу өткөрүү менен кардар машинасынын ылдамдыгын азайтууну каалабайбыз.

Ооба, биз кардардын VPN серверинде статикалык IP дарегин катташыбыз керек. Бул окуя бир аз кийинчерээк керек болот. Бул үчүн сиз иштетишиңиз керек ifconfig-pool-persist, түзөтүү ipp.txt, OpenVPN менен камтылган жана client-config-dirди иштетиңиз, ошондой эле каалаган кардар конфигурациясын кошуу менен түзөтүңүз ifconfig-push туура маска жана каалаган IP дареги менен.

Экинчи иш

Азыр бизде "тармакта" Интернетке туш болгон жана өзүмчүл максаттар үчүн колдонула турган машина бар. Тактап айтканда, ал аркылуу трафиктин бир бөлүгүн багыттоо.

Ошентип, жаңы милдет: VPS портторунун бирине ак IP менен келген трафикти өчүрүү керек, бул трафик жаңы туташкан виртуалдык тармакка өтүп, жооп ошол жерден кайтып келиши мүмкүн.

Чечим: албетте iptables! Аны менен машыгууга дагы качан сизде ушундай сонун мүмкүнчүлүк болот?

Керектүү конфигурацияны үч сааттын ичинде тез эле табууга болот, жүз сөгүнүү жана бир ууч ысырап болгон нервдер, анткени түйүндөрдөгү мүчүлүштүктөрдү оңдоо өтө спецификалык процедура.

Биринчиден, сиз ядродогу трафикти кайра багыттоону иштетишиңиз керек. Бул нерсе деп аталат ipv4.ip_forward жана OS жана тармак менеджерине жараша бир аз башкача иштетилет.

Экинчиден, VPSтеги портту тандап, ага бара турган бардык трафикти виртуалдык субсеттерге орошуңуз керек. Бул, мисалы, мындай кылса болот:

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

Бул жерде биз тышкы интерфейстин 8080 портуна келген бардык TCP трафигин IP 10.8.0.2 жана ошол эле 8080 порту бар машинага багыттайбыз.

Жумуштун кир деталдарын каалагандар үчүн netfilter, iptables жана жалпысынан багыттоо, ал жөнүндө ойлонуу керек ал же ал.

Ошентип, азыр биздин пакеттер виртуалдык ички тармакка учат жана... ошол жерде калышат. Тагыраак айтканда, байпак проксиден келген жооп Данте менен машинанын демейки шлюзи аркылуу кайра учуп кетет жана алуучу аны түшүрөт, анткени тармактарда бир IPге суроо-талап жөнөтүп, экинчисинен жооп алуу салтка айланган эмес. Ошондуктан, биз мындан ары да шылдыңдашыбыз керек.

Ошентип, азыр сиз бардык пакеттерди проксиден виртуалдык подтармакка ак IP менен VPSке багыттооңуз керек. Бул жерде абал бир аз начар, анткени ал жөн эле 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 жок экендиги жана аны оңдоо эмес, тозокко түшкөнү жөнүндө жүрөк ооруткан окуяны алабыз.

Биз дагы капа болобуз. Бирок анда биз жаштыгыбызды жана Сти эстейбиз, Дантеде мүчүлүштүктөрдү оңдоо режимин күйгүзүп, жүздөгөн килобайт журналдарды казып, RFC1927 SOCKS5 протоколу жөнүндө маалымат алуу үчүн, келгиле, Xcode карап, көйгөйдү табалы. Кардар аутентификация үчүн сунуштаган метод коддорунун тизмесиндеги бир символду оңдоо жетиштүү жана бардыгы саат механизминдей иштей баштайт. Биз кубанабыз, биз чыгаруу бинардык чогултабыз, биз жасайбыз тартуу жөнүндө арыз жана биз күн батканга кирип, кийинки чекитке барабыз.

Аны автоматташтырыңыз

Proximac иштегенден кийин, аны демонизациялоо жана унутуу керек. Бул үчүн ылайыктуу бир бүтүндөй инициализация системасы бар, ал MacOSдо, атап айтканда ишке киргизди.

Тез табабыз колдонмо жана бул такыр эле эмес экенин түшүнөбүз systemd жана бул жерде дээрлик бир кашык жана xml. Сиз үчүн эч кандай кооз конфигурациялар, сыяктуу буйруктар жок status, restart, daemon-reload. Тек хардкор түрү start-stop, list-grep, unload-load жана башка көптөгөн кызыктар. Мунун баарын жеңип, жазабыз plist, жүктөө. Иштебейт. Биз жинди оңдоонун ыкмасын изилдеп, аны оңдоо, анда эмне бар экенин түшүнөбүз ENV даже PATH биз кадимкисин жеткирген жокпуз, талашып-тартышып, алып келебиз (кошумча /sbin и /usr/local/bin) жана акыры биз автостарт жана туруктуу иштөө менен бактылуубуз.

Дем чыгаруу

Жыйынтыгы кандай болду? Бир жума укмуштуу окуялар, жүрөккө кымбат жана андан талап кылынган нерселерди жасай турган кызматтардан тизелеп зоопарк. Күмөндүү техникалык чөйрөлөрдөгү бир аз билим, бир аз ачык булак жана жүзүңүздө "мен жасадым!"

PS: бул капиталисттерди бойкоттоого, ширеңкеге үнөмдөөгө же толук куулукка чакырык эмес, жөн гана изилдөө жана иштеп чыгуу мүмкүнчүлүктөрүнүн көрсөткүчү.

Source: www.habr.com

Комментарий кошуу