VPN ayağa kalktıktan sonra çalışması gereken bir betik, bağlantıya sahip olan bileşenden bir olay bekler. Eski bir ağ kancası dizinine bırakılan dosya, NetworkManager, pppd veya bağımsız bir OpenVPN sürecinin oluşturabileceği her VPN için geri çağırma değildir. Bu sahiplerin her biri farklı bir ortamla farklı bir olay bildirir, bu yüzden kanca seçilmeden önce sahibin belirlenmesi gerekir. Aksi hâlde betik doğrudur ve yalnızca hiç çalışmaz.

NetworkManager tarafından yönetilen bir VPN için dispatcher doğru yerdir ve vpn-up doğru eylemdir.

Arayüz olayını değil, vpn-up kullanın

Dispatcher, up ile vpn-up arasını ayırır. İlki etkinleştirilmiş bir arayüzü bildirir; ikincisi etkinleştirilmiş bir VPN bağlantısını bildirir. Wi-Fi'nin ayağa kalkması yalnızca alttaki bağlantının var olduğu anlamına gelir; tünel hâlâ pazarlık yapıyor olabilir ya da hiç kimlik doğrulamayabilir.

Betik arayüzü ve eylemi alır, bağlantı ayrıntıları ise ortam üzerinden gelir; buna profilin UUID'si ve VPN'nin IP arayüzü dahildir. Kimliği aygıt adlarından çıkarmak yerine bu değişkenleri okuyun.

Eşleşmeyi tek bir bağlantıyla sınırlayın

Bağlantının UUID'sine veya dispatcher'ın verdiği başka bir kimliğe göre eşleştirin, tun öneki ya da ppp0 ile değil. Arayüz adları kararlı değildir, aynı anda birden fazla tünel bulunabilir ve iki profil aynı görünen adı taşıyabilir. tun önekini eşleştirmek, betiğin eninde sonunda kimsenin dokunmayı amaçlamadığı bir bağlantı için tetiklenmesi demektir. Bir profil için, yeniden bağlanma aygıtı yeniden kurduğunda iki kez de tetiklenebilir.

Görevi idempotent yapın. Her çağrıda bir rota ekleyen geri çağırma sonunda tabloyu kopyalarla doldurur ve yönlendirmeyi bozan ikinci kopyadır.

Etkinleştirmenin neyi kanıtlamadığını bilin

vpn-pre-up, NetworkManager VPN'yi tamamen etkin olarak bildirmeden önce çalışır ve yönetici bu betikleri bekler. Engelleyici aşamayı yalnızca görev gerçekten oraya aitse kullanın, çünkü yavaş bir kontrol, diğer tüm bileşenlerin görmeyi beklediği etkinleştirmeyi geciktirir.

Rotaların varlığı bir uygulamanın dinlediğini, özel bir adın çözüldüğünü veya bir kullanıcı oturumunun bulunduğunu kanıtlamaz. Bunları sınırlı bir zaman aşımıyla ayrı ayrı kontrol edin ve tüm zinciri yeniden denemek yerine hangi katmanın başarısız olduğunu bildirin.

Betiğin çalıştığı bağlama saygı gösterin

Dispatcher betikleri root olarak, herhangi bir kullanıcı oturumunun dışında çalışır. Oturum açmış kullanıcının ortamının, grafik oturumunun veya kilidi açılmış anahtarlığın kullanılabilir olduğunu varsaymayın. Kimse masaüstü bağlamının yokluğuna her kimlik bilgisini her süreç için okunabilir kılarak yanıt vermemelidir. Kullanıcı oturumu işini, geri çağırmanın kullanıcıyı taklit etmeden sinyal verebileceği bir kullanıcı hizmetinde veya oturum yardımcısında tutun.

Betiğin sahipliği ve izinleri de önemlidir. root olarak çalıştırılan ve her kullanıcının değiştirebileceği bir dosya ayrıcalık yükseltme yoludur ve bu, VPN mantığının doğru olup olmadığından bağımsız bir bulgudur.

Hiç tetiklenmeyen bağlantı kopması için plan yapın

NetworkManager, beklenmedik sonlanma veya bağlantı kaybı gibi zorunlu kopmalarda vpn-pre-down olayının yayınlanmadığını belgeler. Bu yüzden yalnızca yumuşak bir pre-down etrafında kurulan temizlik yapısal olarak eksiktir. Betiğin değiştirdiği her paylaşılan durum, çökmeden sonra onu geri yükleyebilecek başka bir sahibe ihtiyaç duyar ve bu kurtarma yolu varsayılmak yerine test edilmelidir.

Kancayı normal bağlantı, yeniden bağlanma, kasıtlı kopma ve çekilmiş kabloyla deneyin. Sırları günlüğe yazmadan UUID'yi, eylemi ve tetiklenen arayüzü kaydedin. Bu kayıt, kancanın amaçladığınız bağlantı için çalıştığına dair tek güvenilir kanıttır ve bir sonraki değişikliği güvenli kılan da odur.

İlgili makaleler