VPN tal-Mac konnessa imma ip-up qatt ma nqabbad: waqqaf sorveljanza launchd
It-tunej ta’ Cisco IPSec u IKEv2 qatt ma jibdew pppd, għalhekk /etc/ppp/ip-up jibqa’ sieket. Issorvelja d-direttorju tal-konfigurazzjoni u ġiegħel l-iskript jipprova l-mina.
Tpoġġi kmand route f’/etc/ppp/ip-up, terġa’ tikkonnettja l-mina tal-uffiċċju, u l-fajl qatt ma jiġi esegwit. M’hemm xejn ħażin fl-iskript: dik il-konnessjoni ma tgħaddix mill-PPP xejn. Il-klijenti integrati Cisco IPSec u IKEv2 qatt ma jibdew pppd, għalhekk id-direttorju tal-hooks qatt ma jinqara, filwaqt li PPTP u L2TP fuq IPSec għadhom jgħaddu minnu. Ara liema każ għandek, imbagħad qabbad il-każ mhux PPP minn xogħol ta’ sorveljanza launchd.
Iċċekkja l-interface qabel ma teditja kwalunkwe hook
Żewġ kmandijiet jiddeċiedu liema mekkaniżmu jista’ jaħdem. Elenka s-servizzi kkonfigurati, imbagħad elenka l-interfaces li jeżistu waqt li l-mina hija attiva. L-isem tal-interface huwa l-prova; it-tikketta fis-Settings tas-Sistema mhix.
scutil --nc list
ifconfig -l | tr ' ' '\n' | grep -E '^(utun|ppp)[0-9]+$'
Servizz li jipproduċi ppp0 iħaddem il-hooks tal-PPP u se jesegwixxi l-fajl tiegħek. Servizz Cisco IPSec jew IKEv2 minflok jipproduċi apparat utun, interface tal-mina mingħajr saff PPP, għalhekk xejn ġewwa /etc/ppp ma jista’ jilħaqha. Meta jidhru ż-żewġ tipi, iċċekkja liema servizz konnettjajt. In-nies jaħlu nofs ta’ jum fuq il-hook żbaljat billi jaqraw l-isem tal-klijent.
Fuq il-passaġġ PPP il-fajl irid ikun proprjetà ta’ root u eżegwibbli, għax pppd jiċċekkja t-tnejn qabel ma jħaddem xejn. install jistabbilixxi sid u mod fi pass wieħed.
sudo install -o root -g wheel -m 0755 /dev/null /etc/ppp/ip-up
sudo ls -l /etc/ppp/ip-up
Fajl maħluq permezz tal-Finder jew editur grafiku spiss jispiċċa proprjetà tal-kont tiegħek, jew mingħajr il-bit tal-eżekuzzjoni, u mbagħad ifalli bħall-hook nieqes bl-istess silenzju. Issa poġġi ip-down ħdejh. root u wheel fil-kolonna tas-sid flimkien ma’ rwxr-xr-x fil-kolonna tal-mod huwa dak li trid.
Ħalli lil launchd jixgħel l-iskript meta tidher mina
Għall-klijenti li qatt ma jmissu l-PPP, it-trigger irid jiġi minn x’imkien ieħor, u l-maħżen tal-konfigurazzjoni tas-sistema huwa s-sors onest: macOS jikteb mill-ġdid f’kull tranżizzjoni tal-mina. Xogħol launchd li jissorvelja dak id-direttorju jissejjaħ meta mina tidher jew tisparixxi.
<?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>
Installa bħala launch daemon, mhux bħala aġent għal kull utent, għax it-tiswija tal-passaġġi hija tal-magna. bootstrap jissostitwixxi l-forma l-antika load -w fil-verżjonijiet attwali. RunAtLoad jagħmel l-ewwel eżekuzzjoni osservabbli, u ThrottleInterval iżomm ħafna bidliet ta’ konnessjoni Wi-Fi milli jibdew l-iskript ripetutament.
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
In-nassa hija li d-direttorju sorveljat jinbidel għal avvenimenti li m’għandhom x’jaqsmu xejn mal-VPN tiegħek: konnessjoni Wi-Fi, tiġdid DHCP, kejbil imdaħħal. Il-gwardjan hawn taħt ibiddel trigger storbjuż f’hook użabbli, u linja fil-log tispjega passaġġ f’siegħa stramba.
Is-sjieda tkopri l-plist kif ukoll l-iskript. Daemon li jesegwixxi fajl f’direttorju li l-kont tiegħek jista’ jikteb fih jagħti root lil dak il-kont.
Ipproteġi l-iskript sabiex it-tieni tħaddim ma jbiddel xejn
L-iskript l-ewwel jiddeċiedi jekk il-mina teżistix, u joħroġ bil-kwiet meta ma teżistix. Kollox wara dan irid ikun sigur biex jiġi ripetut, għax it-trigger jaqbad ħafna aktar spiss minn konnessjoni waħda. Issolvi l-interface fil-ħin tat-tħaddim minflok ma tikkodifika b’mod fiss indiċi li jinbidel fil-konnessjoni li jmiss.
#!/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 joħroġ bi status mhux żero meta l-passaġġ diġà jeżisti, għalhekk skript li jqis kull status mhux żero bħala falliment jirrapporta hook miksur kull darba li jagħmel il-ħaġa t-tajba. It-test b’netstat hawn fuq ibiddel dak il-każ f’no-op espliċitu.
Il-preżenza tal-interface hija prova inqas b’saħħitha milli tidher, għax klijenti VPN oħra u xi ambjenti tal-kontejners joħolqu wkoll apparati utun. Staqsi lis-servizz innifsu b’scutil --nc status "Office VPN" u tixtieq l-istat konness qabel ma tmiss ir-routing. Żomm it-tweġiba f’linja tal-log, għax ġimgħa wara dak ir-rekord ikun l-unika spjegazzjoni li jkollok.
Ġib il-gateway lura mingħajr ma tkisser id-DNS
Meta l-mina tieħu l-passaġġ awtomatiku, il-browsing ordinarju joħroġ mill-uffiċċju u l-passaġġ lokali tal-internet jieqaf jaħdem. Aqbad l-ewwel ir-router tal-interface fiżika, imbagħad erġa’ ndika l-awtomatiku lejh. DHCP jegħleb l-analiżi ta’ tabella li diġà fiha l-awtomatiku tal-mina nnifisha.
PHYS=en0
GW=$(ipconfig getoption "$PHYS" router)
[ -n "$GW" ] && sudo route -n change default "$GW"
Is-soluzzjonijiet huma saff separat b’għodda separata, u t-tiswija tal-passaġġ ma tħarishomx. Ħares b’scutil --dns lejn dak li huwa fis-seħħ, imbagħad sewwi dak li jipproduċih: l-ordni tas-servizzi u l-entrati DNS fuq is-servizz fiżiku. Meta tbattal il-cache qed tiddijanjostika tfittxija mblukkata wara bidla fin-netwerk; mhix xi ħaġa li tiskeda.
Mina li tgħaddi minn bidla fil-Wi-Fi waqt li d-DNS jieqaf hija t-tielet ħsara: sudo killall -HUP mDNSResponder iġiegħel lis-soluzzjoni taqra mill-ġdid il-konfigurazzjoni tagħha. Użah darba, bl-idejn.
Ipprova li x-xogħol jaqbad waħdu
Ġiegħel tħaddima waħda b’kickstart -k qabel ma tafda l-passaġġ tas-sorveljanza, imbagħad aqra l-istat tal-ħruġ li x-xogħol irreġistra. Ħruġ nadif jipprova li l-iskript jaħdem; ma jipprovax li t-trigger jaħdem. Imbagħad skonnettja u erġa’ kkonnettja b’xogħol mgħobbi, u ħares għal tħaddima li ma tlabtx.
sudo launchctl kickstart -k system/net.example.tunnel-watch
sudo launchctl print system/net.example.tunnel-watch | grep -E 'last exit code|state ='
Iċċekkja scutil --nc status qabel u wara kull tentattiv. Skript li ġera waqt li l-mina kienet nieżla ma jipprova xejn dwar il-passaġġ tal-konnessjoni.
Il-fergħa tat-twaqqigħ tistħoqq l-istess trattament bħall-fergħa tal-konnessjoni: neħħi l-passaġġ bl-idejn, ħalli x-xogħol jiġri, u kkonferma li jiġi lura. Hook li jżid passaġġ u qatt ma jneħħih iħalli magna li ġġib ruħha ħażin ġimgħa wara, mingħajr xejn li jgħaqqad iż-żewġ avvenimenti. Meta ż-żewġ imġiba jibqgħu, sudo launchctl bootout system/net.example.tunnel-watch jirtira x-xogħol b’mod nadif. Daemon tas-sorveljanza li jitħalla mgħobbi huwa l-mod kif tiswija ta’ darba waħda ssir passaġġ mhux spjegat xhur wara.