Kaydedilmiş bir Mac VPN’ini terminalden scutil --nc ile başlatma
Kaydedilmiş bir macOS VPN hizmetini başlatmak, incelemek ve durdurmak için scutil --nc kullanın, kimlik bilgilerini argv dışında tutun ve trafiğin gerçekten tüneli kullandığını kanıtlayın.
Sistem Ayarları’nda kaydedilmiş bir VPN hizmetiniz var ve terminalin onu başlatmasını istiyorsunuz. macOS’ta desteklenen yol scutil --nc, ancak yalnızca sistemin kendi ağ bağlantıları yöneticisine ait hizmetler için. Menü çubuğu API değildir: üçüncü taraf istemcilerin genellikle kendi otomasyonu vardır ve bir yönetim hizmetinin gönderdiği profil yerel başlatmayı reddedebilir. İşte izlediğim kontrol listesi: tam hizmeti bulun, durumunu okuyun, başlatın, durumun değişmesini bekleyin ve ardından trafiğin gerçekten tüneli kullandığını kanıtlayın. Uyuşmayan ilk adımda durun, çünkü sonraki her komut öncekinin başarılı olduğunu varsayar.
Hizmeti başlatmayı denemeden önce bulun
Hatırladığınız profil adı yerine envanterle başlayın:
scutil --nc help
scutil --nc list
Her satır bir durumu hizmet tanımlayıcısı, tür ve görünen adla eşleştirir. Tanımlayıcı, betik yazılan değerdir, çünkü görünen adlar tekrar eder ve düzenlenebilir. Apple’ın scutil kılavuzu ağ bağlantısı kipini belgelerken, kurulu --nc help o Mac’teki alt komutların yetkili listesidir; eski bir kılavuzdaki bayrağın macOS sürümünüzde hâlâ bulunduğunu varsaymayın.
Boş liste bir sonuçtur, hata değil. Bir satıcı istemcisi veya yönetim profili tarafından oluşturulan hizmet, burada görünmezken etkin olabilir ya da yerel denetleyicinin süremeyeceği bir türle görünebilir. Bu durumda satıcının aracını veya profil belgelerini kullanın. Başlatacak bir şey olsun diye paralel bir yerel profil oluşturmak kötü bir alışveriştir.
Geçerli durumu okuyun ve seçiciyi doğrulayın
Başlatmadan önce hizmete durumunu sorun, böylece başarılı bir başlatmanın neyi değiştirmesi gerektiğini bilirsiniz:
scutil --nc status "Office VPN"
İki hizmet aynı görünen adı paylaşıyorsa ad belirsizdir. Bunun yerine tanımlayıcıyı geçin; komut ikisini de kabul eder, ancak yalnızca tanımlayıcı tek bir hizmeti seçmeyi garanti eder. Betikte ayrıştırmadan önce durum sözcüğünün bildiğiniz biri olduğunu doğrulayın — genellikle Connected, Disconnected, Connecting veya Disconnecting. Profilin yönetilip yönetilmediğini de denetleyin, çünkü kilitli bir yapılandırma komutu kabul edip yine de yok sayabilir veya onay isteyebilir.
Bu durum çağrısı ucuzdur, bu yüzden otomasyonda bekçi olarak kullanın: yalnızca durum Disconnected iken başlatın ve Connecting’i başarısızlık saymayın. Hizmet zaten Connected ise, çalışan bir tüneli kesmek yerine başlatmayı atlayın.
Bağlantıyı başlatın ve durumun oturmasını bekleyin
Başlatma isteği eşzamansızdır. Komut, istek kabul edildiğinde döner, kimlik doğrulama bittiğinde veya rotalar kurulduğunda değil. Çalıştırın, ardından sınırlı bir beklemeyle durumu yoklayın ve hizmet Disconnected’a düşerse çıkın:
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
Hiç çözülmeyen bir Connecting durumu genellikle kimlik bilgilerine, MFA’ya veya sunucuya işaret eder, scutil’e değil. Komut etkileşimli bir oturum açma sağlayamaz, bu nedenle token veya donanım anahtarı bekleyen bir profil Connecting’de kalır ve sonunda geri düşer. Yeniden denemeler eklemeden önce durum sözcüğünü okuyun; kimlik doğrulama istemine karşı bir döngü başarılı olamaz.
Kabuğun çıkış durumunu hazırlık olarak görmeyin. Yararlı sinyal durum dizesidir, ardından tünelin trafik taşıdığına dair kanıt gelir. Sessizce dönen bir başlatma komutu sizi yine de hiç kimlik doğrulamayan bir bağlantıyla bırakabilir.
Tünelin trafik taşıdığını kanıtlayın, yalnızca Connected dediğini değil
Connected bağlantıyı tanımlar, yönlendirme kararını değil. Yerel PPP ve IKEv2 hizmetleri bir ppp veya utun arayüzü oluşturur ve rotalar kurar, bölünmüş tünel ise varsayılan rotayı bilinçli olarak dokunmadan bırakır. Arayüzleri ve her iki adres ailesini inceleyin:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
Numara tahmin etmek yerine hizmetin oluşturduğu arayüzü bulun, ardından yönlendirme tablosuna belirli bir hedefin hangi arayüzü kullandığını sorun: route -n get 10.0.0.10, yerine dahili bir ana bilgisayar koyarak. Fiziksel arayüzü bildiriyorsa tünel açıktır ama o akışı taşımıyordur. Bölünmüş tünel rotalarını, çözümleyici sırasını ve tünel arayüzüne izin verip sürece izin vermeyen her yerel güvenlik duvarı kuralını denetleyin.
Ad çözümleme olağan yanlış negatiftir. İç adlar, tünel tamamen sağlıklıyken yanlış çözümleyici üzerinden çözülebilir; bu bir VPN arızası gibi görünür ve değildir. scutil --dns macOS’un kullanacağı sırayı gösterir; çözümleyici değişikliğinden sonra önbelleği dscacheutil -flushcache ve sudo killall -HUP mDNSResponder ile boşaltın.
Kimlik bilgilerini ve ayrıcalıkları komut satırının dışında tutun
Bir parolayı, önceden paylaşılan anahtarı veya tokeni asla bağımsız değişkenlere koymayın. Bağımsız değişkenler süreç listelerinde görünür ve kabuk geçmişine düşer; kopyalanmış bir destek dökümü bunları sızdırabilir. Profilin kendi kimlik bilgisi işleyişi — ister Keychain öğesi, ister sistem istemi, ister istemcinin kimlik doğrulama akışı — sırların yeridir.
Komutu sudo ile çalıştırmak etkileşimli oturum açmayı gözetimsiz yapmaz. Etkin kullanıcıyı değiştirir, GUI isteminin, donanım tokeninin veya oturum açma anahtarlığının kullanılabilirliğini değil. Bir LaunchAgent, kullanıcı oturum açtıktan ve anahtarlık açıldıktan sonra bir hizmeti başlatabilir; bir LaunchDaemon genellikle kullanıcı oturumunun bu parçalarına ulaşamaz. Bir kuruluş hizmeti yönetiyorsa yaşam döngüsü kuralları herhangi bir yerel betikten üstündür.
Hizmeti durdurun ve durdurulmuş kaldığını doğrulayın
Başlatmak için kullandığınız aynı seçiciyle durdurun, ardından tünelin gittiğini varsaymak yerine durumu yeniden okuyun:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Disconnected’a dönen bir durdurma yine de denetlenecek bir şey bırakır: profilin istek üzerine bağlanacak şekilde ayarlanıp ayarlanmadığı; bu, betiğiniz olmadan onu geri getirebilir. Aynı Mac’te başka bir istemci rotalara sahipse, bu rotalar yerel bir durdurmayı atlatabilir. Makinenin VPN dışında olduğu sonucuna varmadan önce rotayı yeniden denetleyin.
Elle çalıştırdığınız sarmalayıcı için sırayı sabit tutun: liste, durum, başlatma, yoklama, rota testi, durdurma, doğrulama. Tanımlayıcı mevcutken serbest biçimli çıktıdan dostane adı ayrıştırmayın ve başlatma komutunun çıkışını hazırlık olarak görmeyin. Bağlantı yöneticisi durumu bildirir; kanıtınız durum artı tünele işaret eden bir rotadır.