Mga adventure gikan sa asul

Mga adventure gikan sa asul

Giunsa makatabang ang Spotify kanimo sa pagtuon sa mga daemon, RFC, network ug pagpasiugda sa open source. O unsa ang mahitabo kung dili ka makabayad, apan gusto nimo ang pipila ka mga premium nga mga butang.

Начало

Sa ikatulo nga adlaw, namatikdan nga ang Spotify nagpakita sa mga ad nga gibase sa nasud sa IP address. Namatikdan usab nga sa pipila ka mga nasud ang pag-anunsyo wala gyud gi-import. Pananglitan, sa Republika sa Belarus. Ug unya usa ka "maayo" nga plano ang napusa aron ma-disable ang advertising sa usa ka dili premium nga account.

Usa ka gamay bahin sa Spotify

Sa kasagaran nga pagsulti, ang Spotify adunay usa ka katingad-an nga palisiya. Ang among igsoon kinahanglan nga magbag-o aron makapalit og premium: usba ang lokasyon sa iyang profile sa gawas sa nasud, pangitaa ang usa ka angay nga gift card nga mabayran ra gamit ang PayPal, nga nahimo’g katingad-an karong bag-o ug gusto usa ka hugpong sa mga dokumento. Sa kinatibuk-an, kini usa usab ka panimpalad, apan lahi nga pagkahan-ay. Bisan kung kadaghanan sa mga tawo nagbuhat niini alang sa mobile nga bersyon, dili ako interesado niini. Busa, ang tanan sa ubos makatabang lamang sa kaso sa desktop nga bersyon. Dugang pa, wala’y pagpalapad sa mga gimbuhaton. Pagputol lang sa pipila sa mga sobra.

Ngano nga kini komplikado kaayo?

Ug ako naghunahuna sa diha nga nagparehistro sa medyas-proxy data sa Spotify config. Ang problema nahimo nga ang pag-authenticate sa mga medyas gamit ang pag-login ug password dili molihok. Dugang pa, ang mga developers kanunay nga nagbuhat sa usa ka butang sa palibot sa proxy: bisan sa pagtugot niini, unya pagdili niini, o pagbungkag niini, nga nagpatungha sa tibuok nga mga panel sa mga diskusyon sa off-site.

Nakahukom nga dili mosalig sa dili lig-on nga mga gimbuhaton ug sa pagpangita sa usa ka butang nga mas kasaligan ug makapaikag.

Sa usa ka dapit dinhi ang magbabasa kinahanglan mangutana: nganong dili kuhaon ssh uban sa usa ka yawe -D ug kana ang katapusan niini? Ug, sa kinatibuk-an, siya mahimong husto. Apan, una, kini kinahanglan pa nga yawan-on ug makighigala sa autossh, aron dili maghunahuna bahin sa gisi nga mga koneksyon. Ug ikaduha: kini yano ra kaayo ug makalaay.

Sa han-ay

Sama sa naandan, adto ta gikan sa wala ngadto sa tuo, ibabaw ngadto sa ubos ug ihulagway ang tanan nga atong gikinahanglan aron mapatuman ang atong β€œsimple” nga ideya.

Una kinahanglan nimo ang usa ka proxy

Ug adunay daghang mga alternatibo sa usa ka higayon:

  • mahimo ka lang moadto ug magkuha gikan sa bukas nga mga lista sa proxy. Barato (o hinoon sa wala), apan hingpit nga dili kasaligan ug ang tibuok kinabuhi sa maong mga proxy lagmit nga zero. Busa, gikinahanglan nga mangita/magsulat og parser para sa mga proxy list, i-filter kini sa gusto nga tipo ug nasud, ug ang pangutana sa pag-ilis sa nakit-an nga proxy sa Spotify nagpabiling bukas (maayo, tingali pinaagi sa HTTP_PROXY pagbalhin ug paghimo og custom wrapper alang sa binary aron ang tanang ubang trapiko dili ipadala didto).
  • Makapalit ka og susama nga proxy ug luwasa ang imong kaugalingon gikan sa kadaghanan sa mga problema nga gihulagway sa ibabaw. Apan sa presyo sa usa ka proxy, mahimo ka dayon makapalit premium sa Spotify, ug kini dili praktikal alang sa orihinal nga buluhaton.
  • Ipataas ang imoha. Sama sa imong nahibal-an, kini ang among gipili.

Pulos nga sulagma mahimo nga adunay usa ka higala nga adunay usa ka server sa Republika sa Belarus o lain nga gamay nga nasud. Kinahanglan nimo kining gamiton ug i-roll out ang gusto nga proxy niini. Ang mga espesyal nga connoisseurs mahimong kontento sa usa ka higala nga adunay usa ka router DD-WRT o susama nga software. Apan didto imong talagsaon nga kalibutan ug kini nga kalibutan klaro nga dili mohaum sa gambalay niini nga istorya.

Mao nga, ang among mga kapilian: Squid - dili makapadasig, ug dili ko gusto ang usa ka proxy nga HTTP, daghan na kaayo niini nga protocol sa palibot. Ug sa lugar sa SOCKS walay bisan unsa nga makatarunganon gawas Dante wala pa nakadeliver. Busa, atong kuhaon kini.

Ayaw paghulat sa manwal ni Dante sa pag-instalar ug pag-configure. Siya googling lang ug dili partikular nga interes. Sa minimum nga configuration nga imong gikinahanglan sa paglabay sa tanan nga mga matang sa client pass, socks pass, husto nga pagrehistro sa mga interface ug ayaw kalimot sa pagdugang socksmethod: username. Sa kini nga porma, alang sa panghimatuud, ang logopass kuhaon gikan sa mga tiggamit sa sistema. Ug ang bahin bahin sa seguridad: pagdili sa pag-access sa localhost, paglimite sa mga tiggamit, ug uban pa - kini usa ra ka indibidwal, depende sa personal nga paranoia.

Pag-deploy og proxy nga nag-atubang sa network

Ang dula naa sa duha ka mga aksyon.

Buhat usa

Gihan-ay na namo ang proxy, karon kinahanglan namong i-access kini gikan sa global web. Kung ikaw adunay usa ka makina nga adunay puti nga IP sa gusto nga nasud, nan mahimo nimong luwas nga laktawan kini nga punto. Wala kami usa (kami, ingon sa gihisgutan sa ibabaw, gi-host sa mga balay sa mga higala) ug ang labing duol nga puti nga IP naa sa usa ka lugar sa Germany, mao nga magtuon kami sa mga network.

Mao nga oo, ang matinagdanon nga magbabasa mangutana pag-usab: nganong dili nimo kuhaon ang usa ka kasamtangan nga serbisyo sama ngrok o susama? Ug tarong na sab siya. Apan kini usa ka serbisyo, kini kinahanglan usab nga yawan-on, mahimo usab kini gasto ug sa kinatibuk-an dili kini sporting. Busa, maghimo kita og mga bisikleta gikan sa mga scrap materials.

Buluhaton: adunay usa ka proxy sa usa ka lugar nga layo sa luyo sa NAT, kinahanglan nimo nga ibitay kini sa usa sa mga pantalan sa usa ka VPS nga adunay puti nga IP ug nahimutang sa ngilit sa kalibutan.

Makataronganon ang paghunahuna nga kini masulbad pinaagi sa port forwarding (nga gipatuman pinaagi sa nahisgutan sa ibabaw. ssh), o pinaagi sa paghiusa sa hardware ngadto sa usa ka virtual network pinaagi sa VPN. UBAN ssh nahibal-an namon kung unsaon pagtrabaho, autossh Makalaay ang pagkuha, busa atong kuhaon ang OpenVPN.

Ang DigitalOcean adunay nindot nga manul bahin niini nga butang. Wala koy ikadugang niini. Ug ang resulta nga config mahimong dali nga konektado sa kliyente sa OpenVPN ug systemd. Ibutang lang kini (config) sa /etc/openvpn/client/ ug ayaw kalimot sa pag-ilis sa extension sa .conf. Pagkahuman niana, kuhaa ang serbisyo [email protected]ayaw kalimot pagbuhat para niya enable ug pagmaya nga ang tanan milupad.

Siyempre, kinahanglan namon nga i-disable ang bisan unsang pag-redirect sa trapiko sa bag-ong nahimo nga VPN, tungod kay dili namon gusto nga mapakunhod ang katulin sa makina sa kliyente pinaagi sa pagpasa sa trapiko pinaagi sa tunga sa bola.

Ug oo, kinahanglan namon nga magparehistro sa usa ka static nga IP address sa VPN server alang sa among kliyente. Kinahanglan kini sa ulahi sa istorya. Aron mahimo kini kinahanglan nimo nga ma-enable ifconfig-pool-persist, usba ipp.txt, gilakip sa OpenVPN ug i-enable ang client-config-dir, ug i-edit ang config sa gusto nga kliyente pinaagi sa pagdugang ifconfig-push nga adunay husto nga maskara ug gitinguha nga IP address.

Buhat duha

Karon kita adunay usa ka makina sa "network" nga nag-atubang sa Internet ug mahimong gamiton alang sa hinakog nga katuyoan. Sa ato pa, i-redirect ang bahin sa trapiko pinaagi niini.

Busa, usa ka bag-ong buluhaton: kinahanglan nimo nga i-off ang trapiko nga moabut sa usa sa mga pantalan sa VPS nga adunay puti nga IP aron kini nga trapiko moadto sa bag-ong konektado nga virtual network ug ang tubag makabalik gikan didto.

Solusyon: siyempre iptables! Kanus-a pa ka makabaton og ingon ka nindot nga oportunidad sa pagpraktis uban kaniya?

Ang gikinahanglan nga pag-configure dali nga makit-an, sa tulo ka oras, usa ka gatos nga pagpamalikas nga mga pulong ug pipila ka mga nausik nga nerbiyos, tungod kay ang mga network sa pag-debug usa ka piho nga pamaagi.

Una, kinahanglan nimo nga himuon ang pag-redirect sa trapiko sa kernel. Kini nga butang gitawag ipv4.ip_forward ug mahimo nga gamay nga lahi depende sa OS ug network manager.

Ikaduha, kinahanglan nimo nga magpili usa ka pantalan sa VPS ug ibutang ang tanan nga trapiko nga moadto niini sa usa ka virtual subnet. Mahimo kini, pananglitan, sama niini:

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

Dinhi among gi-redirect ang tanan nga trapiko sa TCP nga moabut sa port 8080 sa eksternal nga interface sa usa ka makina nga adunay IP 10.8.0.2 ug parehas nga port 8080.

Alang niadtong gusto sa hugaw nga mga detalye sa trabaho netfilter, iptables ug routing sa kinatibuk-an, kini mao ang hingpit nga gikinahanglan sa pagpamalandong kini o kini.

Busa, karon ang among mga pakete molupad ngadto sa virtual subnet ug... sila magpabilin didto. Mas tukma, ang tubag gikan sa proxy nga medyas molupad balik pinaagi sa default gateway sa makina uban ni Dante ug ang nakadawat naghulog niini, tungod kay sa mga network dili naandan nga magpadala usa ka hangyo sa usa ka IP ug makadawat usa ka tubag gikan sa lain. Busa, kita kinahanglan nga magpadayon sa pag-ampo.

Busa, karon kinahanglan nimo nga i-redirect ang tanan nga mga pakete gikan sa proxy balik sa virtual subnet padulong sa VPS nga adunay puti nga IP. Dinhi ang sitwasyon medyo mas grabe, tungod kay kini ra iptables dili kami igo, tungod kay kung gitul-id namon ang adres sa destinasyon sa wala pa ang ruta (PREROUTING), unya ang among package dili molupad sa Internet, ug kung dili namo kini ayohon, ang package moadto sa default gateway. Busa, kinahanglan nimong buhaton ang mosunod: hinumdomi ang kadena mangle, aron markahan ang mga pakete iptables ug ibutang kini sa usa ka naandan nga routing table nga magpadala kanila kung asa sila moadto.

Wala dayon miingon kay nahuman:

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

Gikuha namon ang paggawas nga trapiko, gimarkahan ang tanan nga naglupad gikan sa pantalan diin naglingkod ang proxy (8080 sa among kaso), gi-redirect ang tanan nga gimarkahan nga trapiko sa lamesa sa ruta nga adunay numero 80 (sa kinatibuk-an, ang numero wala magdepende sa bisan unsang butang, gusto lang namon to) ug idugang ang usa ka lagda , sumala sa diin ang tanan nga mga pakete nga gilakip niini nga lamesa molupad sa VPN subnet.

Nindot! Karon ang mga pakete molupad balik sa VPS ... ug mamatay didto. Tungod kay ang VPS wala mahibal-an kung unsa ang buhaton kanila. Busa, kung dili ka magsamok, mahimo nimong i-redirect ang tanan nga trapiko nga moabut gikan sa virtual subnet balik sa Internet:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 172.42.1.10

Dinhi, ang tanan nga moabut gikan sa 10.8.0.0 subnet nga adunay maskara nga 255.255.255.000 giputos sa source-NAT ug molupad sa default interface, nga gibalik sa Internet. Mahinungdanon nga timan-an nga kini nga butang molihok lamang kung kita transparent nga ipasa ang pantalan, nga mao, ang umaabot nga pantalan sa VPS motakdo sa pantalan sa atong proxy. Kay kon dili, mag-antos ka pa ug gamay.

Sa usa ka dapit karon ang tanan kinahanglan magsugod sa pagtrabaho. Ug gamay ra ang nahabilin: ayaw kalimti ang pagsiguro nga ang tanan nga mga config iptables ΠΈ route wala magpadayon human sa pagsugod pag-usab. Kay iptables adunay mga espesyal nga file sama sa /etc/iptables/rules.v4(sa kaso sa Ubuntu), apan alang sa mga ruta ang tanan medyo mas komplikado. Gipasulod ko sila up/down Ang mga script sa OpenVPN, bisan kung sa akong hunahuna mahimo kini nga labi ka disente.

I-wrap ang trapiko gikan sa aplikasyon sa proxy

Busa, kami adunay usa ka proxy nga adunay authentication sa gusto nga nasud, nga ma-access pinaagi sa usa ka static nga puti nga IP address. Ang nahabilin mao ang paggamit niini ug pag-redirect sa trapiko gikan sa Spotify didto. Apan adunay usa ka nuance, sama sa gihisgutan sa ibabaw, ang login-password alang sa proxy sa Spotify dili molihok, mao nga kita mangita kon sa unsang paagi sa pagkuha sa palibot niini.

Sa pagsugod, atong hinumduman ang mahitungod sa proxy. Nindot nga mga butang, apan nagkantidad kini sama sa usa ka starship ($40). Uban niini nga salapi makapalit na usab kita ug premium ug mahuman na kini. Busa, mangita kami og dugang nga libre ug bukas nga mga analogue sa Mac (oo, gusto namong maminaw sa musika sa Mac). Atong diskobrehon ang usa ka tibuok nga himan: proximac. Ug kita malipayon nga moadto kaniya.

Apan ang kalipay dili magdugay, tungod kay kinahanglan nimo nga i-enable ang debug mode ug custom kernel extensions sa MacOS, pag-file sa usa ka yano nga config ug sabton nga kini nga himan adunay parehas nga problema sama sa Spotify: dili kini makapasa sa panghimatuud gamit ang login-password sa socks-proxy.

Sa usa ka dapit sa palibot kini ang panahon sa freak out ug pagpalit sa usa ka premium ... apan dili! Atong sulayan nga hangyoon kini nga ayohon, kini open source! Buhaton nato ticket. Ug agig tubag nakakuha kami usa ka makapasubo nga istorya bahin sa kung giunsa ang nag-inusara nga tigmentinar wala na usa ka MacBook ug sa impyerno niini, dili usa ka pag-ayo.

Maglagot na sab ta. Apan unya atong hinumdoman ang atong kabatan-onan ug C, i-on ang debug mode sa Dante, pagkalot sa gatusan ka kilobytes nga mga troso, adto sa RFC1927 para sa impormasyon bahin sa SOCKS5 protocol, atong tan-awon ang Xcode ug pangitaa ang problema. Igo na ang pagtul-id sa usa ka karakter sa lista sa mga code sa pamaagi nga gitanyag sa kliyente alang sa pag-authenticate ug ang tanan nagsugod sa pagtrabaho sama sa orasan. Kami nalipay, among gikolekta ang release binary, among gibuhat hangyo sa pagbitad ug moadto kami sa pagsalop sa adlaw ug moadto sa sunod nga punto.

I-automate kini

Kung molihok na ang Proximac, kinahanglan kini nga demonyo ug kalimtan. Adunay usa ka tibuuk nga sistema sa pagsugod nga angay alang niini, nga makita sa MacOS, nga mao gilusad.

Nakaplagan namo kini dayon manwal ug among nasabtan nga kini dili gayud systemd ug dinhi hapit usa ka scoop ug xml. Wala'y nindot nga mga config alang kanimo, walay mga sugo nga sama status, restart, daemon-reload. Hardcore lang nga klase start-stop, list-grep, unload-load ug daghan pang mga katingad-an. Ang pagbuntog niining tanan atong gisulat plist, nagkarga. Dili mogana. Gitun-an namon ang pamaagi sa pag-debug sa demonyo, pag-debug niini, pagsabut kung unsa ang naa ENV bisan pa PATH wala namo gihatag ang normal, naglalis kami, among gidala kini (pagdugang /sbin ΠΈ /usr/local/bin) ug sa katapusan nalipay kami sa autostart ug stable nga operasyon.

Pagginhawa

Unsa ang resulta? Usa ka semana sa adventure, usa ka nagluhod nga zoo gikan sa mga serbisyo nga mahal sa kasingkasing ug gibuhat kung unsa ang gikinahanglan niini. Usa ka gamay nga kahibalo sa mga kaduhaduhaan nga teknikal nga mga lugar, usa ka gamay nga open source ug usa ka pahiyom sa imong nawong gikan sa hunahuna nga "Gibuhat ko kini!"

PS: dili kini usa ka panawagan alang sa boycott sa mga kapitalista, alang sa pagtipig sa mga posporo o alang sa kinatibuk-ang tuso, apan usa lamang ka timailhan sa mga posibilidad sa panukiduki ug kalamboan diin, sa kinatibuk-an, dili nimo kini damha.

Source: www.habr.com

Idugang sa usa ka comment