Sut i gyfeirio un ap drwy VPN heb y peiriant cyfan
Nid oes unrhyw gliniadur heb ei reoli yn cynnig swits VPN fesul proses. Dewiswch yr haen sy’n dewis traffig: soced wedi’i rwymo, rheol UID, proffil mur tân neu naid SOCKS.
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“.
| 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 |
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 100Nid 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 443Os 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.