તમે /etc/ppp/ip-up માં route આદેશ મૂકો છો, ઓફિસ ટનલ ફરી જોડો છો, અને ફાઇલ ક્યારેય ચાલતી નથી. સ્ક્રિપ્ટમાં કંઈ ખોટું નથી: તે જોડાણ PPP દ્વારા જ જતું નથી. અંતર્નિર્મિત Cisco IPSec અને IKEv2 ક્લાયન્ટ ક્યારેય pppd શરૂ કરતા નથી, તેથી હૂક ડિરેક્ટરી ક્યારેય વંચાતી નથી, જ્યારે PPTP અને IPSec ઉપરનું L2TP હજી પણ તેમાંથી પસાર થાય છે. તમારો કયો કેસ છે તે નક્કી કરો, પછી બિન-PPP કેસ launchd દેખર કામમાંથી શરૂ કરો.

કોઈપણ હૂક સંપાદિત કરતા પહેલાં ઇન્ટરફેસ તપાસો

બે આદેશ નક્કી કરે છે કે કઈ પદ્ધતિ કામ કરી શકે. ગોઠવેલી સેવાઓની યાદી બનાવો, પછી ટનલ ચાલુ હોય ત્યારે અસ્તિત્વમાં રહેલા ઇન્ટરફેસની યાદી બનાવો. ઇન્ટરફેસનું નામ એ પુરાવો છે; સિસ્ટમ સેટિંગ્સનું લેબલ નથી.

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

ppp0 ઉત્પન્ન કરતી સેવા PPP હૂક ચલાવે છે અને તમારી ફાઇલ ચલાવશે. Cisco IPSec અથવા IKEv2 સેવા તેના બદલે utun ઉપકરણ ઉત્પન્ન કરે છે, PPP સ્તર વગરનું ટનલ ઇન્ટરફેસ, તેથી /etc/ppp ની અંદરનું કંઈ તેને પહોંચી શકતું નથી. બંને પ્રકાર દેખાય ત્યારે તપાસો કે તમે કઈ સેવા સાથે જોડાયા છો. લોકો ક્લાયન્ટનું નામ વાંચીને ખોટા હૂક પર બપોર ગુમાવે છે.

PPP માર્ગ પર ફાઇલ root ની માલિકીની અને ચલાવી શકાય તેવી હોવી જોઈએ, કારણ કે pppd કંઈપણ ચલાવતા પહેલાં બંને તપાસે છે. install એક જ પગલામાં માલિક અને મોડ સેટ કરે છે.

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

Finder અથવા ગ્રાફિકલ એડિટર દ્વારા બનાવેલી ફાઇલ ઘણી વાર તમારા ખાતાની માલિકીની અથવા એક્ઝિક્યુટ બિટ વગર રહે છે, અને પછી ખૂટતા હૂક જેટલી જ શાંતિથી નિષ્ફળ જાય છે. હવે તેની બાજુમાં ip-down મૂકો. માલિક કોલમમાં root અને wheel તથા મોડ કોલમમાં rwxr-xr-x એ તમે ઇચ્છો છો તે છે.

ટનલ દેખાય ત્યારે launchd ને સ્ક્રિપ્ટ ચલાવવા દો

જે ક્લાયન્ટ PPP ને ક્યારેય સ્પર્શતા નથી તેમના માટે ટ્રિગર બીજે ક્યાંકથી આવવું જોઈએ, અને સિસ્ટમ ગોઠવણી સ્ટોર સાચો સ્રોત છે: macOS દરેક ટનલ સંક્રમણમાં તેને ફરી લખે છે. તે ડિરેક્ટરી પર દેખર રાખતું launchd કામ ટનલ દેખાય કે અદૃશ્ય થાય ત્યારે બોલાવવામાં આવે છે.

<?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>

તેને launch daemon તરીકે સ્થાપિત કરો, દરેક વપરાશકર્તા માટે એજન્ટ તરીકે નહીં, કારણ કે માર્ગ સુધારણા મશીનની છે. bootstrap વર્તમાન આવૃત્તિઓમાં જૂનું સ્વરૂપ load -w બદલે છે. RunAtLoad પ્રથમ ચલાવવાને અવલોકનયોગ્ય બનાવે છે, અને ThrottleInterval Wi-Fi જોડાણના ફેરફારોની ધારાને સ્ક્રિપ્ટ વારંવાર શરૂ કરતી અટકાવે છે.

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

જાળ એ છે કે દેખર રખાયેલી ડિરેક્ટરી તમારા VPN સાથે સંબંધ ન ધરાવતી ઘટનાઓ માટે પણ બદલાય છે: Wi-Fi જોડાણ, DHCP નવીકરણ, કેબલ ભરાવવો. નીચેનો રક્ષક ઘોંઘાટીયા ટ્રિગરને વપરાયોગ્ય હૂકમાં ફેરવે છે, અને એક લોગ લાઇન વિચિત્ર કલાકની માર્ગ સમજાવે છે.

માલિકી સ્ક્રિપ્ટની સાથે plist ને પણ આવરે છે. જે ડેમન તમારું પોતાનું ખાતું લખી શકે તેવી ડિરેક્ટરીમાં ફાઇલ ચલાવે છે તે તે ખાતાને root આપે છે.

સ્ક્રિપ્ટનું રક્ષણ કરો જેથી બીજું ચલાવવું કંઈ બદલે નહીં

સ્ક્રિપ્ટ પહેલાં નક્કી કરે છે કે ટનલ છે કે નહીં, અને ન હોય તો શાંતિથી નીકળી જાય છે. તેના પછીનું બધું પુનરાવર્તન માટે સુરક્ષિત હોવું જોઈએ, કારણ કે ટ્રિગર એક જોડાણ કરતાં ઘણી વાર વધુ ચાલે છે. આગલા જોડાણમાં બદલાતા ઇન્ડેક્સને હાર્ડકોડ કરવાને બદલે ઇન્ટરફેસ રનટાઇમ પર ઉકેલો.

#!/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 માર્ગ પહેલેથી હાજર હોય ત્યારે શૂન્યેતર સ્થિતિ સાથે નીકળે છે, તેથી દરેક શૂન્યેતર સ્થિતિને નિષ્ફળતા ગણતું સ્ક્રિપ્ટ સાચું કામ કરે ત્યારે પણ દર વખતે તૂટેલા હૂકનો અહેવાલ આપે છે. ઉપરની netstat કસોટી તે સ્થિતિને સ્પષ્ટ no-op બનાવે છે.

ઇન્ટરફેસની હાજરી દેખાય તેનાથી નબળો પુરાવો છે, કારણ કે અન્ય VPN ક્લાયન્ટ અને કેટલાક કન્ટેનર પર્યાવરણો પણ utun ઉપકરણો બનાવે છે. scutil --nc status "Office VPN" સાથે સેવાને જ પૂછો અને રૂટિંગને સ્પર્શતા પહેલાં જોડાયેલી સ્થિતિ માંગો. જવાબ લોગ લાઇનમાં રાખો, કારણ કે એક અઠવાડિયા પછી તે નોંધ તમારી પાસેની એકમાત્ર સમજૂતી હશે.

DNS તોડ્યા વગર ગેટવે પાછો લાવો

ટનલ ડિફોલ્ટ માર્ગ લઈ લે ત્યારે સામાન્ય બ્રાઉઝિંગ ઓફિસ થઈને બહાર જાય છે અને સ્થાનિક ઇન્ટરનેટ માર્ગ કામ કરવાનું બંધ કરે છે. પહેલાં ફિઝિકલ ઇન્ટરફેસનું રાઉટર પકડો, પછી ડિફોલ્ટ ફરી તેની તરફ વાળો. DHCP એવા કોષ્ટકને પાર્સ કરવા કરતાં સારું છે જેમાં પહેલેથી ટનલનું પોતાનું ડિફોલ્ટ હોય.

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

રિઝોલ્વર અલગ સાધન સાથેનું અલગ સ્તર છે, અને માર્ગ સુધારવાથી તે સુધરતા નથી. scutil --dns સાથે જુઓ કે શું અમલમાં છે, પછી જે તેને ઉત્પન્ન કરે છે તે સુધારો: સેવાઓનો ક્રમ અને ફિઝિકલ સેવા પરના DNS એન્ટ્રી. કેશ ફ્લશ કરવું નેટવર્ક ફેરફાર પછી અટકેલી શોધનું નિદાન કરે છે; તે નિર્ધારિત કરવા જેવી વસ્તુ નથી.

Wi-Fi ફેરફાર ટકી રહેતું પણ DNS અટકી જતું ટનલ ત્રીજી ખામી છે: sudo killall -HUP mDNSResponder રિઝોલ્વરને તેની ગોઠવણી ફરી વાંચવા મજબૂર કરે છે. તેને એક વાર, હાથથી વાપરો.

સાબિત કરો કે કામ જાતે ચાલે છે

દેખર માર્ગ પર ભરોસો કરતા પહેલાં kickstart -k સાથે એક ચલાવવું ફરજિયાત કરો, પછી કામે નોંધેલી એક્ઝિટ સ્થિતિ વાંચો. સ્વચ્છ એક્ઝિટ સાબિત કરે છે કે સ્ક્રિપ્ટ કામ કરે છે; તે સાબિત કરતું નથી કે ટ્રિગર કામ કરે છે. પછી કામ લોડ કરેલું હોય તેમ ડિસ્કનેક્ટ અને ફરી જોડો, અને તમે ન માંગ્યું હોય તેવા ચલાવવા પર નજર રાખો.

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

દરેક પ્રયાસ પહેલાં અને પછી scutil --nc status તપાસો. ટનલ નીચે હતું ત્યારે ચાલેલી સ્ક્રિપ્ટ જોડાણ માર્ગ વિશે કંઈ સાબિત કરતી નથી.

તોડવાની શાખા જોડાણ શાખા જેવી જ કાળજી લાયક છે: માર્ગ હાથથી દૂર કરો, કામ ચાલવા દો, અને તે પાછો આવે છે તેની ખાતરી કરો. જે હૂક માર્ગ ઉમેરે છે અને ક્યારેય દૂર કરતો નથી તે એક અઠવાડિયા પછી ખરાબ વર્તન કરતું મશીન છોડી જાય છે, અને બે ઘટનાને કંઈ જોડતું નથી. બંને વર્તન ટકે ત્યારે sudo launchctl bootout system/net.example.tunnel-watch કામને સ્વચ્છ રીતે નિવૃત્ત કરે છે. લોડ કરેલો રહેવા દીધેલો દેખર ડેમન એ જ રીત છે જેમાં એકવારની સુધારણા મહિનાઓ પછી અસ્પષ્ટ માર્ગ બની જાય છે.

સંબંધિત લેખો