Hvernig beina á einu forriti í gegnum VPN án allrar vélarinnar
Enginn óstýrður skrifborðsviðmót býður upp á VPN-rofa fyrir hvert ferli. Veldu lagið sem velur umferðina: bundinn sökkull, UID-regla, eldveggsprófíll eða SOCKS-stökk.
VPN-biðlarinn tengist, vafrinn virkar, og eina skipunin sem þér er í alvöru annt um fer enn út um heimatenginguna þína. Eða hið gagnstæða gerist: göngin grípa sjálfgefnu leiðina og staðbundni skráþjónninn hverfur af skrifborðinu. Ég lenti í þessu með byggingaragent sem þurfti að ná í innra spegil gerviefna meðan afgangur hýsisins var á skrifstofuneti, og biðlarinn bauð nákvæmlega tvo valkosti: alla umferð eða enga. Beiðnin er hin sama í báðar áttir, þetta forrit en ekki öll vélin, og flestir biðlarar hafa engan gátreit fyrir það, því leiðataflan hefur aldrei vitað hvað forrit er.
Hvers vegna leiðataflan getur ekki séð forritið þitt
Þegar ferli sendir pakka flettir staflinn upp áfangastaðnum í leiðatöflunni. Hvorki nafn keyrsluskrárinnar né gáttin kemur inn í þá uppflettingu. Lénsnöfn mistakast af sömu ástæðu: göng bera umferð á vistfang, og þegar nafn hefur leyst í vistfang er beiningin eina stöngin sem kjarninn á enn eftir. Þess vegna endar „VPN aðeins fyrir þessa síðu“ á að þýða milliþjón, og „VPN aðeins fyrir þetta forrit“ þýðir eitt úr litlu safni kerfa.
| 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 |
Ekkert þessara er leið fyrir hvert ferli. Hvert þeirra færir ákvörðunina á lag sem sér forritið, notandann eða eigin stillingar forritsins.
Einn áfangastaður er enn leið, ekki forritsregla. Á macOS er venjulega uppskriftin að taka hak af „Senda alla umferð um VPN“ og bæta við hýsilleið: sudo route add -host internal-tuner.example -interface ppp0, sem er aftur fjarlægð með sudo route delete -host internal-tuner.example -interface ppp0. Lestu fyrst nafn viðmótsins úr ifconfig, því ppp0 er aðeins dæmi. Villimerki virka ekki í hýsilleið, svo þjónusta sem talar við nokkur nöfn þarf eina færslu fyrir hvert nafn, og reglan nær yfir hvert ferli á vélinni, ekki það sem þú hafðir í huga.
Bindu sökkulinn við vistfang ganganna
Þegar þú stýrir biðlaranum er binding ódýrasti veljarinn. Sökkull bundinn við staðbundið vistfang ganganna fer út um það viðmót svo lengi sem leið að áfangastaðnum er þar til, og allt annað á vélinni heldur venjulegri leið sinni. Fíngerðin er sú að bindingin velur upprunavistfangið meðan leiðataflan velur enn útganginn. Binding ein og sér færir ekki umferð sem á enga leið inn í göngin, og það er mistakið á bak við flestar tilkynningar um „ég bindi það og það fer enn út um röngu hliðina“.
import socket
s = socket.socket()
s.bind(("10.8.0.2", 0))
s.connect(("build.internal.example", 443))Tól á hærra stigi bjóða sömu hugmynd: curl --interface 10.8.0.2, CURLOPT_INTERFACE í PHP og röksemdin source_address í HTTP-biðlurum Python. Vistfangið verður að tilheyra göngunum, og innsláttarvilla hér bregst sem venjuleg tengingarvilla, ekki sem kvörtun um beiningu. Binding við tækisnafn í stað vistfangs er forréttindi í Linux og flyst ekki yfir á Windows eða macOS, þess vegna senda færanleg skriftur vistfangið.
Linux: passið eigandann, ekki nafn forritsins
Kjarninn getur passað eiganda sökkuls, svo sérstakur reikningur verður veljarinn. Setjið göngin í eigin leiðatöflu og sendið þangað aðeins umferð þess reiknings:
ip rule add uidrange 1001-1001 lookup 100
ip route add default dev tun0 table 100Þetta virkar aðeins ef göngin eru ekki þegar sjálfgefna leiðin. Ræstu biðlarann með --route-nopull, eða síaðu ýttu endurbeininguna með --pull-filter ignore "redirect-gateway" á OpenVPN 2.4 og nýrri, og bættu svo töflufærslunni við sjálf. Annars eru báðar sjálfgefnar leiðir til og sú með lægra forgang vinnur. Viljandi útgáfan af því er að beina sjálfgefnu leiðinni að gátt ganganna, eða gera það úr aftengingarskriftu: það heldur umferð frá internetinu þegar göngin falla, en það er neyðarrofi, ekki veljari, og það stendur þar til einhver fjarlægir það.
Sterkari útgáfan er netnafnrými. Búðu það til, keyrðu biðlarann inni og ræstu forritið með ip netns exec. Ekkert utan nafnrýmisins sér viðmót ganganna, svo forritið getur ekki fallið aftur á leið hýsisins fyrir slysni. Kostnaðurinn er raunverulegur: nafnrýmið þarf veth-par til að ná líkamlega netinu og eigin leysiskrá, því uppsetningarnafnrýmið deilir ekki leysistillingum hýsisins.
Tveir bilunarmátar útskýra flest lekin. Nafnleysing á sér enn stað í leysi hýsisins, svo fyrirspurnin fer út fyrir göngin jafnvel þótt TCP-tengingin fari inn. Og IPv6 þarf sína eigin ip -6 rule, því v4-regla nær ekki yfir hana.
Windows og macOS: takmarkaðu eldvegginn eða framseldu milliþjón
Windows hefur heldur engan leiðarval fyrir hvert forrit, en hægt er að takmarka eldveggsreglur þess við prófíl, og VPN-móttakara má flokka sem „opinberan“ meðan heimanetið helst „einka“. Búðu til útleiðarblokkunarreglur fyrir forritið í prófílunum „einka“ og „lén“, láttu „opinberan“ vera opinn, og forritið kemst aðeins á netið um göngin. Stilltu fyrst netflokk tengingarinnar og staðfestu svo að reglan hafi passað í eftirlitsglugga eldveggsins. Þetta er blokkun, ekki leið: hún bregst lokuð þegar göngin falla, og hún getur ekki stöðvað forrit sem hunsar eldvegginn.
macOS fylgir sömu rökfræði með öðrum tólum. SOCKS-hlustun sem næst um SSH er minnst íþyngjandi kosturinn, því ssh -D 1080 user@host býr til eina staðbundna gátt og aðeins forrit stillt til að nota hana fara þá leið. Regla pf getur blokkað forrit eftir notanda eða hópi, en hún getur enn ekki valið göngin fyrir það eitt. Tunnelblick getur alls ekki síað eftir léni, því leiðir vinna með vistföng; notendur OpenConnect grípa til vpn-slice þegar þjónninn ýtir of breiðum forskeytalista.
Tvær útgönguleiðir ná yfir það sem tól stýrikerfisins missa. Vafraviðbætur sem skipta um milliþjón eftir léni eru hagnýtt svar við „aðeins þessi síða“, því þær starfa á forritslaginu þar sem nöfn eru enn til; þær ná yfir einn vafra og ekkert annað. Hráa leiðin er að keyra biðlara framleiðandans í sýndarvél svo gesturinn eigi leiðarbreytinguna meðan hýsið heldur sinni leið, gegn kostnaði við tvo netstafla í viðhald.
SOCKS-stökk fyrir tól án bindimöguleika
Flest forrit má beina að HTTP- eða SOCKS-milliþjóni þótt þau viti ekkert um viðmót. SSH-biðlari útvegar einn án nokkurrar breytingar hjá þjóninum:
ssh -N -D 127.0.0.1:9999 [email protected]Allt sem er stillt til að nota þá gátt fer út hjá bastíunni meðan afgangur skrifborðsins heldur venjulegri tengingu sinni. Staðbundið eintak af 3proxy bundið við vistfang ganganna gerir hið sama fyrir eina gátt án SSH, og stunnel nær yfir eina TLS-vafna gátt. Takmörkin eru hagnýt: milliþjónn ber aðeins siðareglur sem kunna að nota hann, UDP þarf SOCKS5 UDP-samtengingu sem stilling „SOCKS5“ margra biðlara virkjar ekki, og DNS verður að leysa í gegnum milliþjóninn (socks5h í curl), annars lekur nafnið til staðbundna leysisins.
Haltu hlustuninni á lykkjubakka nema önnur vél þurfi hana.
Sannreynið leiðina með skráningu, ekki stöðuskilaboðum
Stöðugluggar forrita lýsa stillingunni, en ekki pakkanum. Skráðu á báðum viðmótum og berðu saman:
tcpdump -i any -n port 443
ss -tnp | grep 443Ef tengingin birtist á líkamlega viðmótinu án samsvarandi færslu á göngunum, þá er veljarinn ekki í gildi, hvað sem biðlarinn segir. Athugaðu IPv6 og leysinn sérstaklega, og athugaðu hvort önnur leið sé til, svo sem hjálparferli eða arftekinn kerfismilliþjónn.
Veldu svo þau mörk sem passa við kröfuna: milliþjónn er nóg fyrir eina síðu, UID-regla er nóg fyrir einn reikning, eldveggsprófíll er nóg þegar tengingin verður að bregðast lokuð, og nafnrými er eini kosturinn sem felur göngin fyrir öllu utan þeirra.