Macaamiilka VPN wuu xirmaa, browser-ku wuu shaqeeyaa, oo amarka kaliya ee aad dhab ahaan danaynayso wali wuxuu soo maraa xiriirka gurigaaga. Ama waxaa dhaca ka soo horjeeda: tunnel-ku wuxuu qaataa dariiqa caadiga ah oo server-ka faylasha maxalliga ah wuu ka maqnaadaa desktop-ka. Tan waxaan la kulmay agent build oo u baahnaa inuu gaaro muraayad artefact gudaha ah halka inta kale ee host-ku ay ku sii jirtay LAN-ka xafiiska, macaamiilkuna wuxuu bixiyay laba doorasho oo keliya, taraafikada oo dhan ama waxba. Codsigu labada dhinac waa isku mid, barnaamijkan oo aan ahayn kombuyuutarka oo dhan, oo macaamiisha badankoodu sanduuq calaamad ah ma laha, sababtoo ah miiska dariiqa waligiis ma garanayn waxa barnaamijku yahay.

Sababta miiska dariiqa uu u arki karin barnaamijkaaga

Marka process uu dirto packet, stack-ku wuxuu ka raadiyaa cinwaanka loo socdo miiska dariiqa. Magaca executable-ka iyo port-ka midkoodna ma galo raadintaas. Magacyada domain-ka waxay ku guuldareystaan sabab la mid ah: tunnel-ku wuxuu taraafikada u qaadaa cinwaan, oo marka magac loo xalliyo cinwaan, dariiqa ayaa ah koodhka kaliya ee kernel-ku wali haysto. Taasi waa sababta "VPN kaliya site-kan" uu ugu dambeyn u macno yahay proxy, iyo "VPN kaliya barnaamijkan" uu ugu dambeyn u macno yahay mid ka mid ah habab yar.

HabkaWaxa dooranayaDaboolayaMarka tunnel-ku dhaco
Xiritaanka socket-kacinwaanka ishamacaamiil aad maamushoxiriirrada way guuldareystaan
Qaanuunka UID (Linux)isticmaalaha milkiilahaprocess kasta oo akoon keliyaxiriirrada way guuldareystaan
Profile-ka firewall (Windows)profile-ka adapter-kahal barnaamijwuu ku guuldareystaa xiran
Meel magacyo shabakadeedxubin ka ahaanshaha meesha magacyadawax kasta oo gudaha lagu bilaaboxiriirrada way guuldareystaan
Bood SOCKSdejinta proxy-ga app-kahal app ama hal profile browserxiriirrada way guuldareystaan

Midkoodna maaha dariiq process. Mid walba wuxuu go'aanka u guuriyaa lakab arki kara barnaamijka, isticmaalaha ama dejinta app-ka laftiisa.

Hal meel oo keliya wali waa dariiq, ma aha qaanuun barnaamij. macOS waxaa caadi ah in la tirtiro "Dir dhammaan taraafikada VPN-ka" oo la daro dariiq host: sudo route add -host internal-tuner.example -interface ppp0, oo mar kale lagu tirtiro sudo route delete -host internal-tuner.example -interface ppp0. Ka akhri magaca interface-ka ifconfig marka hore, maadaama ppp0 uun tusaale yahay. Calaamadaha guud kuma shaqeeyaan dariiqa host, sidaas darteed adeeg kala hadla magacyo badan wuxuu u baahan yahay hal gelis magac kasta, qaanuunkuna wuxuu daboolaa process kasta oo kombuyuutarka, ma aha kan aad maskaxda ku haysatay.

Ku xir socket-ka cinwaanka tunnel-ka

Marka aad maamusho macaamiilka, xiritaanku waa doorashada ugu jaban. Socket ku xiran cinwaanka maxalliga ah ee tunnel-ka wuxuu ka baxaa interface-kaas ilaa dariiq loo hayo halkaas, wax kasta oo kale oo kombuyuutarka ku jirana wuxuu hayaa dariiqiisa caadiga ah. Qarsoodiga ayaa ah in xiritaanku dooro cinwaanka isha halka miiska dariiqa uu wali dooranayo bixitaanka. Xiritaan keliya ma rarto taraafikada aan dariiq lahayn tunnel-ka, waana taas khaladka ka dambeeya inta badan warbixinnada "waan xirey oo wali dariiqa qaldan ayuu maraa".

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

Qalabka heerka sare waxay soo bandhigaan fikrad isku mid ah: curl --interface 10.8.0.2, CURLOPT_INTERFACE ee PHP iyo doodda source_address ee macaamiisha HTTP ee Python. Cinwaanku waa inuu tunnel-ka ku deelaa, qalad teebis halkan wuxuu u guuldareystaa sida qalad xiriir caadi ah, ma aha cabasho dariiq. Ku xirista magac qalab halkii cinwaan waa mudnaan Linux oo uma gudubto Windows ama macOS, taas ayaa sababta scripts la qaadi karo ay u gudbiyaan cinwaanka.

Linux: la jaanqaad milkiilaha, ma aha magaca barnaamijka

Kernel-ku wuu la jaanqaadi karaa isticmaalaha milkiilaha socket-ka, sidaas darteed akoon gaar ah wuxuu noqdaa doorashada. Meel tunnel-ka miiskiisa dariiqa u gaar ah oo halkaas u dir kaliya taraafikada akoonkaas:

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

Tani waxay shaqaysaa kaliya haddii tunnel-ku aanu hore u ahayn dariiqa caadiga ah. Ku bilow macaamiilka --route-nopull, ama shaandhee leexinta la riixay --pull-filter ignore "redirect-gateway" ku OpenVPN 2.4 iyo wixii ka dambeeya, ka dibna gelis miiska ku dar adiga laftaad. Haddii kale labada dariiqo caadi ah way jiraan oo kan mudnaanta hooseeya ayaa guuleysta. Nooca ula kac ah waa in dariiqa caadiga ah loo jeediyo gateway-ga tunnel-ka, ama laga sameeyo script goyn: taraafikada wuu ka maqnaadaa internet-ka marka tunnel-ku dhaco, laakiin kani waa beddelka joojinta, ma aha doorasho, oo wuu sii jiraa ilaa qof uu tirtiro.

Nooca xoogga badan waa meel magacyo shabakadeed. Abuur, macaamiilka gudaha ku socodsii, oo app-ka ku bilow ip netns exec. Wax ka baxsan meesha magacyada ma arkaan interface-ka tunnel-ka, sidaas darteed app-ku si shil ah uma noqon karo dariiqa host-ka. Qiimuhu waa dhab: meesha magacyada waxay u baahan tahay lammaane veth si ay u gaarto shabakada jirka iyo faylkeeda resolver, sababtoo ah meesha magacyada mount-ka lama wadaagto dejinta xallinta host-ka.

Laba hab oo guuldareysi ah ayaa sharraxaya inta badan daadinta. Xallinta magacyada wali waxay ka dhacdaa resolver-ka host-ka, sidaas darteed weydiintu waxay ka baxdaa tunnel-ka xitaa marka xiriirka TCP uu gudaha galo. IPv6-na wuxuu u baahan yahay ip -6 rule u gaar ah, sababtoo ah qaanuunka v4 ma daboolo.

Windows iyo macOS: xaddid firewall-ka ama dhiib proxy

Windows sidoo kale ma laha doorasho dariiq app kasta, laakiin qaanuunyada firewall-ka waxaa lagu xaddidi karaa profile, adapter VPN-na waxaa loo kala saari karaa sida Dadweyne halka LAN-ka gurigu sii ahaado Gaar. Samee qaanuunyo xannibaad bixid ah barnaamijka profiilada Gaar iyo Domain, ka tag Dadweynaha furan, oo app-ku wuxuu shabakada gaari karaa kaliya tunnel-ka. Marka hore dejiso qaybta shabakada xiriirka, ka dibna xaqiiji in qaanuunku uu ku habboonaaday daaqadda la socodka firewall-ka. Waa xannibaad, ma aha dariiq: wuu ku guuldareystaa xiran marka tunnel-ku dhaco, oo ma joojin karo app-ka iska indhatira firewall-ka.

macOS waxay raacdaa isla caqli-galka qalab kale. Dhagayste SOCKS oo SSH lagu gaaro waa doorashada ugu yar ee faraha gelaysa, maadaama ssh -D 1080 user@host uu abuuro hal port maxalli ah oo kaliya apps-ka loo dejiyay inay isticmaalaan ayaa mara dariiqaas. Qaanuun pf wuu xannibi karaa barnaamij isticmaale ama koox ahaan, laakiin wali ma dooran karo tunnel-ka barnaamijkaas oo keliya. Tunnelblick ma shaandheyn karo domain-ka haba yaraatee, sababtoo ah dariiqyadu waxay ku shaqeeyaan cinwaanno; isticmaalayaasha OpenConnect waxay isticmaalaan vpn-slice marka server-ku soo diro liis prefix ah oo aad u ballaaran.

Laba xal oo dhinac-mar ah ayaa daboolaya waxa qalabka platform-ku seegto. Kordhinta browser-ka ee proxy-ga domain ahaan u beddela waa jawaabta wax ku ool ah ee "kaliya site-kan", sababtoo ah waxay ka shaqeeyaan lakabka app-ka halka magacyadu wali jiraan; waxay daboolaan hal browser oo wax kale ma aha. Tan qallafsan waa in macaamiilka iibiyaha lagu socodsiiyo mashiin dalwad ah si martidu u maamusho beddelka dariiqa halka host-ku hayo dariiqiisa, qiimaha laba stack shabakadeed oo la ilaaliyo.

Bood SOCKS oo loogu talagalay qalab aan doorasho xiritaan lahayn

Inta badan apps-ka waxaa loo jeedin karaa proxy HTTP ama SOCKS xitaa marka aanay wax ka garanaynin interface-yada. Macaamiil SSH wuxuu bixiyaa mid aan wax beddel ah ku iman dhinaca server-ka:

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

Wax kasta oo loo dejiyay inuu isticmaalo port-kaas wuxuu ka baxaa bastion-ka halka inta kale ee desktop-ku ay hayaan xiriirka caadiga ah. Tusaale maxalli ah oo 3proxy ku xiran cinwaanka tunnel-ku wuxuu sameeyaa isla waxaas hal port oo aan SSH lahayn, stunnel na wuxuu daboolaa hal port oo TLS lagu duubay. Xadidaadyadu waa wax ku ool: proxy-ga wuxuu qaadaa kaliya borotokoollada yaqaan isticmaalkiisa, UDP waxay u baahan tahay isku-xirka UDP SOCKS5 oo dejinta "SOCKS5" ee macaamiil badan aanay daarin, DNS-na waa in proxy-ga xalliyaa (socks5h curl-ka) ama magacu wuxuu u daadanayaa resolver-ka maxalliga ah.

Dhagaystaha ku hay loopback haddii aan mashiin kale u baahnayn.

Xaqiiji dariiqa qabasho, ma aha fariin xaalad

Daaqadaha xaaladda app-ku waxay sharraxaan dejinta, ma aha packet-ka. Ka qabo taraafikada labada interface oo isbarbardhig:

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

Haddii xiriirku ka muuqdo interface-ka jirka oo aan gelis u dhigma ku lahayn tunnel-ka, doorashadu ma shaqaynayso, wax kasta oo macaamiilku soo sheego. Si gaar ah u hubi IPv6 iyo resolver-ka, oo raadi dariiq labaad sida process caawiye ama proxy nidaam la dhaxlay.

Ka dib dooro xadka u habboon shuruudda: proxy wuu ku filan yahay hal site, qaanuun UID wuu ku filan yahay hal akoon, profile firewall wuu ku filan yahay marka xiriirku uu u baahan yahay inuu xiran ku guuldareysto, meel magacyaduna waa doorashada kaliya ee tunnel-ka ka qarisa wax kasta oo ka baxsan.

Maqaallo la xiriira