Saya menginginkan 'aplikasi' asli yang dapat saya jalankan saat masuk (dan terus berjalan / tersembunyi) untuk mengaktifkan perutean Split Tunnel, mirip dengan fungsi Locamatic . Mungkin saya akan bercabang Locamatic di beberapa titik dan bermain dengannya. Saya juga dapat mengunggah AppleScript ini ke Github. Saya tidak ingin dipusingkan dengan dasmon seperti yang disarankan oleh jawaban ini .
Skrip ini menganggap VPN memiliki VPN (Cisco IPSec)
nama default dan rute VPN adalah 10.10.10.1/22
> 10.10.20.10
. Ini perlu diubah / rute tambahan ditambahkan. Jalankan terminal> netstat -rn
ketika VPN terhubung (sebelum mengaktifkan skrip ini) untuk melihat rute yang ditambahkan VPN.
Script ini juga menghasilkan notifikasi gaya growl di Notification Center :)
Aku berlari ke dalam beberapa masalah dengan Mark E. Haase 's jawaban sebagai saya memodifikasi Cisco VPN gateway yang ada dari UCSc
ke UGScI
(en0 interface tertentu) rute dan menambahkan gateway VPN sebagai UCS
rute, mengharuskan penghapusan dua gateway default dan menambahkan kembali UGSc
gateway default asli
Syukurlah untuk StackExchange / google, ini adalah AppleScript pertama saya dan saya tidak akan bisa menyatukannya tanpa googling beberapa jam.
Saran / koreksi / optimasi diterima!
AppleScript ( GitHubGist ):
global done
set done to 0
on idle
set status to do shell script "scutil --nc status "VPN (Cisco IPSec)" | sed -n 1p"
# do shell script "scutil --nc start "VPN (Cisco IPSec)"
if status is "Connected" then
if done is not 1 then
display notification "VPN Connected, splitting tunnel"
set gateway to do shell script "( netstat -rn | awk '/default/ {if ( index($6, \"en\") > 0 ){print $2} }' ) # gets non-VPN default gateway"
do shell script "sudo route delete default" # deletes VPN-assigned global (UCS) default gateway
do shell script "sudo route delete default -ifscope en0" # deletes en0 interface-specific (UGScI) LOCAL non-vpn gateway that prevents it being re-added as global default gateway
do shell script "sudo route add default " & gateway # re-adds LOCAL non-vpn gateway (from get command above) as global default gateway
do shell script "sudo route add 10.10.10.1/22 10.10.20.10" # adds VPN route
display notification "VPN tunnel has been split"
set done to 1
end if
else
if done is not 2 then
display notification "VPN Disconnected"
set done to 2
end if
end if
return 5
end idle
simpan sebagai aplikasi:
klik kanan> tampilkan isi paket, tambahkan yang berikut ke info.plist (ini menyembunyikan ikon aplikasi dari dock, mengharuskan penggunaan Activity Monitor atau terminal> pkill -f 'Split Tunnel'
untuk keluar dari aplikasi, hilangkan jika Anda INGIN ikon dock:
<key>LSBackgroundOnly</key>
<string>1</string>
buat file satu-baris baru routeNOPASSWD
(tanpa ekstensi) menggunakan kode berikut PERSIS (ini dapat mencegah akses sudo jika dilakukan secara tidak benar, google visudo
untuk info lebih lanjut - ini memungkinkan perintah sudo di AppleScript dijalankan TANPA prompt kata sandi, hilangkan jika Anda INGIN prompt kata sandi ketika tabel routing perlu diubah):
%admin ALL = (ALL) NOPASSWD: /sbin/route
salin file ini ke /etc/sudoers.d
jalankan perintah berikut di terminal (perintah kedua akan meminta kata sandi - ini memungkinkan sudo route
perintah dalam AppleScript untuk dijalankan TANPA meminta kata sandi, hilangkan jika prompt kata sandi diinginkan ketika skrip mengubah tabel routing)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
akhirnya tambahkan aplikasi ke System Prefs> Users and Groups> item login