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.

MechanismWhat selectsCoversOn tunnel drop
Socket bindsource addressa client you controlconnections fail
UID rule (Linux)owning userevery process of one accountconnections fail
Firewall profile (Windows)adapter profileone programfails closed
Network namespacenamespace membershipeverything started insideconnections fail
SOCKS hopapp proxy settingone app or one browser profileconnections 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 100

Dan 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 443

Jekk 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.

Artikli relatati