Mulakan VPN Mac tersimpan dari terminal dengan scutil --nc
Gunakan scutil --nc untuk memulakan, memeriksa dan menghentikan perkhidmatan VPN macOS tersimpan, simpan kelayakan di luar argv dan buktikan trafik benar-benar menggunakan terowong.
Anda mempunyai perkhidmatan VPN tersimpan dalam Tetapan Sistem, dan anda mahu terminal memulakannya. Pada macOS laluan yang disokong ialah scutil --nc, tetapi hanya untuk perkhidmatan yang dimiliki oleh pengurus sambungan rangkaian sistem itu sendiri. Bar menu bukan API: klien pihak ketiga biasanya mempunyai automasi sendiri, dan profil yang ditolak oleh perkhidmatan pengurusan mungkin enggan dimulakan secara tempatan. Ini senarai semak yang saya jalankan: cari perkhidmatan yang tepat, baca keadaannya, mulakannya, tunggu keadaan berubah, kemudian buktikan trafik benar-benar menggunakan terowong. Berhenti pada langkah pertama yang tidak sepadan, kerana setiap arahan berikutnya menganggap arahan sebelumnya berjaya.
Cari perkhidmatan sebelum cuba memulakannya
Mulakan dengan inventori, bukan nama profil yang anda ingat:
scutil --nc help
scutil --nc list
Setiap baris memasangkan status dengan pengecam perkhidmatan, jenis dan nama paparan. Pengecam ialah nilai untuk skrip, kerana nama paparan berulang dan boleh diedit. Manual scutil Apple mendokumenkan mod sambungan rangkaian, manakala --nc help yang dipasang ialah senarai subperintah yang berwibawa pada Mac itu; jangan anggap bendera daripada panduan lama masih wujud dalam versi macOS anda.
Senarai kosong ialah hasil, bukan ralat. Perkhidmatan yang dicipta oleh klien vendor atau profil pengurusan boleh aktif semasa tidak kelihatan di sini, atau kelihatan dengan jenis yang tidak dapat dikendalikan oleh pengawal asli. Dalam kes itu, gunakan alat vendor atau dokumentasi profil. Mencipta profil asli selari hanya untuk mempunyai sesuatu untuk dimulakan ialah pertukaran yang buruk.
Baca keadaan semasa dan sahkan pemilih
Tanyakan keadaan perkhidmatan sebelum memulakannya, supaya anda tahu apa yang perlu diubah oleh permulaan yang berjaya:
scutil --nc status "Office VPN"
Jika dua perkhidmatan berkongsi nama paparan, namanya kabur. Berikan pengecam sebaliknya; arahan menerima kedua-duanya, tetapi hanya pengecam dijamin memilih satu perkhidmatan. Sebelum menghuraikannya dalam skrip, periksa bahawa perkataan keadaan ialah salah satu yang anda kenal — biasanya Connected, Disconnected, Connecting atau Disconnecting. Periksa juga sama ada profil diurus, kerana konfigurasi terkunci boleh menerima arahan itu tetapi masih mengabaikannya atau meminta pengesahan.
Panggilan keadaan ini murah, jadi gunakannya sebagai pengawal dalam automasi: mulakan hanya apabila status Disconnected, dan jangan anggap Connecting sebagai kegagalan. Jika perkhidmatan sudah Connected, langkau permulaan daripada mengganggu terowong yang berfungsi.
Mulakan sambungan dan tunggu keadaan stabil
Permintaan permulaan adalah tak segerak. Arahan kembali apabila permintaan diterima, bukan apabila pengesahan selesai atau laluan dipasang. Jalankannya, kemudian tinjau keadaan dengan tunggu terhad dan keluar jika perkhidmatan kembali ke Disconnected:
scutil --nc start "Office VPN"
n=0
while [ "$n" -lt 30 ]; do
state=$(scutil --nc status "Office VPN" | head -n 1)
[ "$state" = "Connected" ] && break
[ "$state" = "Disconnected" ] && { echo "start failed"; exit 1; }
sleep 2
n=$((n + 1))
done
Status Connecting yang tidak pernah selesai biasanya menunjuk kepada kelayakan, MFA atau pelayan, bukan scutil. Arahan tidak boleh menyediakan log masuk interaktif, jadi profil yang menjangkakan token atau kunci perkakasan akan kekal dalam Connecting dan akhirnya berundur. Baca perkataan keadaan sebelum menambah cubaan semula; gelung menentang gesaan pengesahan tidak boleh berjaya.
Jangan anggap status keluar shell sebagai kesediaan. Isyarat berguna ialah rentetan keadaan, diikuti bukti bahawa terowong membawa trafik. Arahan permulaan yang kembali senyap masih boleh meninggalkan anda dengan sambungan yang tidak pernah disahkan.
Buktikan terowong membawa trafik, bukan hanya mengatakan Connected
Connected menerangkan sambungan, bukan keputusan penghalaan. Perkhidmatan PPP dan IKEv2 asli mencipta antara muka ppp atau utun dan memasang laluan, manakala terowong berpecah sengaja membiarkan laluan lalai tidak disentuh. Periksa antara muka dan kedua-dua keluarga alamat:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
Cari antara muka yang dicipta oleh perkhidmatan daripada meneka nombor, kemudian tanyakan jadual penghalaan antara muka mana yang digunakan oleh destinasi tertentu: route -n get 10.0.0.10, dengan hos dalaman menggantikannya. Jika ia melaporkan antara muka fizikal, terowong aktif tetapi tidak membawa aliran itu. Periksa laluan terowong berpecah, susunan penyelesai dan mana-mana peraturan tembok api setempat yang membenarkan antara muka terowong tetapi bukan proses.
Penyelesaian nama ialah negatif palsu biasa. Nama dalaman boleh diselesaikan melalui penyelesai yang salah semasa terowong sihat sepenuhnya, yang kelihatan seperti kerosakan VPN dan bukan. scutil --dns menunjukkan susunan yang akan digunakan oleh macOS; selepas perubahan penyelesai, kosongkan cache dengan dscacheutil -flushcache dan sudo killall -HUP mDNSResponder.
Jauhkan kelayakan dan keistimewaan daripada baris arahan
Jangan sekali-kali meletakkan kata laluan, kunci yang dikongsi terlebih dahulu atau token dalam argumen. Argumen kelihatan dalam senarai proses dan masuk ke sejarah shell, dan transkrip sokongan yang disalin boleh membocorkannya. Pengendalian kelayakan profil itu sendiri — sama ada item Keychain, gesaan sistem atau aliran pengesahan klien — ialah tempat untuk rahsia.
Menjalankan arahan dengan sudo tidak menjadikan log masuk interaktif tanpa pengawasan. Ia menukar pengguna berkesan, bukan ketersediaan gesaan GUI, token perkakasan atau keychain log masuk. LaunchAgent boleh memulakan perkhidmatan selepas pengguna log masuk dan keychain dibuka; LaunchDaemon biasanya tidak dapat mencapai bahagian sesi pengguna itu. Jika organisasi mengurus perkhidmatan itu, peraturan kitaran hayatnya mengatasi mana-mana skrip setempat.
Hentikan perkhidmatan dan sahkan ia kekal berhenti
Hentikan dengan pemilih yang sama yang anda gunakan untuk memulakan, kemudian baca keadaan semula daripada menganggap terowong telah hilang:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Penghentian yang kembali ke Disconnected masih meninggalkan satu perkara untuk diperiksa: sama ada profil ditetapkan untuk bersambung atas permintaan, yang boleh membawanya kembali tanpa skrip anda. Jika klien lain memiliki laluan pada Mac yang sama, laluan itu boleh bertahan daripada penghentian asli. Jalankan semula pemeriksaan laluan sebelum membuat kesimpulan bahawa mesin berada di luar VPN.
Untuk pembalut yang anda jalankan secara manual, kekalkan urutan tetap: senarai, status, permulaan, tinjauan, ujian laluan, penghentian, pengesahan. Jangan huraikan nama mesra daripada output bebas apabila pengecam tersedia, dan jangan anggap keluaran arahan permulaan sebagai kesediaan. Pengurus sambungan melaporkan keadaan; bukti anda ialah keadaan serta laluan yang menunjuk ke terowong.