Blywende roetes vir ’n Mac-VPN: networksetup of ’n koppelhaak?
’n Roete wat ná elke herverbinding getik word, is nie ’n beleid nie. Besluit of die voorvoegsel aan die VPN-diens, aan ’n tydelike toets of aan ’n haak vir onderhandelde adresse behoort.
’n Roete wat ná elke verbinding getik word, los die oomblik op en nie die week nie. Op macOS is die duursame keuse gewoonlik ’n voorvoegsel wat by die VPN-diens gestoor word, want die diens herinstalleer dit by elke verbinding en verwyder dit wanneer die diens af is. Die alternatiewe is ’n tydelike route add vir toetsing en ’n koppelhaak vir adresse wat eers ná onderhandeling bekend is.
Besluit of die roete aan die diens of aan die sessie behoort
Vra waarvan die voorvoegsel afhang. As dit ’n vaste private netwerk agter ’n inheemse VPN-diens is, behoort die roete aan daardie diens. As dit afhang van ’n eweknie-adres wat per verbinding verander, kan ’n haak of ’n statusgedrewe taak die beter eienaar wees. As jy net die volgende vyf minute ’n pad toets, is ’n tydelike roete genoeg.
Die diensgebonde roete het die skoonste lewensiklus. Dit verskyn saam met die diens en verdwyn wanneer die diens nie gekoppel is nie, so dit kan nie die tonnel oorleef waarheen dit wys nie. Daardie eienskap is meer werd as die gerief van ’n eenreëlopdrag.
’n Sessiegebonde roete behoort aan die koppelvlak, en daardie nommer verander sonder kennisgewing. ’n Herverbinding kan die tonnel ’n ander utun-naam gee as wat die vorige sessie gebruik het, wat ’n hardgekodeerde opdrag verander in ’n roete wat na niks wys of, erger, na ’n ander tonnel.
Lees die huidige roete- en dienstoestand
Begin met die name wat die stelsel werklik gebruik. Die diensnaam in Netwerkinstellings is die identifiseerder vir die opdragte hieronder, en die huidige roetelys wys wat die gekoppelde kliënt geïnstalleer het. Lees albei terwyl die tonnel op is.
scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5
Daardie opsoek wys watter poort en koppelvlak die kernel op hierdie oomblik vir hierdie adres sou kies. As dit reeds die tonnel kies, is die voorvoegsel gedek en sou ’n nuwe roete oorbodig wees. As dit die plaaslike router kies, ontbreek daardie voorvoegsel in die tonnel.
Let op die eweknie-adres terwyl jy gekoppel is. Dit word die poortwaarde in die diensgebonde roete, en dit is gewoonlik die bestemming wat vir die tonnel se verstekroete in netstat -rn gewys word.
Stoor die voorvoegsel met networksetup
Die werktuig networksetup heg bykomende roetes aan ’n netwerkdiens. Vir ’n diens met die naam OfficeVPN en ’n private voorvoegsel wat deur die tonnel-eweknie bereik word, is die vorm:
sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN
Elke drietal ná die diensnaam gee ’n bestemming, sy netmasker en die tonnel-eweknie as poort. Een oproep kan verskeie voorvoegsels dra, en ’n leë oproep wis die gestoorde lys. Die getter is die verifikasie-stap; as die lys leeg is, het die stel nie op die diens toegepas wat jy dink nie.
Die poort moet die tonnel-eweknie wees, nie die fisiese router nie. ’n Roete wat die plaaslike poort noem, stuur die private voorvoegsel uit deur die fisiese koppelvlak, wat die oorspronklike fout met ekstra stappe is. ’n Verouderde eweknie is die algemeenste rede waarom ’n korrek-lykende roete nooit verkeer dra nie. Lees die eweknie weer uit die gekoppelde toestand eerder as om ’n adres uit ’n ou nota te kopieer.
Gebruik route add net vir ’n toets
’n Direkte roete is nuttig om te bewys dat ’n voorvoegsel werk voordat jy dit permanent maak. Die koppelvlakvorm vermy ’n poortopsoek:
sudo route -n add -net 10.20.0.0/16 -interface utun4
Die roete verdwyn by die volgende herverbinding en hang af van die koppelvlaknommer wat vandag bestaan. Dit maak dit ’n diagnostikum, nie ’n ontplooiing nie. As die toets werk en die diensgebonde roete nie, vergelyk eerste die poortwaarde; dit is die veld wat die meeste verkeerd is.
Wees versigtig met raad wat die VPN se verstekroete vervang om splitsgedrag af te dwing. ’n Kliënt wat ’n volle tonnel afdwing, kan sy roetes herinstalleer ná ’n herverbinding of ’n beleidsverfrissing, so die handmatige verandering word stilweg ongedaan gemaak. ’n Handvol private voorvoegsels is ’n roeteprobleem; om alle internetverkeer plaaslik te hou teen ’n volle-tonnel-beleid is ’n besluit aan die bedienerkant.
Kies ’n haak net wanneer die adres onderhandel word
Vir PPP-gebaseerde skakels soos L2TP, voer macOS /etc/ppp/ip-up uit sodra die skakel tot stand kom. Die skrip ontvang die koppelvlaknaam en die onderhandelde plaaslike en afgeleë adresse, so dit kan ’n roete byvoeg wat van die eweknie afhang wat die bediener toegewys het. Dit is presies die geval wat ’n vaste diensroete nie kan uitdruk nie.
IKEv2 en verskafferkliënte gebruik dalk glad nie daardie PPP-pad nie, wat beteken die skrip kan die hele sessie stil bly. Wanneer dit gebeur, is ’n launchd-taak wat scutil --nc status peil en op ’n toestandsverandering reageer die ekwivalente meganisme, met ’n klein vertraging.
Watter haak jy ook al gebruik, maak dit idempotent en laat dit net roetes verwyder wat dit geskep het. ’n Skrip wat elke roete verwyder wat die tonnel noem, sal uiteindelik die roete verwyder wat die VPN-bediener bereikbaar hou, en die verbinding sal val sodra dit slaag.
Sluit af deur die private bestemming, gewone blaaiery en ’n herverbinding of slaapsiklus te toets. Kyk dan na scutil --dns, want naamresolusie is ’n aparte beleid en ’n werkende roete bewys nie dat die private name oplos nie.