Kif Tiddirezzjona App Waħda mill-VPN mingħajr il-Magni Kollha
L-ebda desktop mingħajr ġestjoni ma joffri swiċċ VPN għal kull proċess. Agħżel is-saff li jisselezzjona t-traffiku: socket marbut, regola UID, profil tal-firewall jew qabża SOCKS.
Il-klijent VPN jgħaqqad, il-browser jaħdem, u l-kmand wieħed li verament tinteressa dwaru għadu joħroġ mill-konnessjoni tad-dar tiegħek. Jew jiġri l-oppost: it-tunnel jaqbad ir-rotta default u s-server tal-fajls lokali jisparixxi mid-desktop. Dan ġratli ma' aġent tal-bini li kellu jasal għal mera tal-artifacts interna waqt li l-bqija tal-host baqa' fuq il-LAN tal-uffiċċju, u l-klijent offra eżattament żewġ għażliet, traffiku kollu jew xejn. It-talba fiż-żewġ direzzjonijiet hi l-istess waħda, dan il-programm u mhux il-magni kollha, u l-biċċa l-kbira tal-klijenti m'għandhomx kaxxa tal-verifika għaliha, għaliex it-tabella tar-rotot qatt ma kienet taf x'inhu programm.
Għaliex it-tabella tar-rotot ma tistax tara l-programm tiegħek
Meta proċess jibgħat packet, l-istack ifittex l-indirizz tad-destinazzjoni fit-tabella tar-rotot. La l-isem tal-eżekutabbli u lanqas il-port ma jidħlu f'dik it-tfittxija. L-ismijiet tad-dominju jonqsu għall-istess raġuni: it-tunnel iġġorr it-traffiku lejn indirizz, u meta isem jiġi riżolt f'indirizz, ir-rotot huma l-unika lieva li l-kernel għad għandu. Għalhekk “VPN biss għal dan is-sit” jispiċċa jfisser proxy, u “VPN biss għal dan il-programm” jispiċċa jfisser waħda minn sett żgħir ta' mekkaniżmi.
| Mechanism | What selects | Covers | On tunnel drop |
|---|---|---|---|
| Socket bind | source address | a client you control | connections fail |
| UID rule (Linux) | owning user | every process of one account | connections fail |
| Firewall profile (Windows) | adapter profile | one program | fails closed |
| Network namespace | namespace membership | everything started inside | connections fail |
| SOCKS hop | app proxy setting | one app or one browser profile | connections fail |
Ħadd minn dawn mhuwa rotta għal kull proċess. Kull waħda tmexxi d-deċiżjoni lejn saff li jista' jara l-programm, l-utent jew il-konfigurazzjoni tal-app stess.
Destinazzjoni waħda għadha rotta, mhux regola tal-programm. Fuq macOS ir-riċetta tas-soltu hi li tneħħi l-marka minn “Ibgħat it-traffiku kollu mill-VPN” u żżid rotta tal-host: sudo route add -host internal-tuner.example -interface ppp0, imneħħija mill-ġdid b'sudo route delete -host internal-tuner.example -interface ppp0. Aqra l-isem tal-interface minn ifconfig l-ewwel, għaliex ppp0 huwa biss eżempju. Il-wildcards ma jaħdmux f'rotta tal-host, għalhekk servizz li jkellem diversi ismijiet jeħtieġ entrata għal kull isem, u r-regola tkopri kull proċess fuq il-magna, mhux dak li kellek f'moħħok.
Torbot is-socket mal-indirizz tat-tunnel
Meta tikkontrolla l-klijent, it-torbot huwa l-irħas selettur. Socket marbut mal-indirizz lokali tat-tunnel joħroġ minn dik l-interface sakemm teżisti rotta għad-destinazzjoni hemmhekk, u kull ħaġa oħra fuq il-magna żżomm il-passaġġ normali tagħha. Is-sottilezza hi li t-torbot jagħżel l-indirizz tas-sors waqt li t-tabella tar-rotot xorta tagħżel il-ħruġ. Torbot waħdu ma jċaqlaqx traffiku bla rotta fit-tunnel, u dan huwa l-iżball wara l-biċċa l-kbira tar-rapporti “trabbejt u xorta joħroġ mill-mod ħażin”.
import socket
s = socket.socket()
s.bind(("10.8.0.2", 0))
s.connect(("build.internal.example", 443))Għodod ta' livell ogħla juru l-istess idea: curl --interface 10.8.0.2, CURLOPT_INTERFACE ta' PHP, u l-argument source_address fil-klijenti HTTP ta' Python. L-indirizz irid ikun tat-tunnel, u żball tipografiku hawn ifalli bħala żball ordinarju tal-konnessjoni, mhux ilment tar-rotot. Torbot ma' isem tal-apparat minflok indirizz huwa privileġġ ta' Linux u ma jgħaddix għal Windows jew macOS, u għalhekk l-iskripts portabbli jgħaddu l-indirizz.
Linux: qabbel is-sid, mhux l-isem tal-programm
Il-kernel jista' jaqbel mal-utent sid ta' socket, għalhekk kont iddedikat isir is-selettur.
ip rule add uidrange 1001-1001 lookup 100
ip route add default dev tun0 table 100Dan jaħdem biss jekk it-tunnel mhuwiex diġà r-rotta default. Ibda l-klijent b'--route-nopull, jew iffiltra r-redirect imbuttat b'--pull-filter ignore "redirect-gateway" fuq OpenVPN 2.4 u aktar tard, imbagħad żid l-entrata tat-tabella int stess. Inkella ż-żewġ default jeżistu u dak b'prijorità aktar baxxa jirbaħ. Il-verżjoni deliberata hi li tiddirieġi r-rotta default lejn il-gateway tat-tunnel, jew tagħmel dan minn skript tad-disconnect: iżżomm it-traffiku 'l barra mill-internet meta jaqa' t-tunnel, imma dak huwa kill switch, mhux selettur, u jibqa' sakemm xi ħadd ineħħu.
Il-verżjoni aktar b'saħħitha hi spazju tal-isem tan-network. Oħloqha, ġġib il-klijent ġewwa, u ibda l-applikazzjoni b'ip netns exec. Ħadd barra l-ispazju tal-isem ma jara l-interface tat-tunnel, għalhekk l-applikazzjoni ma tistax taqa' lura għall-rotta tal-host b'aċċident. L-ispiża hi reali: l-ispazju tal-isem jeħtieġ par veth biex jasal għan-network fiżiku u fajl tar-riżolver tiegħu stess, għaliex l-ispazju tal-isem tal-mount ma jaqsamx is-settings tar-riżoluzzjoni tal-host.
Żewġ modi ta' falliment jispjegaw il-biċċa l-kbira tat-tnixxijiet. Ir-riżoluzzjoni tal-ismijiet xorta sseħħ fir-riżolver tal-host, għalhekk it-tfittxija toħroġ barra mit-tunnel anki meta l-konnessjoni TCP tidħol ġewwa. U IPv6 jeħtieġ ip -6 rule tiegħu stess, għaliex regola v4 ma tkoprihx.
Windows u macOS: agħti ambitu lill-firewall jew tgħaddi proxy
Windows ukoll m'għandu l-ebda selettur tar-rotta għal kull applikazzjoni, imma r-regoli tal-firewall tiegħu jistgħu jingħataw ambitu għal profil, u adapter VPN jista' jiġi kklassifikat bħala Pubbliku waqt li l-LAN tad-dar jibqa' Privat. Oħloq regoli tal-blokk tal-ħruġ għall-programm fuq il-profil Privat u Dominju, ħalli l-Pubbliku miftuħ, u l-applikazzjoni tista' tasal għan-network biss mit-tunnel. Issettja l-kategorija tan-network tal-konnessjoni l-ewwel, imbagħad ikkonferma li r-regola qabet fil-pannell tal-monitor tal-firewall. Huwa blokk, mhux rotta: ifalli magħluq meta jaqa' t-tunnel, u ma jistax iwaqqaf applikazzjoni li tinjora l-firewall.
macOS isegwi l-istess loġika b'għodod differenti. Semmiegħ SOCKS li jintlaħaq minn SSH huwa l-għażla l-inqas invażiva, għaliex ssh -D 1080 user@host joħloq port lokali wieħed u huma biss l-applikazzjonijiet konfigurati biex jużawh li jieħdu dak il-passaġġ. Regola pf tista' tipprojbixxi programm skont l-utent jew il-grupp, imma xorta ma tistax tagħżel it-tunnel għal dak il-programm waħdu. Tunnelblick ma jista' jiffiltra skont id-dominju xejn, għaliex ir-rotot jaħdmu fuq indirizzi; l-utenti ta' OpenConnect iduru lejn vpn-slice meta s-server jimbotta lista ta' prefissi wisgħa wisgħa.
Żewġ soluzzjonijiet ikopru dak li jonqsu l-għodod tal-pjattaforma. Estensjonijiet tal-browser li jbiddlu l-proxy skont id-dominju huma t-tweġiba prattika għal “dan is-sit biss”, għaliex jaġixxu f'saff tal-applikazzjoni fejn l-ismijiet għadhom jeżistu; jkopru browser wieħed u xejn aktar. Dak il-ħafif huwa li tmexxi l-klijent tal-fornitur ġewwa magna virtwali biex il-mistieden jippossiedi l-bidla tar-rotta waqt li l-host iżomm il-passaġġ tiegħu, bl-ispiża ta' żewġ stacks tan-network biex jinżammu.
Qabża SOCKS għal għodod mingħajr għażla ta' torbot
Il-biċċa l-kbira tal-applikazzjonijiet jistgħu jiġu diretti lejn proxy HTTP jew SOCKS anki meta ma jafu xejn dwar l-interfaces. Klijent SSH jipprovdi wieħed mingħajr ebda bidla fuq in-naħa tas-server:
ssh -N -D 127.0.0.1:9999 [email protected]Kull ħaġa konfigurata biex tuża dak il-port toħroġ fil-bastion waqt li l-bqija tad-desktop iżżomm il-konnessjoni normali tagħha. Istanza lokali ta' 3proxy marbuta mal-indirizz tat-tunnel tagħmel l-istess għal port wieħed mingħajr SSH, u stunnel ikopri port wieħed imgeżwer fi TLS. Il-limiti huma prattiċi: proxy jġorr biss protokolli li jafu jużawh, UDP jeħtieġ assoċjazzjoni UDP SOCKS5 li l-setting “SOCKS5” ta' ħafna klijenti ma tixgħilx, u DNS irid jiġi riżolt mill-proxy (socks5h f'curl) jew l-isem jitlek lir-riżolver lokali.
Żomm is-semmiegħ fuq il-loopback sakemm magna oħra ma teħtiġux.
Ivverifika l-passaġġ b'qbid, mhux b'messaġġ ta' status
Twieqeb tal-istat tal-applikazzjoni jiddeskrivu s-setting, mhux il-packet. Aqbad fuq iż-żewġ interfaces u qabbel:
tcpdump -i any -n port 443
ss -tnp | grep 443Jekk il-konnessjoni tidher fuq l-interface fiżika mingħajr entrata li taqbel fuq it-tunnel, is-selettur mhuwiex fis-seħħ, tkun xi tkun ir-rapport tal-klijent. Iċċekkja IPv6 u r-riżolver separatament, u ċċekkja passaġġ ieħor bħal proċess ta' għajnuna jew proxy tas-sistema ereditat.
Imbagħad agħżel il-konfini li taqbel mar-rekwiżit: proxy huwa biżżejjed għal sit wieħed, regola UID biżżejjed għal kont wieħed, profil tal-firewall biżżejjed meta l-konnessjoni trid ifalli magħluq, u l-ispazju tal-isem huwa l-unika għażla li taħbi t-tunnel minn kull ħaġa barra minnu.