Mae’r cleient VPN yn cysylltu, mae’r porwr yn gweithio, ac mae’r un gorchymyn rydych chi wir yn poeni amdano yn dal i adael drwy eich cysylltiad cartref. Neu mae’r gwrthwyneb yn digwydd: mae’r twnnel yn cymryd y llwybr diofyn ac mae’r gweinydd ffeil lleol yn diflannu o’r bwrdd gwaith. Fe wnes i daro ar hyn gydag asiant adeiladu a oedd angen cyrraedd drych arteffact mewnol tra oedd gweddill y llu yn aros ar LAN y swyddfa, ac roedd y cleient yn cynnig dau ddewis yn union: yr holl draffig neu ddim. Mae’r cais yn y ddau gyfeiriad yr un peth, y rhaglen hon ac nid y peiriant cyfan, ac nid oes gan y rhan fwyaf o gleientiaid flwch ticio ar ei gyfer, oherwydd nid yw’r tabl llwybr erioed wedi gwybod beth yw rhaglen.

Pam na all y tabl llwybr weld eich rhaglen

Pan fydd proses yn anfon pecyn, mae’r pentwr yn chwilio am y cyfeiriad cyrchfan yn y tabl llwybr. Nid yw enw’r ffeil weithredadwy na’r porth yn mynd i mewn i’r chwiliad hwnnw. Mae enwau parth yn methu am yr un rheswm: mae twnnel yn cario traffig i gyfeiriad, a phan fydd enw’n datrys i un, cyfeirio yw’r unig lifer sydd gan y cnewyllyn o hyd. Dyna pam mai cyfieithydd yw ystyr „VPN ar gyfer y safle hwn yn unig“ yn y diwedd, ac mai un o gasgliad bach o fecanweithiau yw ystyr „VPN ar gyfer y rhaglen hon yn unig“.

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

Nid yw’r un o’r rhain yn llwybr fesul proses. Mae pob un yn symud y penderfyniad i haen sy’n gweld y rhaglen, y defnyddiwr neu gyfluniad yr ap ei hun.

Mae un gyrchfan yn dal yn llwybr, nid yn rheol rhaglen. Ar macOS y rysáit arferol yw dad-dicio „Anfon yr holl draffig dros VPN“ ac ychwanegu llwybr gwesteiwr: sudo route add -host internal-tuner.example -interface ppp0, a dynnir eto gyda sudo route delete -host internal-tuner.example -interface ppp0. Darllenwch enw’r rhyngwyneb o ifconfig yn gyntaf, oherwydd enghraifft yn unig yw ppp0. Nid yw cardiau gwyllt yn gweithio mewn llwybr gwesteiwr, felly mae angen un cofnod fesul enw ar wasanaeth sy’n siarad â sawl enw, ac mae’r rheol yn cwmpasu pob proses ar y peiriant, nid yr un oedd gennych mewn golwg.

Rhwymwch y soced i gyfeiriad y twnnel

Pan fyddwch chi’n rheoli’r cleient, rhwymo yw’r dewisydd rhataf. Mae soced wedi’i rwymo i gyfeiriad lleol y twnnel yn gadael drwy’r rhyngwyneb hwnnw cyhyd ag y bo llwybr i’r gyrchfan yno, ac mae popeth arall ar y peiriant yn cadw ei lwybr arferol. Y manylder yw bod y rhwymiad yn dewis y cyfeiriad ffynhonnell tra bod y tabl llwybr yn dal i ddewis yr allanfa. Nid yw rhwymiad ar ei ben ei hun yn symud traffig heb lwybr i’r twnnel, a dyna’r camgymeriad y tu ôl i’r rhan fwyaf o’r adroddiadau „fe’i rhwymais ac mae’n dal i fynd y ffordd anghywir“.

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

Mae offer lefel uwch yn cynnig yr un syniad: curl --interface 10.8.0.2, CURLOPT_INTERFACE yn PHP, a’r ddadl source_address yng nghleientiaid HTTP Python. Rhaid i’r cyfeiriad berthyn i’r twnnel, ac mae gwall teipio yma’n methu fel gwall cysylltiad cyffredin, nid fel cwyn cyfeirio. Mae rhwymo i enw dyfais yn lle cyfeiriad yn fraint Linux ac nid yw’n trosglwyddo i Windows na macOS, a dyna pam mae sgriptiau symudol yn pasio’r cyfeiriad.

Linux: parwch y perchennog, nid enw’r rhaglen

Gall y cnewyllyn baru perchennog soced, felly mae cyfrif pwrpasol yn dod yn ddewisydd. Rhowch y twnnel yn ei dabl llwybr ei hun ac anfonwch draffig y cyfrif hwnnw yn unig yno:

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

Nid yw hyn yn gweithio oni bai nad yw’r twnnel eisoes yn y llwybr diofyn. Dechreuwch y cleient gyda --route-nopull, neu hidlwch yr ailgyfeirio a wthiwyd gyda --pull-filter ignore "redirect-gateway" ar OpenVPN 2.4 ac yn ddiweddarach, yna ychwanegwch y cofnod tabl eich hun. Fel arall mae’r ddau lwybr diofyn yn bodoli ac mae’r un â’r blaenoriaeth isaf yn ennill. Y fersiwn fwriadol o hynny yw cyfeirio’r llwybr diofyn at borth y twnnel, neu wneud hynny o sgript datgysylltu: mae’n cadw traffig oddi ar y rhyngrwyd pan fydd y twnnel yn cwympo, ond swits diffodd yw hwnnw, nid dewisydd, ac mae’n aros nes i rywun ei dynnu.

Y fersiwn gryfach yw gofod enw rhwydwaith. Crëwch ef, rhedwch y cleient y tu mewn, a dechreuwch yr ap gyda ip netns exec. Nid oes dim y tu allan i’r gofod enw yn gweld rhyngwyneb y twnnel, felly ni all yr ap syrthio’n ôl i lwybr y gwesteiwr ar ddamwain. Mae’r gost yn real: mae angen pâr veth ar y gofod enw i gyrraedd y rhwydwaith ffisegol a’i ffeil datryswr ei hun, oherwydd nid yw’r gofod enw mowntio yn rhannu gosodiadau datrysiad y gwesteiwr.

Mae dau fodd methu yn egluro’r rhan fwyaf o’r gollyngiadau. Mae datrys enwau yn dal i ddigwydd yn natryswr y gwesteiwr, felly mae’r cwestiwn yn gadael y tu allan i’r twnnel hyd yn oed pan fydd y cysylltiad TCP yn mynd i mewn. Ac mae angen ei ip -6 rule ei hun ar IPv6, oherwydd nid yw rheol v4 yn ei chwmpasu.

Windows a macOS: cwmpaswch y mur tân neu ildiwch ddirprwy

Nid oes gan Windows ddetholydd llwybr fesul ap chwaith, ond gellir cwmpasu ei reolau mur tân i broffil, a gellir dosbarthu addasydd VPN fel „cyhoeddus“ tra bo’r LAN cartref yn aros yn „breifat“. Crëwch reolau blocio allan ar gyfer y rhaglen ar y proffiliau „preifat“ a „parth“, gadewch „cyhoeddus“ ar agor, ac ni all yr ap gyrraedd y rhwydwaith ond drwy’r twnnel. Gosodwch gategori rhwydwaith y cysylltiad yn gyntaf, yna cadarnhewch fod y rheol wedi cyfateb ym mhanel monitro’r mur tân. Bloc yw hwn, nid llwybr: mae’n methu ar gau pan fydd y twnnel yn cwympo, ac ni all atal ap sy’n anwybyddu’r mur tân.

Mae macOS yn dilyn yr un rhesymeg gydag offer gwahanol. Gwrandawr SOCKS a gyrrchir drwy SSH yw’r opsiwn lleiaf ymwthiol, oherwydd mae ssh -D 1080 user@host yn creu un porth lleol a dim ond apiau sydd wedi’u ffurfweddu i’w ddefnyddio sy’n cymryd y llwybr hwnnw. Gall rheol pf flocio rhaglen yn ôl defnyddiwr neu grŵp, ond ni all o hyd ddewis y twnnel ar gyfer y rhaglen honno yn unig. Ni all Tunnelblick hidlo yn ôl parth o gwbl, oherwydd mae llwybrau’n gweithio ar gyfeiriadau; mae defnyddwyr OpenConnect yn troi at vpn-slice pan fydd y gweinydd yn gwthio rhestr rhagddodiadau sy’n rhy lydan.

Mae dau ateb amgen yn cwmpasu’r hyn y mae offer y platfform yn ei golli. Estyniadau porwr sy’n newid dirprwy fesul parth yw’r ateb ymarferol i „dim ond y safle hwn“, oherwydd maent yn gweithredu ar haen yr ap lle mae enwau’n bod o hyd; maent yn cwmpasu un porwr a dim arall. Y dull crai yw rhedeg cleient y gwerthwr mewn peiriant rhithwir fel bod y gwestai yn berchen ar y newid llwybr tra bo’r llu yn cadw ei lwybr, ar gost dau bentwr rhwydwaith i’w cynnal.

Naid SOCKS ar gyfer offer heb opsiwn rhwymo

Gellir cyfeirio’r rhan fwyaf o apiau at ddirprwy HTTP neu SOCKS hyd yn oed pan nad ydynt yn gwybod dim am ryngwynebau. Mae cleient SSH yn darparu un heb unrhyw newid ar ochr y gweinydd:

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

Mae unrhyw beth sydd wedi’i ffurfweddu i ddefnyddio’r porth hwnnw yn gadael wrth y bastion tra bo gweddill y bwrdd gwaith yn cadw ei gysylltiad arferol. Mae achos lleol o 3proxy wedi’i rwymo i gyfeiriad y twnnel yn gwneud yr un peth ar gyfer un porth heb SSH, ac mae stunnel yn cwmpasu un porth wedi’i lapio mewn TLS. Mae’r terfynau’n ymarferol: dim ond protocolau sy’n gwybod sut i’w ddefnyddio y mae dirprwy yn eu cario, mae UDP angen cymdeithas UDP SOCKS5 nad yw gosodiad „SOCKS5“ llawer o gleientiaid yn ei alluogi, ac mae’n rhaid i DNS gael ei ddatrys gan y dirprwy (socks5h yn curl) neu mae’r enw’n gollwng i’r datryswr lleol.

Cadwch y gwrandawr ar loopback oni bai bod angen peiriant arall arno.

Gwiriwch y llwybr â chipiad, nid â neges statws

Mae ffenestri statws ap yn disgrifio’r gosodiad, nid y pecyn. Cipiwch ar y ddau ryngwyneb a chymharwch:

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

Os yw’r cysylltiad yn ymddangos ar y rhyngwyneb ffisegol heb gofnod cyfatebol ar y twnnel, nid yw’r dewisydd mewn grym, beth bynnag y mae’r cleient yn ei adrodd. Gwiriwch IPv6 a’r datryswr ar wahân, a gwirio am ail lwybr fel proses gynorthwyol neu ddirprwy system a etifeddwyd.

Yna dewiswch y ffin sy’n cyfateb i’r gofyniad: mae dirprwy yn ddigon ar gyfer un safle, mae rheol UID yn ddigon ar gyfer un cyfrif, mae proffil mur tân yn ddigon pan fydd yn rhaid i’r cysylltiad fethu ar gau, a gofod enw yw’r unig opsiwn sy’n cuddio’r twnnel rhag popeth y tu allan iddo.

Erthyglau cysylltiedig