Trajne poti za VPN na Macu: networksetup ali hook ob povezavi?
Pot, vpisana po vsaki ponovni povezavi, ni politika. Odločite se, ali predpona pripada storitvi VPN, začasnemu preizkusu ali hooku za naslove, ki so znani šele po pogajanju.
Pot, vpisana po vsaki povezavi, reši trenutek in ne tedna. V macOS je trajna izbira običajno predpona, shranjena s storitvijo VPN, ker jo storitev ob vsaki povezavi znova namesti in odstrani, ko storitev ni povezana. Alternativi sta začasni route add za preizkušanje in hook ob povezavi za naslove, ki so znani šele po pogajanju.
Odločite se, ali pot pripada storitvi ali seji
Vprašajte, od česa je odvisna predpona. Če gre za fiksno zasebno omrežje za izvorno storitvijo VPN, pot pripada tej storitvi. Če je odvisna od naslova partnerja, ki se spreminja ob vsaki povezavi, je lahko hook ali opravilo, ki ga vodi stanje, boljši lastnik. Če preverjate le pot za naslednjih pet minut, zadošča začasna pot.
Pot, vezana na storitev, ima najčistejši življenjski cikel. Pojavi se s storitvijo in izgine, ko storitev ni povezana, zato ne more preživeti tunela, na katerega kaže. Ta lastnost je vredna več kot udobje enovrstičnega ukaza.
Pot, vezana na sejo, pripada vmesniku in ta številka se spremeni brez obvestila. Ponovna povezava lahko tunelu dodeli drugo ime utun kot prejšnja seja, kar trdo kodiran ukaz spremeni v pot, ki ne kaže nikamor ali, še huje, v drug tunel.
Preberite trenutno stanje poti in storitve
Začnite z imeni, ki jih sistem dejansko uporablja. Ime storitve v omrežnih nastavitvah je identifikator za spodnje ukaze, trenutna tabela poti pa kaže, kaj je namestil povezani odjemalec. Preberite oboje, medtem ko je tunel aktiven.
scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5
To iskanje pokaže, kateri prehod in vmesnik bi jedro izbralo za ta naslov v tem trenutku. Če že izbira tunel, je predpona pokrita in nova pot bi bila odveč. Če izbira lokalni usmerjevalnik, tunelu manjka ta predpona.
Zabeležite naslov partnerja, medtem ko ste povezani. Postane vrednost prehoda v poti, vezani na storitev, in običajno je cilj, prikazan za privzeto pot tunela v netstat -rn.
Shranite predpono z networksetup
Orodje networksetup pripne dodatne poti omrežni storitvi. Za storitev z imenom OfficeVPN in zasebno predpono, dosegljivo prek partnerja tunela, je oblika:
sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN
Vsaka trojka za imenom storitve poda cilj, njegovo omrežno masko in partnerja tunela kot prehod. En klic lahko nosi več predpon, prazen klic pa izbriše shranjeni seznam. Bralnik je korak preverjanja; če je seznam prazen, nastavitev ni bila uporabljena za storitev, ki jo mislite.
Prehod mora biti partner tunela, ne fizični usmerjevalnik. Pot, ki imenuje lokalni prehod, pošlje zasebno predpono skozi fizični vmesnik, kar je prvotna napaka z dodatnimi koraki. Zastarel partner je najpogostejši razlog, da pot, ki izgleda pravilno, nikoli ne prenaša prometa. Ponovno preberite partnerja iz povezanega stanja, namesto da kopirate naslov iz stare opombe.
route add uporabite samo za preizkus
Neposredna pot je uporabna za dokaz, da predpona deluje, preden jo naredite trajno. Oblika z vmesnikom se izogne iskanju prehoda:
sudo route -n add -net 10.20.0.0/16 -interface utun4
Pot izgine ob naslednji ponovni povezavi in je odvisna od številke vmesnika, ki danes obstaja. To jo naredi za diagnostiko, ne za uvajanje. Če preizkus deluje, pot, vezana na storitev, pa ne, najprej primerjajte vrednost prehoda; to je polje, ki je najpogosteje napačno.
Bodite previdni pri nasvetih, ki nadomestijo privzeto pot VPN, da bi vsilili delitev. Odjemalec, ki uveljavlja polni tunel, lahko po ponovni povezavi ali osvežitvi politike znova namesti svoje poti, zato je ročna sprememba tiho razveljavljena. Nekaj zasebnih predpon je problem usmerjanja; ohranjati ves internetni promet lokalno proti politiki polnega tunela je odločitev na strani strežnika.
Hook izberite le, ko se naslov pogaja
Za povezave na osnovi PPP, kot je L2TP, macOS izvede /etc/ppp/ip-up, ko je povezava vzpostavljena. Skript prejme ime vmesnika in dogovorjena lokalni ter oddaljeni naslov, zato lahko doda pot, ki je odvisna od partnerja, ki ga je dodelil strežnik. To je natanko primer, ki ga fiksna pot storitve ne more izraziti.
IKEv2 in odjemalci proizvajalcev te poti PPP morda sploh ne uporabljajo, kar pomeni, da lahko skript molči celo sejo. Ko se to zgodi, je opravilo launchd, ki sprašuje scutil --nc status in se odziva na spremembo stanja, enakovreden mehanizem z majhno zakasnitvijo.
Ne glede na to, kateri hook uporabite, naj bo idempotenten in naj odstranjuje le poti, ki jih je ustvaril sam. Skript, ki izbriše vsako pot, ki omenja tunel, bo na koncu izbrisal pot, ki ohranja strežnik VPN dosegljiv, in povezava bo padla takoj, ko uspe.
Končajte s preverjanjem zasebnega cilja, običajnega brskanja in cikla ponovne povezave ali spanja. Nato preglejte scutil --dns, ker je razreševanje imen ločena politika in delujoča pot ne dokazuje, da se zasebna imena razrešijo.