systemd ExecCondition ile Ev VPN'ini Atlayın
Kasıtlı bir atlama ile bozuk bir hazırlık komutu farklı sonuçlardır. Yardımcının çıkış kodlarını tanımlayın, ardından ağlar arasındaki geçişi test edin.
Dizüstü bilgisayar zaten o ağdaysa ev ağı VPN'inin yapacak bir şeyi yoktur. Cazip kısa yol, sıfır olmayan bir kodla çıkan bir hazırlık komutudur; bu, unit'i başarısız kılar ve her panonun bozuk görünmesine yol açar. systemd'nin tam da bu tür kararlar için bir yönergesi vardır ve bu yönerge kasıtlı atlamayı gerçek arızadan ayırır. Bunu doğru yapmak çoğunlukla her çıkış kodunun ne anlama geldiğini yazmaktır.
Başarısız bir ön koşul neden yanlış biçimdir
ExecStartPre, sıfır olmayan bir çıkışı başlatma hatası olarak ele alır ve bu, hizmeti hazırlayan bir komut için doğrudur. Bunu koşul olarak kullanmak, bir ilke kararını bozuk bağımlılıktan ayırt edilemez kılar. ExecCondition, bir unit'in başarısız olarak işaretlenmeden başlamayı reddedebilmesi için vardır.
Bu ayrım gecenin üçünde önemlidir; kimse tasarımına uygun davranan kırmızı bir unit'i incelemek istemez. Başarısız bir unit ayrıca kasıtlı olanlar arasındaki gerçek arızaları gizler.
Önce çıkış kodu sözleşmesini yazın
Sözleşmeyi betikten önce yazın. Sıfır çıkış devam etmek, bir çıkış kalan başlatma komutlarını atlamak, 255 çıkış ise koşulun kendisinin çalışamaması anlamına gelir. İki ile 254 arasındaki kodlar da genellikle atlama anlamına gelir; bu, yardımcı rastgele bir hata kodu döndürdüğünde unutulması kolaydır. Aşağıdaki drop-in, yardımcıyı gerçek unit adına bağlar.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnVarsayılan semantiği kabul etmeden önce etkin unit'i devralınan SuccessExitStatus veya stop-post ayarları için denetleyin. Ardından üç sonucun her birini kasıtlı olarak test edin.
Ağ ipucu konum kanıtı değildir
Erişilebilir bir yönlendirici adresi veya bilinen bir MAC doğru ağı önerebilir ve hiçbiri bunu kanıtlamaz. Başka bir ağ aynı adresi yeniden kullanabilir, ARP verileri eski olabilir ve tanımlayıcılar taklit edilebilir. Sondalamayı ilkeyle tutarlı bir optimizasyon olarak görün, bir kimlik doğrulama sonucu olarak değil.
Belirsizliğin ne anlama geldiğine önceden karar verin. Emin değilken VPN'i başlatmak, yalnızca bağlanamayacak bir istemci için güvenlidir; emin değilken onu atlamak güvenli değildir. Sondalamayı sınırlı tutun ve listedeki ilkini varsaymak yerine etkin arabirimi okuyun. Asılı kalan bir sondalama, hayır yanıtı verenden daha kötüdür, çünkü unit onu bekler.
Bu varsayımları unit dosyasının yanına kaydedin ki sonraki kişi yardımcının neye inandığını bilsin. Betiğin başındaki bir yorum, bunları saklamak için en ucuz yerdir.
Ağlar arasındaki geçişi yönetin
Koşul hizmet başladığında çalışır ve daha sonra yeniden değerlendirilmez. Atlanan bir unit, dizüstü bilgisayar bir kafeye taşındıktan sonra da atlanmış kalır ve çalışan bir tünel, dizüstü bilgisayar eve döndükten sonra da açık kalır. Ağ değişikliği yaşam döngüsünü başlatma ve durdurma kararına ayrı bir mekanizmayla bağlayın.
systemctl cat home-vpn.serviceDört durumu test edin: evde başlatma, dışarıda başlatma, çalışamayan bir sondalama ve unit etkinken ağlar arasında geçiş. Atlama nedenini günlükte görünür tutun ki kasıtlı bir karar asla bir kimlik doğrulama hatası gibi görünmesin. Hizmet başvurusu, çıkış semantiğini ve en düşük sürümü belgeler.