Þú setur route skipun í /etc/ppp/ip-up, tengir skrifstofuganginn aftur, og skráin keyrir aldrei. Ekkert er að skriftunni: sú tenging fer alls ekki gegnum PPP. Innbyggðu Cisco IPSec og IKEv2 biðlararnir ræsa aldrei pppd, svo hook-mappan er aldrei lesin, á meðan PPTP og L2TP yfir IPSec fara enn í gegnum hana. Finndu út hvort tilvikið á við þig og kveiktu síðan á því sem ekki er PPP úr launchd-vaktstarfi.

Athugaðu viðmótið áður en þú breytir hook

Tvær skipanir ráða því hvaða aðferð getur virkað. Listaðu stilltu þjónusturnar og listaðu síðan viðmótin sem eru til staðar meðan gangurinn er uppi. Heiti viðmótsins er sönnunin; merkið í System Settings er það ekki.

scutil --nc list
ifconfig -l | tr ' ' '\n' | grep -E '^(utun|ppp)[0-9]+$'

Þjónusta sem framleiðir ppp0 keyrir PPP-hookin og mun keyra skrána þína. Cisco IPSec eða IKEv2 þjónusta framleiðir þess í stað utun tæki, gangviðmót án PPP-lags, svo ekkert inni í /etc/ppp kemst að því. Þegar báðar gerðir birtast skaltu athuga við hvaða þjónustu þú tengdist. Fólk eyðir síðdegi í röngu hookinu vegna þess að það les heiti biðlarans.

Á PPP-leiðinni verður skráin að vera í eigu root og keyranleg, því pppd athugar bæði áður en hann keyrir nokkuð. install stillir eiganda og hátt í einu skrefi.

sudo install -o root -g wheel -m 0755 /dev/null /etc/ppp/ip-up
sudo ls -l /etc/ppp/ip-up

Skrá sem er búin til í Finder eða grafískum ritli endar oft í eigu reikningsins þíns, eða án keyrslubits, og mistekst þá jafn hljóðlega og hookið sem vantaði. Settu ip-down við hlið hennar núna. root og wheel í eigandadálknum ásamt rwxr-xr-x í háttadálknum er það sem þú vilt.

Láttu launchd kveikja á skriftunni þegar gangur birtist

Fyrir biðlara sem snerta aldrei PPP verður kveikjan að koma annars staðar frá, og geymsla kerfisstillinga er heiðarlegi uppruninn: macOS endurskrifar hana við hverja gangbreytingu. launchd-starf sem vaktar þá möppu er kallað þegar gangur birtist eða hverfur.

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
  <key>WatchPaths</key>
  <array><string>/Library/Preferences/SystemConfiguration</string></array>
  <key>Label</key><string>net.example.tunnel-watch</string>
  <key>ProgramArguments</key>
  <array><string>/bin/sh</string><string>/usr/local/sbin/tunnel-hook</string></array>
  <key>RunAtLoad</key><true/>
  <key>ThrottleInterval</key><integer>20</integer>
</dict>
</plist>

Settu það upp sem launch daemon, ekki sem umboð fyrir hvern notanda, því leiðrétting leiða tilheyrir vélinni. bootstrap kemur í stað eldra formsins load -w í núverandi útgáfum. RunAtLoad gerir fyrstu keyrsluna sýnilega og ThrottleInterval kemur í veg fyrir að straumur Wi-Fi-tenginga ræsi skriftuna aftur og aftur.

sudo install -o root -g wheel -m 0644 tunnel-watch.plist \
  /Library/LaunchDaemons/net.example.tunnel-watch.plist
sudo launchctl bootstrap system \
  /Library/LaunchDaemons/net.example.tunnel-watch.plist

Gildran er sú að vaktaða mappan breytist líka vegna atburða sem tengjast VPN-inu þínu ekki neitt: Wi-Fi-tenging, DHCP-endurnýjun, kapall sem er stingið í. Vörðurinn hér fyrir neðan breytir hávaðasamri kveikju í nothæft hook, og lína í logginu útskýrir leið á undarlegri stundu.

Eignarhald nær yfir plist jafnt og skriftuna. Daemon sem keyrir skrá í möppu sem þinn eigin reikningur getur skrifað í gefur þeim reikningi root.

Verndaðu skriftuna svo önnur keyrsla breyti engu

Skriftan ákveður fyrst hvort gangurinn er til og fer hljóðlega út þegar hann er ekki. Allt eftir það verður að vera öruggt að endurtaka, því kveikjan fer af stað miklu oftar en ein tenging. Leystu viðmótið á keyrslutíma í stað þess að harðkóða vísitölu sem breytist við næstu tengingu.

#!/bin/sh
set -u
TUN=$(ifconfig -l | tr ' ' '\n' | grep -m1 '^utun[0-9]' || true)
[ -n "$TUN" ] || exit 0
netstat -rn -f inet | grep -q '^10\.42' && exit 0
route -n add -net 10.42.0.0/16 -interface "$TUN"

route add fer út með stöðu sem er ekki núll þegar leiðin er þegar til, svo skrifta sem meðhöndlar hverja stöðu sem ekki er núll sem mistök tilkynnir brotið hook í hvert sinn sem hún gerir rétt. Prófið með netstat hér að ofan gerir það tilvik að skýru no-op.

Tilvera viðmótsins er veikari sönnun en hún lítur út, því aðrir VPN-biðlarar og sumar gámumhverfi búa líka til utun tæki. Spurðu þjónustuna sjálfa með scutil --nc status "Office VPN" og krefstu tengdrar stöðu áður en þú snertir leiðarstillingar. Hafðu svarið í línu í logginu, því viku síðar er þessi færsla eina útskýringin sem þú hefur.

Færðu gáttina til baka án þess að brjóta DNS

Þegar gangurinn tekur yfir sjálfgefnu leiðina fer venjuleg vafrun út um skrifstofuna og staðbundin internetleið hættir að virka. Gríptu fyrst beini fyrir líkamlega viðmótið og beindu sjálfgefnu leiðinni svo aftur að honum. DHCP er betra en að þátta töflu sem inniheldur þegar sjálfgefna leið gangsins.

PHYS=en0
GW=$(ipconfig getoption "$PHYS" router)
[ -n "$GW" ] && sudo route -n change default "$GW"

Leysarar eru sérstakt lag með sérstöku tóli, og að laga leiðina lagar þá ekki. Sjáðu með scutil --dns hvað er í gildi og lagaðu svo það sem framleiðir það: röð þjónustanna og DNS-færslurnar á líkamlegu þjónustunni. Að tæma skyndiminnið greinir uppflettingu sem stendur eftir netkerfisskipti; það er ekki eitthvað til að tímasetja.

Gangur sem lifir Wi-Fi-skipti á meðan DNS stendur er þriðja bilunin: sudo killall -HUP mDNSResponder lætur leysarann lesa stillinguna sína aftur. Notaðu það einu sinni, með höndunum.

Sannaðu að starfið kveiki af sjálfu sér

Þvingaðu eina keyrslu með kickstart -k áður en þú treystir vaktleiðinni og lestu síðan útstöðuna sem starfið skráði. Hrein útstöð sannar að skriftan virki; hún sannar ekki að kveikjan virki. Taktu síðan tenginguna úr og tengdu aftur með starfið hlaðið, og fylgstu með keyrslu sem þú baðst ekki um.

sudo launchctl kickstart -k system/net.example.tunnel-watch
sudo launchctl print system/net.example.tunnel-watch | grep -E 'last exit code|state ='

Athugaðu scutil --nc status fyrir og eftir hverja tilraun. Skrifta sem keyrði meðan gangurinn var niðri sannar ekkert um tengileiðina.

Niðurrifsgreiinin á skilið sömu meðferð og tengigreinin: fjarlægðu leiðina með höndunum, láttu starfið keyra og staðfestu að hún komi aftur. Hook sem bætir við leið og fjarlægir hana aldrei skilur eftir vél sem hegðar sér illa viku síðar, án þess að nokkuð tengi atburðina tvo. Þegar báðar hegðanir standast dregur sudo launchctl bootout system/net.example.tunnel-watch starfið hreint til baka. Vaktdæmi sem er látið vera hlaðið er leiðin sem einstök viðgerð verður óútskýrð leið mánuðum síðar.

Tengdir greinar