Mteja wa VPN huunganisha, kivinjari hufanya kazi, na amri moja ambayo unajali kwa kweli bado inatoka kupitia muunganisho wako wa nyumbani. Au kinyume chake hutokea: handaki huchukua njia ya chaguo-msingi na seva ya faili ya ndani hupotea kutoka kwenye desktop. Nilikumbana na hii na wakala wa ujenzi ambao ulihitaji kufikia kioo cha ndani cha vizalia wakati sehemu nyingine ya mwenyeji ilibaki kwenye LAN ya ofisi, na mteja alitoa chaguo mbili haswa, trafiki yote au hakuna. Ombi ni lile lile kwa pande zote mbili, programu hii na si kompyuta yote, na wateja wengi hawana kisanduku cha kuteua kwa ajili yake, kwa sababu jedwali la njia halijawahi kujua programu ni nini.

Kwa nini jedwali la njia haliwezi kuona programu yako

Mchakato unapotuma pakiti, staki hutafuta anwani ya lengwa kwenye jedwali la njia. Wala jina la program inayotekelezwa wala mlango haviingii kwenye utafutaji huo. Majina ya kikoa hushindwa kwa sababu hiyo hiyo: handaki husafirisha trafiki hadi anwani, na wakati jina linapotatuliwa kuwa anwani, uelekezaji ndio kigezo pekee ambacho kerneli bado inacho. Ndio sababu "VPN kwa tovuti hii pekee" hatimaye humaanisha proksi, na "VPN kwa programu hii pekee" humaanisha mojawapo ya seti ndogo ya mbinu.

UtaratibuKinachochaguaKinafikiaHandaki linapoanguka
Kufunga soketianwani ya chanzomteja unaomdhibitimiunganisho hushindwa
Sheria ya UID (Linux)mtumiaji mmilikikila mchakato wa akaunti mojamiunganisho hushindwa
Wasifu wa firewall (Windows)wasifu wa adaptaprogramu mojahushindwa ikiwa imefungwa
Nafasi ya majina ya mtandaouanachama katika nafasi ya majinakila kitu kinachoanzishwa ndanimiunganisho hushindwa
Hatua ya SOCKSmpangilio wa proksi wa programuprogramu moja au wasifu mmoja wa kivinjarimiunganisho hushindwa

Hakuna mojawapo ya haya ni njia ya mchakato mmoja. Kila moja huhamisha uamuzi hadi tabaka linaloweza kuona programu, mtumiaji au mpangilio wa programu yenyewe.

Lengo moja bado ni njia, si sheria ya programu. Kwenye macOS kichocheo cha kawaida ni kuondoa tiki kwenye "Tuma trafiki yote kupitia VPN" na kuongeza njia ya mwenyeji: sudo route add -host internal-tuner.example -interface ppp0, ambayo huondolewa tena kwa sudo route delete -host internal-tuner.example -interface ppp0. Soma jina la kiolesura kutoka ifconfig kwanza, kwa kuwa ppp0 ni mfano tu. Alama za kadi hazifanyi kazi kwenye njia ya mwenyeji, kwa hivyo huduma inayozungumza na majina kadhaa inahitaji ingizo moja kwa kila jina, na sheria inafikia kila mchakato kwenye mashine, si ule uliokuwa nao akilini.

Funga soketi kwenye anwani ya handaki

Unapodhibiti mteja, kufunga ndio kichaguzi cha bei nafuu. Soketi iliyofungwa kwenye anwani ya ndani ya handaki hutoka kupitia kiolesura hicho mradi njia ya lengwa ipo hapo, na kila kitu kingine kwenye mashine hudumisha njia yake ya kawaida. Ujanja ni kwamba kufunga huchagua anwani ya chanzo wakati jedwali la njia bado huchagua njia ya kutoka. Kufunga peke yake hakuhamishi trafiki isiyo na njia ndani ya handaki, na hilo ndilo kosa lililo nyuma ya ripoti nyingi za "nilifunga na bado inatoka njia isiyo sahihi".

import socket
s = socket.socket()
s.bind(("10.8.0.2", 0))
s.connect(("build.internal.example", 443))

Zana za ngazi ya juu zinaonyesha wazo hilo hilo: curl --interface 10.8.0.2, CURLOPT_INTERFACE katika PHP na hoja source_address katika wateja wa HTTP wa Python. Anwani lazima iwe ya handaki, na makosa ya kuandika hapa hushindwa kama hitilafu ya kawaida ya muunganisho, si malalamiko ya uelekezaji. Kufunga kwa jina la kifaa badala ya anwani ni haki ya Linux na haihamishiwi Windows au macOS, ndio sababu skripti zinazohamishika hupitisha anwani.

Linux: linganisha mmiliki, si jina la programu

Kerneli inaweza kulinganisha mtumiaji mmiliki wa soketi, kwa hivyo akaunti maalum inakuwa kichaguzi. Weka handaki kwenye jedwali lake la njia na tuma huko trafiki ya akaunti hiyo pekee:

ip rule add uidrange 1001-1001 lookup 100
ip route add default dev tun0 table 100

Hii inafanya kazi tu ikiwa handaki si njia ya chaguo-msingi tayari. Anzisha mteja na --route-nopull, au chuja uelekezaji uliosukumizwa na --pull-filter ignore "redirect-gateway" kwenye OpenVPN 2.4 na baadaye, kisha ongeza ingizo la jedwali mwenyewe. Vinginevyo njia zote mbili za chaguo-msingi zipo na ile ya kipaumbele cha chini hushinda. Toleo la makusudi la hilo ni kuelekeza njia ya chaguo-msingi kwenye lango la handaki, au kuifanya kutoka skripti ya kukatika: huweka trafiki nje ya intaneti handaki linapoanguka, lakini hiyo ni swichi ya kuzima, si kichaguzi, na hudumu hadi mtu aiondoe.

Toleo lenye nguvu zaidi ni nafasi ya majina ya mtandao. Iunde, endesha mteja ndani, na anzisha programu kwa ip netns exec. Hakuna kilicho nje ya nafasi ya majina kinachoona kiolesura cha handaki, kwa hivyo programu haiwezi kurudi kwa bahati kwenye njia ya mwenyeji. Gharama ni halisi: nafasi ya majina inahitaji jozi ya veth kufikia mtandao halisi na faili yake ya kisuluhishi, kwa sababu nafasi ya majina ya upachikaji haishiriki mipangilio ya utatuzi ya mwenyeji.

Mbinu mbili za kushindwa zinaeleza uvujaji mwingi. Utatuzi wa majina bado hufanyika kwenye kisuluhishi cha mwenyeji, kwa hivyo ombi hutoka nje ya handaki hata muunganisho wa TCP unapoingia ndani. Na IPv6 inahitaji ip -6 rule yake, kwa sababu sheria ya v4 haifiki.

Windows na macOS: punguza firewall au toa proksi

Windows pia haina kichaguzi cha njia kwa programu, lakini sheria zake za firewall zinaweza kupunguzwa kwa wasifu, na adapta ya VPN inaweza kuainishwa kama ya Umma wakati LAN ya nyumbani inabaki ya Faragha. Unda sheria za kuzuia kutoka kwa programu kwenye wasifu wa Faragha na Kikoa, acha Umma wazi, na programu inaweza kufikia mtandao kupitia handaki pekee. Weka kwanza kategoria ya mtandao wa muunganisho, kisha thibitisha kwenye paneli ya ufuatiliaji ya firewall kwamba sheria ililingana. Ni kizuizi, si njia: hushindwa ikiwa imefungwa handaki linapoanguka, na haiwezi kusimamisha programu inayopuuza firewall.

macOS hufuata mantiki hiyo hiyo kwa zana tofauti. Kisikilizaji cha SOCKS kinachofikiwa kwa SSH ni chaguo lisilovamia zaidi, kwa kuwa ssh -D 1080 user@host huunda mlango mmoja wa ndani na ni programu zilizowekwa kuitumia pekee zinazochukua njia hiyo. Sheria ya pf inaweza kuzuia programu kwa mtumiaji au kikundi, lakini bado haiwezi kuchagua handaki kwa programu hiyo pekee. Tunnelblick haiwezi kuchuja kwa kikoa kabisa, kwa sababu njia hufanya kazi kwa anwani; watumiaji wa OpenConnect hutumia vpn-slice seva inaposukuma orodha ya viambishi iliyopanuka mno.

Mbinu mbili za kukwepa zinafikia kile zana za jukwaa zinachokosa. Viendelezi vya kivinjari vinavyobadilisha proksi kwa kikoa ni jibu la kiutendaji kwa "tovuti hii pekee", kwa sababu hufanya kazi kwenye tabaka la programu ambapo majina bado yapo; hufikia kivinjari kimoja na hakuna kingine. Njia mbovu ni kuendesha mteja wa msambazaji ndani ya mashine pepe ili mgeni amiliki mabadiliko ya njia wakati mwenyeji anadumisha njia yake, kwa gharama ya staki mbili za mtandao kudumisha.

Hatua ya SOCKS kwa zana zisizo na chaguo la kufunga

Programu nyingi zinaweza kuelekezwa kwenye proksi ya HTTP au SOCKS hata zisijue chochote kuhusu violesura. Mteja wa SSH hutoa moja bila mabadiliko upande wa seva:

ssh -N -D 127.0.0.1:9999 [email protected]

Chochote kilichowekwa kutumia mlango huo hutoka kwenye ngome wakati sehemu nyingine ya desktop inadumisha muunganisho wake wa kawaida. Kielelezo cha ndani cha 3proxy kilichofungwa kwenye anwani ya handaki hufanya vivyo hivyo kwa mlango mmoja bila SSH, na stunnel hufikia mlango mmoja uliofungwa kwa TLS. Mipaka ni ya kiutendaji: proksi hubeba itifaki zinazojua kuitumia pekee, UDP inahitaji muunganisho wa UDP wa SOCKS5 ambao mpangilio wa "SOCKS5" wa wateja wengi hauuwezeshi, na DNS lazima itatuliwe na proksi (socks5h katika curl) au jina huvuja hadi kisuluhishi cha ndani.

Weka kisikilizaji kwenye loopback isipokuwa mashine nyingine inaihitaji.

Thibitisha njia kwa kunasa, si kwa ujumbe wa hali

Madirisha ya hali ya programu hueleza mpangilio, si pakiti. Nasa trafiki kwenye violesura vyote viwili na linganisha:

tcpdump -i any -n port 443
ss -tnp | grep 443

Ikiwa muunganisho unaonekana kwenye kiolesura halisi bila ingizo linalolingana kwenye handaki, kichaguzi hakifanyi kazi, chochote mteja anachoripoti. Angalia IPv6 na kisuluhishi kando, na tafuta njia ya pili kama mchakato msaidizi au proksi ya mfumo iliyorithiwa.

Kisha chagua mpaka unaolingana na mahitaji: proksi inatosha kwa tovuti moja, sheria ya UID inatosha kwa akaunti moja, wasifu wa firewall unatosha wakati muunganisho lazima ushindwe ukiwa umefungwa, na nafasi ya majina ndiyo chaguo pekee linaloficha handaki kutoka kwa kila kitu nje yake.

Makala zinazohusiana